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.
Not
2024-09-01-preview sürümündeki yenilikler, RRF dereceli bir arama puanını bileşen alt çekirdeklerine ayırma özelliğidir. Bu, tüm puan kompozisyonu için saydamlık sağlar. Daha fazla bilgi için bu makaledeki arama puanlarını (önizleme) açma bölümüne bakın.
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:
Paralel olarak yürütülen birden çok sorgudan dereceli arama sonuçları alın.
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ır1/(rank + k)
; buradarank
belgenin listedeki konumudur vek
60 gibi küçük bir değere ayarlanmışsa deneysel olarak en iyi performansı gösterdiği gözlemlenen sabittir. Buk
değerin RRF algoritmasındaki bir sabit olduğunu ve en yakın komşu sayısını denetleyen değerindenk
tamamen ayrı olduğunu unutmayın.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.
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 retrievable
alanlar 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 |
Anlamsal derecelendirme, sonuçların RRF birleştirilmesinden sonra gerçekleşir. Puanı (@search.rerankerScore
) her zaman sorgu yanıtında ayrı olarak bildirilir. Anlam dereceleyicisi, bu sonuçların semantik açıdan zengin içeriğe sahip alanlar içerdiği varsayılarak tam metin ve karma arama sonuçlarını yeniden düzenleyebilir. Arama belgelerinde görsel olarak ilgili içerik içeren metin alanları varsa saf vektör sorgularını yeniden düzenleyebilir.
Arama puanını alt çekirdeklere açma (önizleme)
2024-09-01-preview'ı kullanarak, alt puanlarını görüntülemek için arama puanının yapısını kaldırabilirsiniz.
Vektör sorguları için, bu bilgiler vektör ağırlıklama veya minimum eşikleri ayarlama için uygun bir değer belirlemenize yardımcı olabilir.
Alt çekirdekleri almak için:
En son önizleme Arama Belgeleri REST API'sini veya özelliği sağlayan bir Azure SDK beta paketini kullanın.
Semantik ranker veya
all
kullanıyorsanız,semantic
sorgu isteğini değiştirin, öğesinevector
yenidebug
bir parametre kümesi ekleyin.
Aşağıda hata ayıklama modunda alt çekirdekler döndüren karma sorgu örneği verilmiştir:
POST https://{{search-service-name}}.search.windows.net/indexes/{{index-name}}/docs/search?api-version=2024-09-01=preview
{
"vectorQueries": [
{
"vector": [
-0.009154141,
0.018708462,
. . .
-0.02178128,
-0.00086512347
],
"fields": "DescriptionVector",
"kind": "vector",
"exhaustive": true,
"k": 10
},
{
"vector": [
-0.009154141,
0.018708462,
. . .
-0.02178128,
-0.00086512347
],
"fields": "DescriptionVector",
"kind": "vector",
"exhaustive": true,
"k": 10
}
],
"search": "historic hotel walk to restaurants and shopping",
"select": "HotelName, Description, Address/City",
"debug": "vector",
"top": 10
}
Ağırlıklı puanlar
2024-07-01 ve daha yeni önizleme API'leri sürümlerini kullanarak, karma sorgudaki önemini artırmak veya azaltmak için vektör sorgularını ağırlıklandırabilirsiniz.
Hatırlayacağınız gibi, belirli bir belge için RRF hesaplanırken arama altyapısı, göründüğü her sonuç kümesi için bu belgenin derecesine bakar. Bir belgenin, sonuçların iki vektör sorgusundan ve bir metin BM25 dereceli sorgudan geldiği üç ayrı arama sonucunda gösterildiğini varsayın. Belgenin konumu her sonuçta farklılık gösterir.
Eşleşme bulundu | Sonuçlardaki konum | @search.score | ağırlık çarpanı | @search.score (ağırlıklı) |
---|---|---|---|---|
vektör sonuçları bir | konum 1 | 0.8383955 | 0,5 | 0.41919775 |
vektör sonuçları iki | konum 5 | 0.81514114 | 2.0 | 1.63028228 |
BM25 sonuçları | konum 10 | 0.8577363 | NA | 0.8577363 |
Belgenin her sonuç kümesindeki konumu, söz konusu belge için son RRF puanını oluşturmak üzere eklenen bir başlangıç puanına karşılık gelir.
Vektör ağırlığı eklerseniz, ilk puanlar puanı artıran veya azaltan bir ağırlık çarpanı olur. Varsayılan değer 1,0'dır, yani ağırlıklama yoktur ve ilk puan RRF puanlamada olduğu gibi kullanılır. Ancak, 0,5 ağırlık eklerseniz puan azalır ve bu sonuç birleşik derecelendirmede daha az önemli hale gelir. Buna karşılık, 2,0 ağırlık eklerseniz, puan genel RRF puanında daha büyük bir faktör haline gelir.
Bu örnekte, @search.score (ağırlıklı) değerler RRF derecelendirme modeline geçirilir.
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 k
değerinden daha fazla sonuç top
bulur. Daha fazla sonuç döndürmek için , skip
ve next
disk belleği parametrelerini top
kullanın. Sayfalama, her mantıksal sayfadaki sonuç sayısını belirleme ve tam yükte gezinme yöntemidir. Karma sorgunun metin tarafından daha fazla sonuç döndürmek için daha büyük değerlere (varsayılan değer 1.000'dir) ayarlayabilirsiniz maxTextRecallSize
.
Varsayılan olarak, 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.
Ö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=2024-07-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"
}