Bodování relevance v hybridním vyhledávání s využitím reciproční Rank Fusion (RRF)

Reciproční Rank Fusion (RRF) je algoritmus, který vyhodnocuje skóre hledání z více dříve seřazených výsledků, aby vznikla jednotná sada výsledků. Ve službě Azure AI Search se RRF používá vždy, když existují dva nebo více dotazů, které se spouští paralelně. Každý dotaz vytvoří seřazenou sadu výsledků a RRF se použije ke sloučení a homogenizaci řazení do jedné sady výsledků vrácené v odpovědi dotazu. Příklady scénářů, kdy se RRF vždy používá, zahrnují hybridní vyhledávání a více vektorových dotazů, které se spouští souběžně.

RRF vychází z konceptu recipročního pořadí, což je inverzní funkce k pořadí prvního relevantního dokumentu v seznamu výsledků hledání. Cílem této techniky je vzít v úvahu pozici položek v původních pořadích a dát vyšší důležitost položkám, které jsou seřazené v několika seznamech. To může pomoct zlepšit celkovou kvalitu a spolehlivost konečného hodnocení, což zvyšuje jeho užitečnost pro úkol zařaování více seřazených výsledků hledání.

Jak funguje hodnocení RRF

RRF funguje tak, že vezme výsledky hledání z více metod, přiřadí každému dokumentu ve výsledcích reciproční skóre pořadí a pak zkombinuje skóre a vytvoří nové hodnocení. Koncept spočívá v tom, že dokumenty, které se zobrazují na nejvyšších pozicích napříč několika metodami vyhledávání, budou pravděpodobně relevantnější a měly by být seřazeny výš v kombinovaném výsledku.

Tady je jednoduché vysvětlení procesu RRF:

  1. Získejte seřazené výsledky hledání z několika paralelně spuštěných dotazů.

  2. Přiřaďte skóre recipročního pořadí pro výsledek v každém seřazeném seznamu. RRF vygeneruje novou @search.score shodu pro každou shodu v každé sadě výsledků. Pro každý dokument ve výsledcích hledání přiřadí modul reciproční skóre pořadí na základě pozice v seznamu. Skóre se vypočítá jako 1/(rank + k), kde rank je pozice dokumentu v seznamu a k je konstanta, která byla experimentálně pozorována, aby fungovala nejlépe, pokud je nastavená na malou hodnotu jako 60. Všimněte si, že tato k hodnota je konstanta v algoritmu RRF a zcela oddělená od k toho, který řídí počet nejbližších sousedů.

  3. Zkombinujte skóre. Pro každý dokument modul sečte reciproční skóre pořadí získané z každého vyhledávacího systému a vytvoří kombinované skóre pro každý dokument. 

  4. Modul řadí dokumenty na základě kombinovaných skóre a řadí je. Výsledný seznam je sloučené hodnocení.

K bodování se používají pouze pole označená jako searchable v indexu nebo searchFields v dotazu. Ve výsledcích hledání se vrátí pouze pole označená jako retrievablepole nebo pole zadaná v select dotazu spolu s jejich skóre hledání.

Paralelní provádění dotazů

RRF se používá vždy, když existuje více než jedno spuštění dotazu. Následující příklady ilustrují vzory dotazů, ve kterých dochází k paralelnímu spuštění dotazu:

  • Fulltextový dotaz plus jeden vektorový dotaz (jednoduchý hybridní scénář) se rovná dvěma spuštěním dotazů.
  • Fulltextový dotaz plus jeden vektorový dotaz, který cílí na dvě vektorová pole, se rovná třem spuštěním dotazu.
  • Fulltextový dotaz plus dva vektorové dotazy, které cílí na pět vektorových polí, se rovná 11 provádění dotazů.

Skóre ve výsledcích hybridního hledání

Pokaždé, když jsou výsledky seřazené, @search.score vlastnost obsahuje hodnotu použitou k seřazení výsledků. Skóre se generují algoritmy řazení, které se pro každou metodu liší. Každý algoritmus má svůj vlastní rozsah a velikost.

Následující graf identifikuje vlastnost bodování vrácenou pro každou shodu, algoritmus a rozsah skóre pro každý algoritmus hodnocení relevance.

Metoda vyhledávání Parametr Algoritmus bodování Rozsah
Fulltextové vyhledávání @search.score Algoritmus BM25 Žádný horní limit.
vektorové vyhledávání @search.score Algoritmus HNSW, který používá metriku podobnosti zadanou v konfiguraci HNSW. 0.333 - 1.00 (Kosinus), 0 až 1 pro Euclidean a DotProduct.
hybridní vyhledávání @search.score Algoritmus RRF Horní limit je omezen počtem dotazů, které se sloučí, přičemž každý dotaz přispívá k skóre RRF maximálně 1. Například sloučení tří dotazů by vytvořilo vyšší skóre RRF, než kdyby se sloučily pouze dva výsledky hledání.
sémantické řazení @search.rerankerScore Sémantické řazení 0.00 - 4.00

Sémantické hodnocení se neúčastní RRF. Skóre (@search.rerankerScore) se vždy hlásí samostatně v odpovědi dotazu. Sémantické řazení může změnit pořadí fulltextových a hybridních výsledků hledání za předpokladu, že tyto výsledky obsahují pole s sémanticky bohatým obsahem.

Počet seřazených výsledků v odpovědi hybridního dotazu

Pokud ve výchozím nastavení nepoužíváte stránkování, vyhledávací web vrátí nejlepších 50 nejlepších shod pro fulltextové vyhledávání a nejvíce podobné k shody pro hledání vektorů. V hybridním dotazu top určuje počet výsledků v odpovědi. Na základě výchozích hodnot se vrátí prvních 50 nejlépe seřazených shod sjednocené sady výsledků.

Vyhledávač často najde více výsledků než top a k. Pokud chcete vrátit více výsledků, použijte parametry topstránkování , skipa next. Stránkování určuje počet výsledků na každé logické stránce a prochází celou datovou část.

Fulltextové vyhledávání podléhá maximálnímu limitu 1 000 shod (viz limity odpovědí rozhraní API). Jakmile se najde 1 000 shod, vyhledávací web už nebude hledat víc.

Další informace naleznete v tématu Jak pracovat s výsledky hledání.

Diagram pracovního postupu vyhodnocování hledání

Následující diagram znázorňuje hybridní dotaz, který volá klíčové slovo a vektorové vyhledávání, s posílením hodnoticích profilů a sémantickým hodnocením.

Diagram of prefilters.

Dotaz, který vygeneruje předchozí pracovní postup, může vypadat takto:

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

Viz také