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

Poznámka:

Novinkou v roce 2024-09-01-preview je možnost dekonstruovat skóre hledání seřazené podle RRF do dílčích jader jeho součástí. To vám dává transparentnost do all-up skóre složení. Další informace najdete v tomto článku v části Rozbalení skóre vyhledávání (Preview ).

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é řazení probíhá po sloučení výsledků RRF. Skóre (@search.rerankerScore) se vždy hlásí samostatně v odpovědi dotazu. Sémantický ranker může přeřadit úplný text a výsledky hybridního hledání za předpokladu, že tyto výsledky obsahují pole s sémanticky bohatým obsahem. Dotazy čistě vektorů se dají přeřadit, pokud hledané dokumenty obsahují textová pole, která obsahují sémanticky relevantní obsah.

Rozbalení skóre hledání do dílčích jader (Preview)

Pomocí verze 2024-09-01-preview můžete dekonstruovat skóre hledání a zobrazit jeho dílčí jádra.

U vektorových dotazů vám tyto informace můžou pomoct určit odpovídající hodnotu pro vážení vektorů nebo nastavit minimální prahové hodnoty.

Získání dílčích jader:

  • Použijte nejnovější verzi preview rozhraní REST API služby Search Documents nebo beta balíček sady Azure SDK, který tuto funkci poskytuje.

  • Upravte požadavek dotazu a přidejte novou debug sadu parametrů na vectorbuď , semantic pokud používáte sémantický ranker, nebo all.

Tady je příklad hybridního dotazu, který vrací dílčí jádra v režimu ladění:

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
}

Vážené skóre

Pomocí verzí rozhraní API verze 2024-07-07-01 a novějších verzí preview můžete dotazy vektorů hmotnosti zvýšit nebo snížit jejich důležitost v hybridním dotazu.

Vzpomeňte si, že při výpočtu RRF pro určitý dokument prohledá vyhledávací modul pořadí tohoto dokumentu pro každou sadu výsledků, ve které se zobrazí. Předpokládejme, že se dokument zobrazuje ve třech samostatných výsledcích hledání, kde výsledky pocházejí ze dvou vektorových dotazů a jednoho textového dotazu seřazeného BM25. Umístění dokumentu se liší v každém výsledku.

Nalezena shoda Umístění ve výsledcích @search.score násobitel hmotnosti @search.score (vážený)
vector results one pozice 1 0.8383955 0.5 0.41919775
výsledky vektoru 2 pozice 5 0.81514114 2.0 1.63028228
Výsledky BM25 pozice 10 0.8577363 NA 0.8577363

Pozice dokumentu v každé sadě výsledků odpovídá počátečnímu skóre, které se přidá k vytvoření konečného skóre RRF pro daný dokument.

Pokud přidáte vektorovou váhu, počáteční skóre se řídí násobitelem váhy, který zvýší nebo sníží skóre. Výchozí hodnota je 1,0, což znamená, že se nebere váhou a počáteční skóre se použije tak, jak je v bodování RRF. Pokud ale přidáte váhu 0,5, skóre se sníží a výsledek bude v kombinovaném pořadí méně důležitý. Pokud naopak přidáte váhu 2,0, skóre se stane větším faktorem v celkovém skóre RRF.

V tomto příkladu @search.score se hodnoty (vážené) předávají modelu hodnocení RRF.

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. Pokud chcete vrátit další výsledky z textové strany hybridního dotazu, můžete nastavit maxTextRecallSize na větší hodnoty (výchozí hodnota je 1 000).

Fulltextové vyhledávání ve výchozím nastavení 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 předfiltrovaných filtrů

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

Viz také