Yazım hatalarını ve yazım hatalarını düzeltmek için benzer arama

Azure AI Search, giriş dizesindeki yazım hatalarını ve yanlış yazılmış terimleri telafi eden bir sorgu türü olan belirsiz aramayı destekler. Benzer bir bileşime sahip terimler için benzer arama taramaları. 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ı. Benzer bir arama belirtildiğinde, arama motoru sorgudaki tüm terimler için benzer şekilde oluşturulmuş terimlerden oluşan bir graf (belirlenimci sonlu automaton 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. Altyapı daha sonra yanıtta en üstteki ilgili eşleşmeleri döndürür.

"Üniversite" gibi bir terim için grafikte olabilir "unversty, universty, university, universe, inverse". Grafiktekilerle eşleşen tüm belgeler sonuçlara eklenir. Aynı sözcüğün ("fare" ve "fare") farklı biçimlerini işlemek için metni analiz eden diğer sorgulardan farklı olarak, benzer bir sorgudaki karşılaştırmalar metin üzerinde herhangi bir dil analizi yapılmadan yüz değerinde alınır. "Evren" ve "ters" arasındaki farklar, tekinsiz tutarsızlıklar küçük olduğundan eşleşir.

Tutarsızlıklar 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 dönüştürülen bir karakterdir. Farkı 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 AI Arama'da:

  • Benzer sorgu tüm terimler için geçerlidir. Tümcecikler doğrudan desteklenmez, ancak AND yapıları aracılığıyla çok parçalı bir tümceciğin her teriminde benzer bir eşleşme belirtebilirsiniz. Örneğin, search=dr~ AND cleanin~. Bu sorgu ifadesi "kuru temizleme" ile eşleşenleri bulur.

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

  • Benzer bir sorgu 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.

Grafikler toplu olarak dizindeki belirteçlere göre eşleşme ölçütü olarak gönderilir. Tahmin edebileceğiniz gibi, benzer 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 yoğun depolamalı olması ve çok daha büyük dizinler oluşturması avantajlı bir işlemdir.

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" veya "retrieve" ile "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. Çözümleyiciler, ters dizinlerdeki belirteçlerin grafla eşleştirmek için kullanıldığı dizin oluşturma sırasında belirteç oluşturma için ö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 belirteç haline getirilip getirilmediğ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-index/docs/search?api-version=2023-11-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 () sonundasearch=<string>~ bir tilde (~) 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" "mavi", "blues" ve "tutkal" döndürür.

İ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, isabet vurgulama yanıttaki eşleşmeyi belirlemenize yardımcı olabilir.

Not

Benzer eşleşmeleri tanımlamak için isabet vurgulamanın kullanılmasında sınırlamalar vardır ve yalnızca temel belirsiz 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 terimiyle benzer 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" üzerinde benzer bir aramayla başlayın ve Açıklama alanına isabet vurgulama ekleyin:

search=special~&highlight=Description

Yanıtta, isabet vurgulama eklediğiniz için biçimlendirme eşleşen terim olarak "özel" olarak uygulanır.

"@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" sözcüğü 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 istek daha denediğinizde, toplam üç silme işlemi için son bir karakteri çıkararak arama terimini daha fazla değiştirin ("özel" "scal"yerine ):

search=scal~&highlight=Description

Aynı yanıtın döndürüldüğünü, ancak artık "özel" ile eşleştirme yerine benzer eşleşmenin "SQL" üzerinde olduğuna dikkat edin.

"@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 neden olabileceği netliği göstermektir. Her durumda aynı belge döndürülür. Eşleşmeyi doğrulamak için belge kimliklerini kullandıysanız " özel" yerine "SQL" vardiyasını kaçırmış olabilirsiniz.

Ayrıca bkz.