BM25 ilgi puanlaması yapılandırma

Bu makalede, Azure AI Search tarafından tam metin arama sorguları için kullanılan BM25 ilgi puanlama algoritmasını yapılandırmayı öğrenin. Ayrıca BM25'in eski arama hizmetlerinde nasıl etkinleştirileceği de açıklanmaktadır.

BM25 şunlar için geçerlidir:

  • Bir atfı search olan metin alanlarında searchable tam metin araması için parametresini kullanan sorgular.
  • Puanlamanın kapsamı searchFields, veya null ise searchFields tüm searchable alanlarla belirlenmiştir.

Arama altyapısı, belirli bir sorgudaki her eşleşme için bir @searchScore hesaplamak için BM25 kullanır. Eşleşen belgeler, arama puanına göre sıralanır ve sorgu yanıtında en iyi sonuçlar döndürülür. Aynı arama dizini üzerinde yürütülen aynı sorgudan bile sonuçlarda bazı puan varyasyonları elde etmek mümkündür, ancak genellikle bu çeşitlemeler küçüktür ve sonuçların genel derecelendirmesini değiştirmez.

BM25, ağırlıklama terimi sıklığı ve belge uzunluğu için varsayılan değerlere sahiptir. Varsayılanlar içeriğinize uygun değilse bu özellikleri özelleştirebilirsiniz. Yapılandırma değişikliklerinin kapsamı tek tek dizinler olarak belirlenmiştir; bu da her dizinin özelliklerine göre ilgi puanlama ayarlarını yapabileceğiniz anlamına gelir.

Varsayılan puanlama algoritması

