Yazım hatalarını ve yazım yanlışlarını düzeltmek için bulanık arama

Not

Azure Yapay Zeka Arama Azure portalı, REST API'leri ve Azure SDK’ları aracılığıyla kullanılabilir. Ayrıca kuruluş içeriğini Microsoft Foundry portalındaki aracılar için yeniden kullanılabilir, izin kullanan bilgi bankalarına dönüştüren yönetilen bilgi katmanı Foundry IQ'yu temel alır.

Azure Yapay Zeka Arama, arama dizesindeki yazım hatalarını ve yanlış yazılmış terimleri telafi eden bir sorgu türü olan bulanık aramayı destekler. Bulanık arama, benzer bir bileşime sahip terimleri tarar. Yakın eşleşmeleri kapsayacak şekilde aramanın genişletilmesi, tutarsızlık yalnızca birkaç yanlış yerleştirilmiş karakter olduğunda yazım hatasının otomatik düzeltilmesine neden olur.

Benzer bir bileşime sahip terimler için eşleşme oluşturan bir sorgu genişletme alıştırması. Bulanık bir arama belirtildiğinde, arama motoru, sorgudaki tüm tam terimler için benzer şekilde oluşturulmuş terimlerden oluşan bir graf (belirlenimci sonlu otomat teorisine göre) oluşturur. Örneğin, sorgunuz üç terim "university of washington"içeriyorsa, sorgudaki search=university~ of~ washington~ her terim için bir grafik oluşturulur (belirsiz aramada durdurma sözcüğü kaldırma yoktur, bu nedenle "of" bir grafik alır).

Graf, işlemdeki hem doğru hem de yanlış değişkenleri yakalayan her terim için en fazla 50 genişletme veya permütasyondan oluşur. Motor daha sonra yanıtta en öne çıkan ilgili eşleşmeleri döndürür.

"Üniversite" gibi bir terim için grafikte "unversty, universty, university, universe, inverse" bulunabilir. Grafiktekilerle eşleşen tüm belgeler sonuçlara eklenir. Diğer sorguların aynı kelimenin farklı biçimlerini ("fareler" ve "fare") işlemek için metni analiz etmesinin aksine, bulanık sorgulardaki karşılaştırmalar metin üzerinde herhangi bir dil analizi yapılmadan doğrudan ele alınır. "Evren" ve "ters", anlamsal olarak farklıdır, ancak sentaktik tutarsızlıklar küçüktür.

Farklar iki veya daha az düzenlemeyle sınırlıysa eşleşme başarılı olur; burada düzenleme eklenen, silinen, değiştirilen veya yer değiştirilen bir karakterdir. Farkları belirten dize düzeltme algoritması ,Damerau-Levenshtein uzaklık ölçümüdür. "Bir sözcüğü diğer sözcükle değiştirmek için gereken en az işlem sayısı (eklemeler, silmeler, değiştirmeler veya iki bitişik karakterin transpozisyonları) olarak tanımlanır.

Azure Yapay Zeka Arama'te:

  • Bulanık arama tüm terimlere uygulanır. Çok parçalı bir ifadenin her teriminde bulanık bir eşleşme belirtebilirsiniz, ancak ifadeler doğrudan desteklenmez; bunun yerine, AND yapıları kullanabilirsiniz. Örneğin, search=dr~ AND cleanin~. Bu sorgu ifadesi "kuru temizleme" ile eşleşenleri bulur.

  • Bir düzenlemenin varsayılan uzaklığı 2'dir. ~0 değeri, genişlemenin olmadığını belirtir (yalnızca tam terim eşleşme olarak kabul edilir), ancak bir derecelik fark veya bir düzenleme için ~1 belirtebilirsiniz.

  • Bulanık bir sorgu, bir terimi 50 permütasyona kadar genişletebilir. Bu sınır yapılandırılamaz, ancak düzenleme mesafesini 1'e düşürerek genişletme sayısını etkili bir şekilde azaltabilirsiniz.

  • Yanıtlar, ilgili eşleşme içeren belgelerden oluşur (en fazla 50).

Sorgu işleme sırasında benzer sorgular sözcük temelli analizden geçemez. Sorgu girişi doğrudan sorgu ağacına eklenir ve terim grafı oluşturmak için genişletilir. Gerçekleştirilen tek dönüştürme alt büyük/küçük harftir.

Görseller toplu bir şekilde, dizindeki belirteçlere karşı eşleme kriteri olarak gönderilir. Bildiğiniz gibi, bulanık arama doğal olarak diğer sorgu formlarından daha yavaştır. Dizininizin boyutu ve karmaşıklığı, avantajların yanıtın gecikme süresini dengelemek için yeterli olup olmadığını belirleyebilir.

Not

Benzer arama yavaş olma eğiliminde olduğundan, kısa karakter dizilerinin (bigram ve trigram belirteçleri için iki ve üç karakter dizisi) ilerlemesiyle n-gram dizinleme gibi alternatifleri araştırmak faydalı olabilir. Dilinize ve sorgu yüzeyinize bağlı olarak, n-gram size daha iyi performans verebilir. N-gram dizinlemenin çok depolama yoğun olması ve daha büyük dizinler oluşturması şeklinde bir takası vardır.

Yalnızca en kötü durumları işlemek istiyorsanız göz önünde bulundurabileceğiniz bir diğer alternatif de eş anlamlı bir harita olacaktır. Örneğin, "search" öğesini "serach, serch, sarch" olarak veya "retrieve" öğesini "retreive" olarak eşleme.

"Aranabilir" olarak nitelenen dize alanları, belirsiz arama için adaylardır.

