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:
Získejte seřazené výsledky hledání z několika paralelně spuštěných dotazů.
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á jako1/(rank + k)
, kderank
je pozice dokumentu v seznamu ak
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 tatok
hodnota je konstanta v algoritmu RRF a zcela oddělená odk
toho, který řídí počet nejbližších sousedů.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.
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 retrievable
pole 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ů navector
buď ,semantic
pokud používáte sémantický ranker, neboall
.
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 top
stránkování , skip
a 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.
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"
}