Reciprocal Rank Fusion (RRF) kullanılarak karma aramada ilgi puanı

Karşılıklı Rank Fusion (RRF), birleşik bir sonuç kümesi oluşturmak için birden çok, daha önce derecelenmiş sonuçlardan gelen arama puanlarını değerlendiren bir algoritmadır. Azure AI Search'te RRF, paralel olarak yürütülen iki veya daha fazla sorgu olduğunda kullanılır. Her sorgu dereceli bir sonuç kümesi oluşturur ve RRF, sıralamaları tek bir sonuç kümesinde birleştirmek ve homojen hale getirmek için kullanılır ve sorgu yanıtında döndürülür. RRF'nin her zaman kullanıldığı senaryolara örnek olarak karma arama ve eşzamanlı olarak yürütülen birden çok vektör sorgusu verilebilir.

RRF, arama sonuçları listesindeki ilk ilgili belgenin derecesinin tersi olan karşılıklı derece kavramını temel alır. Tekniğin amacı, öğelerin özgün sıralamalardaki konumunu dikkate almak ve birden çok listede daha yüksek dereceye sahip öğelere daha yüksek önem vermektir. Bu, son derecelendirmenin genel kalitesini ve güvenilirliğini artırmaya yardımcı olur ve birden çok sıralı arama sonucunun fusing görevi için daha kullanışlı hale getirir.

RRF derecelendirmesi nasıl çalışır?

RRF, birden çok yöntemden arama sonuçlarını alarak, sonuçlardaki her belgeye karşılıklı bir derecelendirme puanı atayarak ve ardından puanları birleştirerek yeni bir derecelendirme oluşturarak çalışır. Kavram, birden çok arama yönteminde en üst konumlarda görünen belgelerin daha ilgili olması ve birleştirilmiş sonuçta daha yüksek sırada yer alması gerektiğidir.

RRF işleminin basit bir açıklaması aşağıdadır:

  1. Paralel olarak yürütülen birden çok sorgudan dereceli arama sonuçları alın.

  2. Dereceli listelerin her birinde sonuç için karşılıklı derecelendirme puanları atayın. RRF, her sonuç kümesindeki her eşleşme için yeni @search.score bir oluşturur. Arama sonuçlarındaki her belge için altyapı, listedeki konumuna göre karşılıklı bir derecelendirme puanı atar. Puan olarak hesaplanır 1/(rank + k); burada rank belgenin listedeki konumudur ve k 60 gibi küçük bir değere ayarlanmışsa deneysel olarak en iyi performansı gösterdiği gözlemlenen sabittir. Bu k değerin RRF algoritmasındaki bir sabit olduğunu ve en yakın komşu sayısını denetleyen değerinden k tamamen ayrı olduğunu unutmayın.

  3. Puanları birleştirin. Altyapı, her belge için her arama sisteminden alınan karşılıklı derecelendirme puanlarını toplar ve her belge için birleştirilmiş bir puan oluşturur. 

  4. Altyapı, belgeleri birleştirilmiş puanlara göre sıralar ve sıralar. Sonuçta elde edilen liste, birleştirilmiş derecelendirmedir.

Puanlama için yalnızca dizinde veya searchFields sorguda olarak searchable işaretlenmiş alanlar kullanılır. Yalnızca olarak işaretlenen retrievablealanlar veya sorguda select belirtilen alanlar, arama sonuçlarıyla birlikte arama puanıyla birlikte döndürülür.

Paralel sorgu yürütme

RRF, birden fazla sorgu yürütme olduğunda kullanılır. Aşağıdaki örneklerde paralel sorgu yürütmenin gerçekleştiği sorgu desenleri gösterilmektedir:

  • Tam metin sorgusu ve bir vektör sorgusu (basit karma senaryo), iki sorgu yürütmeye eşittir.
  • Tam metin sorgusu ve iki vektör alanını hedefleyen bir vektör sorgusu, üç sorgu yürütmeye eşittir.
  • Tam metin sorgusu ve beş vektör alanını hedefleyen iki vektör sorgusu, 11 sorgu yürütmeye eşittir

Karma arama sonuçlarında puanlar

Sonuçlar derecelendirildiğinde, @search.score özellik sonuçları sıralamak için kullanılan değeri içerir. Puanlar, her yöntem için değişen derecelendirme algoritmaları tarafından oluşturulur. Her algoritmanın kendi aralığı ve büyüklüğü vardır.

Aşağıdaki grafik, her bir ilgi derecelendirme algoritması için her eşleşme, algoritma ve puan aralığında döndürülen puanlama özelliğini tanımlar.

Arama yöntemi Parametre Puanlama algoritması Aralık
tam metin arama @search.score BM25 algoritması Üst sınır yok.
vektör araması @search.score HNSW yapılandırmasında belirtilen benzerlik ölçümünü kullanan HNSW algoritması. 0,333 - 1,00 (Kosinüs), Öklid ve DotProduct için 0-1.
karma arama @search.score RRF algoritması Üst sınır, birleştirilmiş sorgu sayısıyla sınırlanır ve her sorgu RRF puanına en fazla 1 katkıda bulunur. Örneğin, üç sorgu birleştirildiğinde yalnızca iki arama sonucu birleştirildiğinden daha yüksek RRF puanları elde edilir.
anlamsal derecelendirme @search.rerankerScore Anlamsal derecelendirme 0.00 - 4.00

Anlam derecelendirmesi RRF'ye katılmaz. Puanı (@search.rerankerScore) her zaman sorgu yanıtında ayrı olarak bildirilir. Anlamsal sıralama, bu sonuçların anlam bakımından zengin içeriğe sahip alanlar içerdiği varsayılarak tam metin ve karma arama sonuçlarını yeniden düzenleyebilir.

Karma 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 ve vektör araması için en benzer k eşleşmeleri döndürür. Karma sorguda yanıttaki top sonuç sayısını belirler. Varsayılan değerlere bağlı olarak, birleştirilmiş sonuç kümesinin en yüksek dereceli 50 eşleşmesi döndürülür.

Arama altyapısı genellikle ve kdeğerinden daha fazla sonuç top bulur. Daha fazla sonuç döndürmek için , skipve nextdisk belleği parametrelerini topkullanın. Sayfalama, her mantıksal sayfadaki sonuç sayısını belirleme ve tam yükte gezinme yöntemidir.

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.

Daha fazla bilgi için bkz . Arama sonuçlarıyla çalışma.

Arama puanlama iş akışının diyagramı

Aşağıdaki diyagramda, puanlama profilleri ve anlam derecelendirmesi aracılığıyla artırılarak anahtar sözcük ve vektör aramasını çağıran karma sorgu gösterilmektedir.

Diagram of prefilters.

Önceki iş akışını oluşturan bir sorgu aşağıdaki gibi görünebilir:

POST https://{{search-service-name}}.search.windows.net/indexes/{{index-name}}/docs/search?api-version=2023-11-01
Content-Type: application/json
api-key: {{admin-api-key}}
{
   "queryType":"semantic",
   "search":"hello world",
   "searchFields":"field_a, field_b",
   "vectorQueries": [
       {
           "kind":"vector",
           "vector": [1.0, 2.0, 3.0],
           "fields": "field_c, field_d"
       },
       {
           "kind":"vector",
           "vector": [4.0, 5.0, 6.0],
           "fields": "field_d, field_e"
       }
   ],
   "scoringProfile":"my_scoring_profile"
}

Ayrıca bkz.