Dela via


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.

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:

  1. Hämta rankade sökresultat från flera frågor som körs parallellt.

  2. 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 som 1/(rank + k), där rank är dokumentets position i listan och k ä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är k värdet är en konstant i RRF-algoritmen och helt separat från det k som styr antalet närmaste grannar.

  3. 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. 

  4. 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.

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 initial 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 underordnas de inledande poängen 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, skipoch 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.

Diagram över förfilter.

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"
}

Se även