Anahtar sözcük aramasında ilgi (BM25 puanlama)
Bu makalede, tam metin araması için arama puanlarını hesaplamak için kullanılan BM25 ilgi puanlama algoritması açıklanmaktadır. BM25'in ilgisi, tam metin aramasına özeldir. Filtre sorguları, otomatik tamamlama ve önerilen sorgular, joker karakter araması ve benzer arama sorguları ilgi için puanlanmamış veya derecelendirilmiyor.
Tam metin aramasında kullanılan puanlama algoritmaları
Azure AI Search, tam metin araması için aşağıdaki puanlama algoritmalarını sağlar:
Algoritma | Kullanım | Aralık |
---|---|---|
BM25Similarity |
Temmuz 2020'de oluşturulan tüm arama hizmetlerinde algoritma düzeltildi. Bu algoritmayı yapılandırabilirsiniz, ancak eski bir algoritmaya (klasik) geçemezsiniz. | Sınırsız. |
ClassicSimilarity |
Temmuz 2020 öncesi eski arama hizmetlerinde varsayılandır. Eski hizmetlerde BM25'i kabul edebilir ve dizin başına bir BM25 algoritması seçebilirsiniz. | 0 < 1,00 |
Hem BM25 hem de Klasik, her belge-sorgu çiftinin ilgi puanlarını hesaplamak için değişken olarak sıklık (TF) terimini ve ters belge sıklığını (IDF) kullanan TF-IDF benzeri alma işlevleridir ve bu işlevler daha sonra sonuçları derecelendirmek için kullanılır. Kavramsal olarak klasiklere benzer olsa da BM25, kullanıcı araştırması tarafından ölçülen daha sezgisel eşleşmeler üreten olasılıksal bilgi alımına sahiptir.
BM25, kullanıcının ilgililik puanının eşlenen terimlerin terim sıklığıyla nasıl ölçeklendirileceğine karar vermesine izin verme gibi gelişmiş özelleştirme seçenekleri sunar.
BM25 derecelendirmesi nasıl çalışır?
İlgi puanı, bir öğenin geçerli sorgu bağlamındaki ilgisine ilişkin bir gösterge olarak hizmet veren bir arama puanının (@search.score) hesaplanması anlamına gelir. Aralık ilişkisiz. Ancak, puan ne kadar yüksek olursa, öğe o kadar ilgili olur.
Arama puanı, dize girişinin istatistiksel özelliklerine ve sorgunun kendisine göre hesaplanır. Azure AI Search, arama terimleriyle (searchMode'a bağlı olarak bazıları veya tümü) eşleşen belgeler bulur ve arama teriminin birçok örneğini içeren belgeleri tercih eder. Terimin veri dizininde nadir, ancak belge içinde yaygın olması durumunda arama puanı daha da yüksek olur. Bilgi işlem ilgisine yönelik bu yaklaşımın temeli TF-IDF veya terim sıklığı ters belge sıklığı olarak bilinir.
Arama puanları bir sonuç kümesi boyunca tekrarlanabilir. Birden çok isabet aynı arama puanına sahip olduğunda, aynı puanlanan öğelerin sıralaması tanımlanmamıştır ve kararlı değildir. Sorguyu yeniden çalıştırdığınızda, özellikle de ücretsiz hizmeti veya birden çok çoğaltması olan faturalanabilir bir hizmeti kullanıyorsanız öğelerin konum değiştirdiğini görebilirsiniz. Aynı puana sahip iki öğe göz önünde bulundurulduğunda, önce birinin görünmesi garanti edilmez.
Eşitliği yinelenen puanlar arasında kesmek için, puana göre ilk sıraya bir $orderby yan tümcesi ekleyebilir, ardından başka bir sıralanabilir alana göre sıralayabilirsiniz (örneğin, $orderby=search.score() desc,Rating desc
).
Puanlama için yalnızca dizinde veya searchFields
sorguda olarak searchable
işaretlenmiş alanlar kullanılır. Yalnızca olarak işaretlenen retrievable
alanlar veya sorguda select
belirtilen alanlar, arama sonuçlarıyla birlikte arama puanıyla birlikte döndürülür.
Not
A @search.score = 1
, puanlanmamış veya derecelendirilmemiş bir sonuç kümesini gösterir. Puan tüm sonuçlarda tekdüzendir. Puanlanmamış sonuçlar, sorgu formu belirsiz arama, joker karakter veya regex sorguları ya da boş bir arama olduğunda (search=*
bazen filtrenin eşleşme döndürmenin birincil aracı olduğu filtrelerle eşleştirildiğinde) oluşur.
Aşağıdaki video segmenti, Azure AI Search'te kullanılan genel kullanıma açık derecelendirme algoritmalarının açıklamasına hızlı bir şekilde iletmektedir. Daha fazla arka plan için videonun tamamını izleyebilirsiniz.
Metin sonuçlarındaki puanlar
Sonuçlar derecelendirildiğinde, @search.score
özellik sonuçları sıralamak için kullanılan değeri içerir.
Aşağıdaki tablo puanlama özelliğini, algoritmayı ve aralığı tanımlar.
Arama yöntemi | Parametre | Puanlama algoritması | Aralık |
---|---|---|---|
tam metin araması | @search.score |
Dizinde belirtilen parametreleri kullanan BM25 algoritması. | Sınırsız. |
Puan varyasyonu
Arama puanları, aynı sonuç kümesindeki diğer belgelere göre eşleşmenin gücünü yansıtan genel ilgi duygusunu ifade eder. Ancak puanlar her zaman bir sorgudan diğerine tutarlı değildir, bu nedenle sorgularla çalışırken arama belgelerinin sıralı olarak küçük tutarsızlıklar olduğunu fark edebilirsiniz. Bunun neden meydana gelebileceğine ilişkin birkaç açıklama vardır.
Neden | Açıklama |
---|---|
Aynı puanlar | Birden çok belge aynı puana sahipse, bunlardan herhangi biri önce görünebilir. |
Verilerin geçiciliği | Siz belge ekledikçe, değiştirdikçe veya sildikçe dizin içeriği değişir. Dizin güncelleştirmeleri zaman içinde işlendikçe terim sıklıkları değişir ve eşleşen belgelerin arama puanlarını etkiler. |
Birden çok çoğaltma | Birden çok çoğaltma kullanan hizmetler için, her çoğaltmaya paralel olarak sorgular verilir. Arama puanını hesaplamak için kullanılan dizin istatistikleri, sonuçların sorgu yanıtında birleştirilmesi ve sıralanmasıyla çoğaltma başına temel alınarak hesaplanır. Çoğaltmalar çoğunlukla birbirinin aynalarıdır, ancak durum farklılıkları nedeniyle istatistikler farklılık gösterebilir. Örneğin, bir çoğaltma, istatistiklerine katkıda bulunan ve diğer çoğaltmaların dışında birleştirilen belgeleri silmiş olabilir. Genellikle, çoğaltma başına istatistiklerdeki farklar daha küçük dizinlerde daha belirgindir. Aşağıdaki bölümde bu koşul hakkında daha fazla bilgi sağlanmaktadır. |
Sorgu sonuçları üzerindeki parçalama efektleri
Parça, bir dizinin öbekleridir. Azure AI Search, bölümleri ekleme işlemini daha hızlı hale getirmek için (parçaları yeni arama birimlerine taşıyarak) dizini parçalara ayırır. Bir arama hizmetinde parça yönetimi bir uygulama ayrıntılarıdır ve yapılandırılamaz, ancak bir dizinin parçalandığını bilmek, sıralama ve otomatik tamamlama davranışlarındaki ara sıra anomalileri anlamanıza yardımcı olur:
Anomalileri derecelendirme: Arama puanları önce parça düzeyinde hesaplanır ve ardından tek bir sonuç kümesinde toplanır. Parça içeriğinin özelliklerine bağlı olarak, bir parçadan gelen eşleşmeler, diğer parçadaki eşleşmelerden daha yüksek sıralanabilir. Arama sonuçlarında sezgisel sıralamaların karşıt olduğunu fark ederseniz, bunun nedeni büyük olasılıkla parçalamanın etkileridir, özellikle dizinler küçükse. Tüm dizin genelinde puanları hesaplamayı seçerek bu derecelendirme anomalilerinden kaçınabilirsiniz, ancak bunu yaptığınızda bir performans cezası uygulanır.
Otomatik tamamlama anomalileri: Kısmen girilen bir terimin ilk birkaç karakterinde eşleşmelerin yapıldığı otomatik tamamlama sorguları, yazımda küçük sapmaları affeden benzer bir parametreyi kabul eder. Otomatik tamamlama için, belirsiz eşleştirme geçerli parça içindeki terimler ile kısıtlanır. Örneğin, bir parça "Microsoft" içeriyorsa ve kısmi bir "mikro" terimi girilirse, arama altyapısı bu parçadaki "Microsoft" ile eşleşir, ancak dizinin kalan bölümlerini tutan diğer parçalarda eşleşmez.
Aşağıdaki diyagramda çoğaltmalar, bölümler, parçalar ve arama birimleri arasındaki ilişki gösterilmektedir. İki çoğaltması ve iki bölümü olan bir hizmetteki dört arama birimi arasında tek bir dizinin nasıl yayılımının bir örneğini gösterir. Dört arama biriminin her biri, dizinin parçalarının yalnızca yarısını depolar. Sol sütundaki arama birimleri parçaların ilk yarısını depolar ve sağ sütundakiler ikinci bölümü içeren parçaların ikinci yarısını depolar. İki çoğaltma olduğundan, her dizin parçasının iki kopyası vardır. Üst satırdaki arama birimleri ilk çoğaltmayı içeren bir kopya depolarken, alt satırdakiler ikinci çoğaltmayı içeren başka bir kopya depolar.
Yukarıdaki diyagram yalnızca bir örnektir. En fazla 36 toplam arama birimi olmak üzere birçok bölüm ve çoğaltma bileşimi mümkündür.
Not
Çoğaltma ve bölüm sayısı eşit olarak 12'ye ayrılır (özellikle, 1, 2, 3, 4, 6, 12). Azure AI Search, tüm bölümlere eşit bölümlere yayılabilmesi için her dizini 12 parçaya önceden böler. Örneğin, hizmetinizin üç bölümü varsa ve bir dizin oluşturursanız, her bölüm dizinin dört parçası içerir. Azure AI Search'ün bir dizini nasıl parçalandıracakları, gelecek sürümlerde değişikliğe tabi olan bir uygulama ayrıntısıdır. Sayı bugün 12 olsa da, gelecekte bu sayın her zaman 12 olmasını beklememelisiniz.
Puanlama istatistikleri ve yapışkan oturumlar
Ölçeklenebilirlik için Azure AI Search, her dizini bir parçalama işlemi aracılığıyla yatay olarak dağıtır ve bu da dizinin bölümlerinin fiziksel olarak ayrı olduğu anlamına gelir.
Varsayılan olarak, bir belgenin puanı bir parça içindeki verilerin istatistiksel özelliklerine göre hesaplanır. Bu yaklaşım genellikle büyük bir veri kolordusu için sorun oluşturmaz ve tüm parçalar genelindeki bilgilere göre puanı hesaplamak zorunda kalmaktan daha iyi performans sağlar. Bununla birlikte, bu performans iyileştirmesini kullanmak, çok benzer iki belgenin (veya hatta aynı belgelerin) farklı parçalar halinde olması durumunda farklı ilgi puanlarına sahip olmasına neden olabilir.
Puanı tüm parçalardaki istatistiksel özelliklere göre hesaplamayı tercih ediyorsanız, bunu sorgu parametresi olarak ekleyerek scoringStatistics=global
(veya sorgu isteğinin gövde parametresi olarak ekleyerek"scoringStatistics": "global"
) yapabilirsiniz.
POST https://[service name].search.windows.net/indexes/hotels/docs/search?api-version=2024-07-01
{
"search": "<query string>",
"scoringStatistics": "global"
}
kullanmak scoringStatistics
, aynı çoğaltmadaki tüm parçaların aynı sonuçları sağladığından emin olur. Bununla birlikte, her zaman dizininizdeki en son değişikliklerle güncelleştirildiğinden farklı çoğaltmalar birbirinden biraz farklı olabilir. Bazı senaryolarda, kullanıcılarınızın "sorgu oturumu" sırasında daha tutarlı sonuçlar elde etmelerini isteyebilirsiniz. Bu tür senaryolarda, sorgularınızın bir parçası olarak bir sessionId
sağlayabilirsiniz.
sessionId
, benzersiz bir kullanıcı oturumuna başvurmak için oluşturduğunuz benzersiz bir dizedir.
POST https://[service name].search.windows.net/indexes/hotels/docs/search?api-version=2024-07-01
{
"search": "<query string>",
"sessionId": "<string>"
}
Aynı sessionId
kullanıldığı sürece, aynı çoğaltmayı hedeflemek için en iyi çaba gösteriliyor ve kullanıcılarınızın göreceği sonuçların tutarlılığı artırılıyor.
Not
Aynı sessionId
değerleri tekrar tekrar yeniden kullanma, isteklerin çoğaltmalar arasında yük dengelemesini etkileyebilir ve arama hizmetinin performansını olumsuz etkileyebilir. sessionId olarak kullanılan değer '_' karakteriyle başlayamaz.
İlgi düzeyini ayarlama
Azure AI Search'te anahtar sözcük araması ve karma sorgunun metin bölümü için BM25 algoritma parametrelerini yapılandırabilir, ayrıca aşağıdaki mekanizmalarla arama ilgisi ayarlayabilir ve arama puanlarını artırabilirsiniz.
Yaklaşım | Uygulama | Açıklama |
---|---|---|
BM25 algoritma yapılandırması | Arama dizini | Belge uzunluğunun ve terim sıklığının ilgi puanını nasıl etkileyeceğini yapılandırın. |
Puanlama modelleri | Arama dizini | İçerik özelliklerine göre bir eşleşmenin arama puanını artırmak için ölçütler sağlayın. Örneğin, eşleşmeleri gelir potansiyellerine göre artırabilir, daha yeni öğeleri tanıtabilir veya belki de envanterde çok uzun süre bulunan öğeleri artırabilirsiniz. Puanlama profili, ağırlıklı alanlar, işlevler ve parametrelerden oluşan dizin tanımının bir parçasıdır. Mevcut bir dizini, dizin yeniden derlemesi yapmadan puanlama profili değişiklikleriyle güncelleştirebilirsiniz. |
Anlamsal derecelendirme | Sorgu isteği | Makine okuma kavramasını arama sonuçlarına uygulayarak daha anlamlı olarak ilgili sonuçları en üste yükseltme. |
featuresMode parametresi | Sorgu isteği | Bu parametre çoğunlukla BM25 dereceli puanın paketini açmak için kullanılır, ancak özel puanlama çözümü sağlayan kodda için kullanılabilir. |
featuresMode parametresi (önizleme)
Arama Belgeleri istekleri, alan düzeyinde bm25 ilgi puanı hakkında daha fazla ayrıntı sağlayan bir özellikMode parametresini destekler.
@searchScore
, belgenin tamamı için hesaplanırken (bu belgenin bu sorgu bağlamında ne kadar ilgili olduğu), featuresMode bir yapıda @search.features
ifade edildiği gibi tek tek alanlar hakkındaki bilgileri gösterir. Yapı, sorguda kullanılan tüm alanları (sorgudaki searchField'ler aracılığıyla belirli alanlar veya dizinde aranabilir olarak özniteliklendirilen tüm alanları) içerir.
Her alan @search.features
için size aşağıdaki değerleri verin:
- Alanda bulunan benzersiz belirteçlerin sayısı
- Benzerlik puanı veya sorgu terimine göre alanın içeriğinin ne kadar benzer olduğuna ilişkin bir ölçü
- Terim sıklığı veya sorgu teriminin alanda bulunma sayısı
"Açıklama" ve "başlık" alanlarını hedefleyen bir sorgu için, içeren @search.features
bir yanıt şöyle görünebilir:
"value": [
{
"@search.score": 5.1958685,
"@search.features": {
"description": {
"uniqueTokenMatches": 1.0,
"similarityScore": 0.29541412,
"termFrequency" : 2
},
"title": {
"uniqueTokenMatches": 3.0,
"similarityScore": 1.75451557,
"termFrequency" : 6
}
}
}
]
Bu veri noktalarını özel puanlama çözümlerinde kullanabilir veya aramayla ilgili sorunlarda hata ayıklamak için bu bilgileri kullanabilirsiniz.
featuresMode parametresi REST API'lerinde belgelenmez, ancak belgelerde BM25 dereceli metin (Anahtar Sözcük) araması için arama yapmak üzere önizleme REST API çağrısında kullanabilirsiniz.
Tam metin sorgu yanıtında dereceli sonuç sayısı
Varsayılan olarak, sayfalandırma kullanmıyorsanız, arama altyapısı tam metin araması için en yüksek 50 derecelendirme eşleşmesini döndürür. Parametresini top
kullanarak daha az veya daha fazla sayıda öğe döndürebilirsiniz (tek bir yanıtta en fazla 1.000). sonuçları sayfaya eklemek için ve next
kullanabilirsinizskip
. Sayfalama, her mantıksal sayfadaki sonuç sayısını belirler ve içerik gezintisini destekler. Daha fazla bilgi için bkz . Şekil arama sonuçları.
Tam metin sorgunuz karma sorgunun parçasıysa, sorgunun metin tarafındaki sonuç sayısını artıracak veya azaltacak şekilde ayarlayabilirsinizmaxTextRecallSize
.
Tam metin araması en fazla 1.000 eşleşme sınırına tabidir (bkz . API yanıt sınırları). 1.000 eşleşme bulunduktan sonra arama motoru artık daha fazlasını aramaz.