Arama hizmetinizin yaşına bağlı olarak Azure AI Search, tam metin arama sorgusu için iki puanlama algoritmasını destekler:

  • Okapi BM25 algoritması (15 Temmuz 2020'de sonra)
  • Klasik benzerlik algoritması (15 Temmuz 2020'ye kadar)

BM25 derecelendirmesi varsayılandır çünkü kullanıcı beklentilerine daha uygun arama derecelendirmeleri üretme eğilimindedir. Belge boyutu gibi faktörlere göre sonuçları ayarlamak için parametreler içerir. Temmuz 2020'den sonra oluşturulan arama hizmetleri için tek puanlama algoritması BM25'tir. Yeni bir hizmette "benzerlik" değerini ClassicSimilarity olarak ayarlamaya çalışırsanız, bu algoritma hizmet tarafından desteklenmediğinden HTTP 400 hatası döndürülür.

Eski hizmetler için klasik benzerlik varsayılan algoritma olmaya devam eder. Eski hizmetler dizin başına BM25'e yükseltilebilir. Klasikten BM25'e geçiş yaparken, arama sonuçlarının sıralanma şekliyle ilgili bazı farkları görebilirsiniz.

BM25 parametrelerini ayarlama

BM25 derecelendirmesi, ilgi puanı hesaplamasını ayarlamak için iki parametre sağlar.

  1. BM25 parametrelerini ayarlamak için Dizin Oluşturma veya Güncelleştirme isteği kullanın:

    PUT [service-name].search.windows.net/indexes/[index-name]?api-version=2020-06-30&allowIndexDowntime=true
    {
        "similarity": {
            "@odata.type": "#Microsoft.Azure.Search.BM25Similarity",
            "b" : 0.75,
            "k1" : 1.2
        }
    }
    
  2. Dizin canlıysa, önceki örnekte gösterilen istekte URI parametresini ekleyin allowIndexDowntime=true .

    Azure AI Search canlı dizin güncelleştirmelerine izin vermediğinden, parametrelerin eklenebilmesi için dizini çevrimdışına almanız gerekir. Dizin çevrimdışıyken dizin oluşturma ve sorgu istekleri başarısız olur. Kesintinin süresi, dizini güncelleştirmek için geçen süredir ve genellikle birkaç saniyeden fazla değildir. Güncelleştirme tamamlandığında dizin otomatik olarak geri döner.

  3. ve "k1" öğesini özel değerlere ayarlayın "b" ve isteği gönderin.

    Özellik Tür Tanım
    k1 Numara Her eşleşen terimin terim sıklığı ile bir belge-sorgu çiftinin son ilgi puanı arasındaki ölçeklendirme işlevini denetler. Değerler genellikle 0,0 ile 3,0'dır ve varsayılan değer 1,2'dir.

    0,0 değeri, tek bir eşleşen terimin katkısının metinde kaç kez göründüğünden bağımsız olarak eşleşen tüm belgeler için aynı olduğu bir "ikili modeli" temsil eder. Daha büyük k1 değerleri, belgede aynı terimin daha fazla örneği bulunduğundan puanın artmaya devam etmesi sağlanır.

    Arama sorgusuna birden çok terimin dahil edildiği durumlarda daha büyük bir k1 değeri kullanmak önemlidir. Bu gibi durumlarda, yalnızca tek bir terimle eşleşen belgeler yerine birden çok kez daha fazla sorgu terimiyle eşleşen belgeleri tercih etmek isteyebilirsiniz. Örneğin, "Apollo Spaceflight" terimlerini sorgularken, "Apollo" terimini içeren Yunan Mitolojisi ile ilgili bir makalenin puanını,"Spaceflight" sözcüğünden bahsetmeden birkaç düzine kez düşürmek isteyebilirsiniz. Bu, yalnızca birkaç kez hem "Apollo" hem de "Spaceflight" sözcüğünden açıkça bahseden başka bir makaleye göre geçerlidir.
    b Numara Bir belgenin uzunluğunun ilgi puanını nasıl etkilediğini denetler. Değerler 0 ile 1 arasındadır ve varsayılan değer 0,75'tir.

    0,0 değeri, belgenin uzunluğunun puanı etkilemediği anlamına gelir. 1,0 değeri, terim sıklığının ilgi puanı üzerindeki etkisinin belgenin uzunluğuna göre normalleştirildiği anlamına gelir.

    Terim sıklığını belgenin uzunluğuna göre normalleştirmek, daha uzun belgeleri ceza olarak kullanmak istediğiniz durumlarda kullanışlıdır. Bazı durumlarda, daha uzun belgelerin (tam bir roman gibi) daha kısa belgelerle karşılaştırıldığında birçok ilgisiz terim içerme olasılığı daha yüksektir.

Eski hizmetlerde BM25 puanlama özelliğini etkinleştirme

Mart 2014 ile 15 Temmuz 2020 arasında oluşturulmuş bir arama hizmeti çalıştırıyorsanız, yeni dizinlerde bir "benzerlik" özelliği ayarlayarak BM25'i etkinleştirebilirsiniz. Özelliği yalnızca yeni dizinlerde kullanıma sunulur, bu nedenle BM25'in var olan bir dizinde olmasını istiyorsanız dizini "benzerlik" özelliği olarak ayarlanmış Microsoft.Azure.Search.BM25Similarityşekilde bırakmanız ve yeniden oluşturmanız gerekir.

"Benzerlik" özelliğine sahip bir dizin mevcut olduğunda veya ClassicSimilarityarasında BM25Similarity geçiş yapabilirsiniz.

Aşağıdaki bağlantılarda Azure SDK'larındaki Benzerlik özelliği açıklanmaktadır.

İstemci kitaplığı Benzerlik özelliği
.NET SearchIndex.Similarity
Java SearchIndex.setSimilarity
JavaScript SearchIndex.Similarity
Python SearchIndex'te benzerlik özelliği

REST örneği

REST API'yi de kullanabilirsiniz. Aşağıdaki örnek, "benzerlik" özelliği BM25 olarak ayarlanmış yeni bir dizin oluşturur:

PUT [service-name].search.windows.net/indexes/[index name]?api-version=2020-06-30
{
    "name": "indexName",
    "fields": [
        {
            "name": "id",
            "type": "Edm.String",
            "key": true
        },
        {
            "name": "name",
            "type": "Edm.String",
            "searchable": true,
            "analyzer": "en.lucene"
        },
        ...
    ],
    "similarity": {
        "@odata.type": "#Microsoft.Azure.Search.BM25Similarity"
    }
}

Ayrıca bkz.