Relevansbedömning i hybridsökning med hjälp av Reciprocal Rank Fusion (RRF)
Reciprocal Rank Fusion (RRF) är en algoritm som utvärderar sökpoängen från flera tidigare rankade resultat för att skapa en enhetlig resultatuppsättning. I Azure AI Search används RRF när det finns två eller flera frågor som körs parallellt. Varje fråga genererar en rangordnad resultatuppsättning och RRF används för att sammanfoga och homogenisera rankningen till en enda resultatuppsättning som returneras i frågesvaret. Exempel på scenarier där RRF alltid används är hybridsökning och flera vektorfrågor som körs samtidigt.
RRF baseras på begreppet ömsesidig rangordning, vilket är invertering av rangordningen för det första relevanta dokumentet i en lista över sökresultat. Målet med tekniken är att ta hänsyn till positionen för objekten i den ursprungliga rangordningen och ge högre prioritet åt objekt som rangordnas högre i flera listor. Detta kan bidra till att förbättra den slutliga rankningens övergripande kvalitet och tillförlitlighet, vilket gör det mer användbart för uppgiften att hitta flera ordnade sökresultat.
Kommentar
Nytt i 2024-09-01-preview är möjligheten att dekonstruera en RRF-rankad sökpoäng i dess komponentunderkärnor. Detta ger dig transparens i all-up poäng sammansättning. Mer information finns i Packa upp sökpoäng (förhandsversion) i den här artikeln.
Så här fungerar RRF-rankning
RRF fungerar genom att ta sökresultaten från flera metoder, tilldela ett ömsesidigt rangresultat till varje dokument i resultaten och sedan kombinera poängen för att skapa en ny rangordning. Konceptet är att dokument som visas på de översta positionerna över flera sökmetoder sannolikt är mer relevanta och bör rangordnas högre i det kombinerade resultatet.
Här är en enkel förklaring av RRF-processen:
Hämta rankade sökresultat från flera frågor som körs parallellt.
Tilldela ömsesidiga rankningspoäng för resultat i var och en av de rankade listorna. RRF genererar en ny
@search.score
för varje matchning i varje resultatuppsättning. För varje dokument i sökresultaten tilldelar motorn en ömsesidig rankningspoäng baserat på dess position i listan. Poängen beräknas som1/(rank + k)
, därrank
är dokumentets position i listan ochk
är en konstant, som observerades experimentellt för att prestera bäst om det är inställt på ett litet värde som 60. Observera att det härk
värdet är en konstant i RRF-algoritmen och helt separat från detk
som styr antalet närmaste grannar.Kombinera poäng. För varje dokument summerar motorn de ömsesidiga rankningspoäng som erhålls från varje söksystem, vilket ger en kombinerad poäng för varje dokument.
Motorn rangordnar dokument baserat på kombinerade poäng och sorterar dem. Den resulterande listan är den sammansvetsade rangordningen.
Endast fält som är markerade som searchable
i indexet eller searchFields
i frågan används för bedömning. Endast fält som har markerats som retrievable
, eller fält som anges i select
frågan, returneras i sökresultaten, tillsammans med deras sökpoäng.
Parallell frågekörning
RRF används när det finns fler än en frågekörning. Följande exempel illustrerar frågemönster där parallell frågekörning sker:
- En fulltextfråga plus en vektorfråga (enkelt hybridscenario) är lika med två frågekörningar.
- En fulltextfråga, plus en vektorfråga som riktar sig mot två vektorfält, är lika med tre frågekörningar.
- En fulltextfråga, plus två vektorfrågor som riktar sig mot fem vektorfält, är lika med 11 frågekörningar
Poäng i hybridsökresultat
När resultaten rangordnas @search.score
innehåller egenskapen det värde som används för att sortera resultaten. Poängen genereras av rangordningsalgoritmer som varierar för varje metod. Varje algoritm har sitt eget intervall och storlek.
Följande diagram identifierar den bedömningsegenskap som returneras för varje matchning, algoritm och poängintervall för varje relevansrankningsalgoritm.
Sökmetod | Parameter | Bedömningsalgoritm | Intervall |
---|---|---|---|
fulltextsökning | @search.score |
BM25-algoritm | Ingen övre gräns. |
vektorsökning | @search.score |
HNSW-algoritm med hjälp av likhetsmåttet som anges i HNSW-konfigurationen. | 0.333 - 1.00 (Cosinus), 0 till 1 för Euclidean och DotProduct. |
hybridsökning | @search.score |
RRF-algoritm | Den övre gränsen begränsas av antalet frågor som sammansvetsas, där varje fråga bidrar med högst cirka 1 till RRF-poängen. Till exempel skulle sammanslagning av tre frågor ge högre RRF-poäng än om endast två sökresultat slås samman. |
semantisk rangordning | @search.rerankerScore |
Semantisk rankning | 0.00 - 4.00 |
Semantisk rangordning sker efter RRF-sammanslagning av resultat. Dess poäng (@search.rerankerScore
) rapporteras alltid separat i frågesvaret. Semantisk ranker kan ändra storlek på fulltext och hybridsökresultat, förutsatt att dessa resultat inkluderar fält med semantiskt omfattande innehåll. Den kan ändra storlek på rena vektorfrågor om sökdokumenten innehåller textfält som innehåller semantiskt relevant innehåll.
Packa upp en sökpoäng i underkärnor (förhandsversion)
Med 2024-09-01-preview kan du dekonstruera en sökpoäng för att visa dess underkärnor.
För vektorfrågor kan den här informationen hjälpa dig att fastställa ett lämpligt värde för vektorviktning eller ange minimitrösklar.
Så här hämtar du delpoäng:
Använd det senaste rest-API:et för förhandsgranskningsdokument eller ett Azure SDK-betapaket som tillhandahåller funktionen.
Ändra en frågebegäran och lägg till en ny
debug
parameter inställd på antingenvector
,semantic
om du använder semantisk ranker ellerall
.
Här är ett exempel på hybridfråga som returnerar delpoäng i felsökningsläge:
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
}
Viktade poäng
Med api-versionerna 2024-07-01 och senare kan du vikta vektorfrågor för att öka eller minska deras betydelse i en hybridfråga.
Kom ihåg att när du beräknar RRF för ett visst dokument tittar sökmotorn på dokumentets rangordning för varje resultatuppsättning där det visas. Anta att ett dokument visas i tre separata sökresultat, där resultatet kommer från två vektorfrågor och en BM25-rangordnad textfråga. Dokumentets position varierar i varje resultat.
Matchning hittades | Position i resultat | @search.score | viktmultiplikator | @search.score (viktad) |
---|---|---|---|---|
vektorresultat ett | position 1 | 0.8383955 | 0,5 | 0.41919775 |
vektorresultat två | position 5 | 0.81514114 | 2.0 | 1.63028228 |
BM25-resultat | position 10 | 0.8577363 | NA | 0.8577363 |
Dokumentets position i varje resultatuppsättning motsvarar en första poäng, som läggs till för att skapa den slutliga RRF-poängen för det dokumentet.
Om du lägger till vektorviktning är de första poängen föremål för en viktningsmultiplikator som ökar eller minskar poängen. Standardvärdet är 1,0, vilket innebär att ingen viktning och den initiala poängen används som den är i RRF-bedömning. Men om du lägger till en vikt på 0,5, minskas poängen och det resultatet blir mindre viktigt i den kombinerade rankningen. Om du lägger till en vikt på 2,0 blir poängen en större faktor i den totala RRF-poängen.
I det här exemplet skickas värdena @search.score (viktade) till RRF-rangordningsmodellen.
Antal rankade resultat i ett hybridfrågesvar
Om du inte använder sidnumrering returnerar sökmotorn som standard de 50 högst rankade matchningarna för fulltextsökning och de mest liknande k
matchningarna för vektorsökning. I en hybridfråga top
avgör du antalet resultat i svaret. Baserat på standardvärden returneras de 50 högst rankade matchningarna i den enhetliga resultatuppsättningen.
Ofta hittar sökmotorn fler resultat än top
och k
. Om du vill returnera fler resultat använder du växlingsparametrarna top
, skip
och next
. Växling är hur du fastställer antalet resultat på varje logisk sida och navigerar genom den fullständiga nyttolasten. Du kan ange maxTextRecallSize
större värden (standardvärdet är 1 000) för att returnera fler resultat från textsidan av hybridfrågan.
Som standard omfattas fulltextsökning av en maximal gräns på 1 000 matchningar (se API-svarsgränser). När 1 000 matchningar har hittats letar sökmotorn inte längre efter fler.
Mer information finns i Så här arbetar du med sökresultat.
Diagram över ett arbetsflöde för sökbedömning
Följande diagram illustrerar en hybridfråga som anropar nyckelords- och vektorsökning, med ökad poängsättningsprofiler och semantisk rangordning.
En fråga som genererar det tidigare arbetsflödet kan se ut så här:
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"
}