Çözümleyiciler bir genişletme grafiği oluşturmak için kullanılmaz, ancak bu benzer arama senaryolarında çözümleyicilerin yoksayılması gerektiği anlamına gelmez. Dizinleme sırasında, ters dizinlerdeki belirteçlerin grafla eşleştirilmesi sürecinde kullanılan belirteç oluşturma işlemi için çözümleyiciler önemlidir.

Her zaman olduğu gibi, test sorguları beklediğiniz eşleşmeleri oluşturmuyorsa farklı dizin oluşturma çözümleyicileriyle denemeler yapın. Örneğin, daha iyi sonuçlar alınıp alınmadığını görmek için bir dil çözümleyicisi deneyin. Bazı diller, özellikle sesli mutasyonlara sahip olanlar, Microsoft doğal dil işlemcileri tarafından oluşturulan bükme ve düzensiz sözcük biçimlerinden yararlanabilir. Bazı durumlarda doğru dil çözümleyicisinin kullanılması, bir terimin kullanıcı tarafından sağlanan değerle uyumlu bir şekilde belirtilip belirtilmediği konusunda bir fark oluşturabilir.

Benzer sorgular, tam Lucene sorgu söz dizimi kullanılarak oluşturulur, tam Lucene sorgu ayrıştırıcısı çağrılır ve kullanıcı tarafından girilen her terimin sonuna bir tilde karakteri ~ eklenir.

Aşağıda, belirsiz aramayı çağıran bir sorgu isteği örneği verilmiştir. Dört terim içerir ve ikisi yanlış yazılmıştır:

POST https://[service name].search.windows.net/indexes/hotels-sample/docs/search?api-version=2026-04-01
{
    "search": "seatle~ waterfront~ view~ hotle~",
    "queryType": "full",
    "searchMode": "any",
    "searchFields": "HotelName, Description",
    "select": "HotelName, Description, Address/City",
    "count": true
}
  1. Sorgu türünü tam Lucene söz dizimine (queryType=full ) ayarlayın.

  2. Her terimin ardından tüm terimin () sonunda~ bir tilde (search=<string>~) işlecinin geldiği sorgu dizesini sağlayın. Sorgu girişindeki her terim için bir genişletme grafiği oluşturulur.

    Düzenleme uzaklığı () belirtmek istiyorsanız, isteğe bağlı bir parametre, 0 ile 2 arasında bir sayı (~1varsayılan) ekleyin. Örneğin, "mavi~" veya "mavi~1" aramaları "mavi", "maviler" ve "tutkal" sonuçlarını döndürebilir.

İsteğe bağlı olarak, isteğin kapsamını belirli alanlara göre sıralayarak sorgu performansını geliştirebilirsiniz. searchFields Aranacak alanları belirtmek için parametresini kullanın. Sorgu yanıtında select hangi alanların döndürüleceğini belirtmek için özelliğini de kullanabilirsiniz.

Basit test için, sorgu ifadesi üzerinde yineleme için Arama gezginini veya REST istemcisini öneririz. Her iki araç da etkileşimlidir; başka bir deyişle bir terimin birden çok çeşidinde hızla ilerleyebilir ve geri gelen yanıtları değerlendirebilirsiniz.

Sonuçlar belirsiz olduğunda, vurgulama özelliği yanıttaki eşleşmeyi belirlemenize yardımcı olabilir.

Not

Benzer eşleşmeler olarak da bilinen bulanık eşleşmeleri tanımlamak için vurgulu aramanın kullanılmasında sınırlamalar vardır ve yalnızca temel bulanık arama için çalışır. Dizininizde puanlama profilleri varsa veya sorguyu daha fazla söz dizimi ile katmanlarsanız isabet vurgulama eşleşmeyi belirleyemeyebilir.

Örnek 1: tam terimle bulanık arama

Arama belgesindeki bir "Description" alanda aşağıdaki dizenin mevcut olduğunu varsayalım: "Test queries with special characters, plus strings for MSFT, SQL and Java."

"Özel" için bulanık bir arama ile başlayın ve Açıklama alanına vurgu ekleyin:

search=special~&highlight=Description

Yanıtta, isabet vurgulama eklediğiniz için "özel" terimi eşleşen terim olarak biçimlendirilmiştir.

"@search.highlights": {
    "Description": [
        "Test queries with <em>special</em> characters, plus strings for MSFT, SQL and Java."
    ]
}

İsteği yeniden deneyin, birkaç harf çıkararak "özel" kelimesini yanlış yazın ("pe"):

search=scial~&highlight=Description

Şu ana kadar yanıtta bir değişiklik olmadı. Varsayılan olarak 2 derecelik mesafe göz önünde bulundurulduğunda, "özel"den iki karakterin "pe" kaldırılması, bu terim üzerinde başarılı bir eşleşmeye izin verir.

"@search.highlights": {
    "Description": [
        "Test queries with <em>special</em> characters, plus strings for MSFT, SQL and Java."
    ]
}

Bir isteği daha denerken, toplam üç silme işlemi yapmak için "special" kelimesinden son bir karakter çıkararak arama terimini "scal" şekline dönüştürün.

search=scal~&highlight=Description

Aynı yanıt döndürülür, ancak artık "special" ile eşleştirme yapmak yerine bulanık eşleşme "SQL" üzerinde yapılır.

"@search.score": 0.4232868,
"@search.highlights": {
    "Description": [
        "Mix of special characters, plus strings for MSFT, <em>SQL</em>, 2019, Linux, Java."
    ]
}

Bu genişletilmiş örneğin amacı, isabet vurgulamanın belirsiz sonuçlara getirebileceği açıklığı göstermektir. Her durumda aynı belge döndürülür. Eşleşmeyi doğrulamak için belge kimliklerine bağlı kaldıysanız, "special"dan "SQL"e geçişi kaçırabilirsiniz.