Relevanzbewertung in der Hybridsuche mithilfe der Reciprocal Rank Fusion (RRF)
Reciprocal Rank Fusion (RRF) ist ein Algorithmus, der die Suchergebnisse aus mehreren, zuvor bewerteten Ergebnissen auswertet, um ein einheitliches Resultset zu erzeugen. In Azure AI Search wird RRF verwendet, wenn zwei oder mehr Abfragen parallel ausgeführt werden. Jede Abfrage erzeugt ein bewertetes Resultset, und RRF wird verwendet, um die Rangfolgen in einem einzelnen Resultset zusammenzuführen und zu homogenisieren, das in der Abfrageantwort zurückgegeben wird. Beispiele für Szenarien, in denen RRF immer verwendet wird, umfassen die Hybridsuche und mehrere Vektorabfragen, die gleichzeitig ausgeführt werden.
RRF basiert auf dem Konzept der gegenseitigen Rangfolge, was die Umkehrung des Rangs des ersten relevanten Dokuments in einer Liste der Suchergebnisse darstellt. Das Ziel der Technik ist es, die Position der Elemente in den ursprünglichen Rangfolgen zu berücksichtigen und den Elementen, die in mehreren Listen höher eingestuft werden, höhere Bedeutung zu geben. Dies kann dazu beitragen, die Gesamtqualität und Zuverlässigkeit der endgültigen Rangfolge zu verbessern, sodass es für die Aufgabe nützlicher ist, mehrere sortierte Suchergebnisse zu fusionieren.
Hinweis
Neu in 2024-09-01-preview ist die Möglichkeit, eine RRF-bewertete Suchbewertung in ihre Komponententeilbewertungen zu dekonstruieren. Dadurch erhalten Sie Transparenz in die Gesamtbewertungskomposition. Weitere Informationen finden Sie unter Entpacken von Suchbewertungen (Vorschau) in diesem Artikel.
Funktionsweise der RRF-Bewertung
RRF funktioniert, indem die Suchergebnisse aus mehreren Methoden verwendet werden, jedem Dokument in den Ergebnissen ein gegenseitiger Bewertungswert zugewiesen wird und dann die Bewertungen kombiniert werden, um eine neue Bewertung zu erstellen. Das Konzept besteht darin, dass Dokumente, die in den obersten Positionen in mehreren Suchmethoden angezeigt werden, wahrscheinlich relevanter sind und im kombinierten Ergebnis höher eingestuft werden sollten.
Hier ist eine einfache Erläuterung des RRF-Prozesses:
Abrufen von bewerteten Suchergebnissen aus mehreren Abfragen, die parallel ausgeführt werden.
Weisen Sie in jeder der Ranglisten die rangfolgenseitigen Bewertungsergebnisse zu. RRF generiert für jede Übereinstimmung in jedem Resultset eine neue
@search.score
. Für jedes Dokument in den Suchergebnissen weist das Modul basierend auf seiner Position in der Liste eine Kehrbewertung zu. Die Bewertung wird berechnet als1/(rank + k)
, wobeirank
die Position des Dokuments in der Liste undk
eine Konstante ist, die experimentell beobachtet wurde, um am besten zu funktionieren, wenn sie auf einen kleinen Wert wie 60 festgelegt ist. Beachten Sie, dass dieserk
-Wert eine Konstante im RRF-Algorithmus ist und vollständig vonk
, das die Anzahl der Nearest-Neighbors steuert, getrennt ist.Kombinieren Sie Bewertungen. Für jedes Dokument summiert das Modul die von jedem Suchsystem erhaltenen gegenseitigen Bewertungsergebnisse und erzeugt für jedes Dokument eine kombinierte Bewertung.
Das Modul bewertet Dokumente basierend auf kombinierten Bewertungen und sortiert sie. Die resultierende Liste ist die Fused-Rangfolge.
Für die Bewertung werden nur Felder verwendet, die im Index als searchable
oder in der Abfrage als searchFields
markiert sind. Es werden nur Felder zurückgegeben, die in der Abfrage als retrievable
markiert oder als select
angegeben sind, zusammen mit ihrer Suchbewertung.
Ausführung paralleler Abfragen
RRF wird immer verwendet, wenn mehr als eine Abfrageausführung ausgeführt wird. Die folgenden Beispiele veranschaulichen Abfragemuster, bei denen die parallele Abfrageausführung auftritt:
- Eine Volltextabfrage plus eine Vektorabfrage (einfaches Hybridszenario) entspricht zwei Abfrageausführungen.
- Eine Volltextabfrage sowie eine Vektorabfrage, die auf zwei Vektorfelder ausgerichtet ist, entspricht drei Abfrageausführungen.
- Eine Volltextabfrage sowie zwei Vektorabfragen, die auf fünf Vektorfelder ausgerichtet sind, entsprechen 11 Abfrageausführungen.
Bewertungen in hybriden Suchergebnissen
Wenn Ergebnisse bewertet werden, enthält die Eigenschaft den Wert @search.score
, der zum Sortieren der Ergebnisse verwendet wird. Bewertungen werden durch Bewertungsalgorithmen generiert, die je nach Methode variieren. Jeder Algorithmus hat einen eigenen Bereich und eine eigene Größe.
Das folgende Diagramm identifiziert die Bewertungseigenschaft, die für jede Übereinstimmung, jeden Algorithmus und den Bereich der Bewertungen für jeden Relevanzbewertungsalgorithmus zurückgegeben wird.
Suche | Parameter | Bewertungsalgorithmus | Bereich |
---|---|---|---|
Volltextsuche | @search.score |
BM25-Algorithmus | Keine Obergrenze. |
Vektorsuche | @search.score |
HNSW-Algorithmus unter Verwendung der in der HNSW-Konfiguration angegebenen Ähnlichkeitsmetrik. | 0,333 - 1,00 (Kosinus), 0 bis 1 für Euklidan und DotProduct. |
Hybridsuche | @search.score |
RRF-Algorithmus | Die obere Grenze wird an die Anzahl der zusammengeführten Abfragen gebunden, wobei jede Abfrage maximal 1 zum RRF-Score beiträgt. Beispielsweise würde das Zusammenführen von drei Abfragen höhere RRF-Ergebnisse erzeugen, als wenn nur zwei Suchergebnisse zusammengeführt werden. |
Semantische Rangfolge | @search.rerankerScore |
Semantische Rangfolge | 0,00 - 4,00 |
Die semantische Rangfolge erfolgt nach dem Zusammenführen von Ergebnissen durch RRF. Die Bewertung (@search.rerankerScore
) wird immer separat in der Abfrageantwort gemeldet. Der semantische Sortierer kann Volltext- und Hybridsuchergebnisse neu ranken, vorausgesetzt, diese Ergebnisse enthalten Felder mit semantisch reichhaltigem Inhalt. Er kann reine Vektorabfragen neu ranken, wenn die Suchdokumente Textfelder mit semantisch relevanten Inhalten enthalten.
Entpacken einer Suchbewertung in Teilbewertungen (Vorschau)
Mithilfe von 2024-09-01-preview können Sie eine Suchbewertung dekonstruieren, um ihre Teilbewertungen anzuzeigen.
Bei Vektorabfragen können Sie anhand dieser Informationen einen geeigneten Wert für die Vektorgewichtung oder das Festlegen von Mindestschwellenwerten ermitteln.
So erhalten Sie Teilbewertungen:
Verwenden Sie die neueste Vorschau der REST-API zur Such nach Dokumenten oder ein Azure SDK-Beta-Paket, welches das Feature bereitstellt.
Ändern Sie eine Abfrageanforderung, und fügen Sie einen neuen Parametersatz
debug
hinzu, der entweder aufvector
festgelegt ist, aufsemantic
, wenn Sie semantischen Sortierer verwenden, oder aufall
.
Hier sehen Sie ein Beispiel für eine Hybridabfrage, die Teilbewertungen im Debugmodus zurückgibt:
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
}
Gewichtete Bewertungen
Mithilfe von 2024-07-01 und neueren API-Vorschauversionen können Sie Vektorabfragen gewichten, um deren Bedeutung in einer Hybridabfrage zu erhöhen oder zu verringern.
Denken Sie daran, dass beim Berechnen von RRF für ein bestimmtes Dokument die Suchmaschine den Rang dieses Dokuments für jedes Resultset untersucht, in dem es angezeigt wird. Gehen Sie davon aus, dass ein Dokument in drei separaten Suchergebnissen angezeigt wird, wobei die Ergebnisse aus zwei Vektorabfragen und einer BM25-bewerteten Textabfrage stammen. Die Position des Dokuments variiert je nach Ergebnis.
Übereinstimmung gefunden | Position in Ergebnissen | @search.score | Gewichtungsmultiplikator | @search.score (gewichtet) |
---|---|---|---|---|
Vektorergebnisse eins | Position 1 | 0,8383955 | 0.5 | 0,41919775 |
Vektorergebnisse zwei | Position 5 | 0,81514114 | 2.0 | 1,63028228 |
BM25-Ergebnisse | Position 10 | 0,8577363 | Nicht verfügbar | 0,8577363 |
Die Position des Dokuments in jedem Resultset entspricht einer anfänglichen Bewertung, die zusammengezählt werden, um die endgültige RRF-Bewertung für dieses Dokument zu erstellen.
Wenn Sie eine Vektorgewichtung hinzufügen, werden die anfänglichen Bewertungen mit einem Gewichtungsmultiplikator versehen, der den Wert erhöht oder verringert. Der Standardwert ist 1,0, was bedeutet, dass keine Gewichtung erfolgt und die anfängliche Bewertung wie in der RRF-Bewertung verwendet wird. Wenn Sie jedoch eine Gewichtung von 0,5 hinzufügen, wird die Bewertung reduziert und das Ergebnis hat in der kombinierten Rangfolge eine geringere Wichtigkeit. Wenn Sie dagegen eine Gewichtung von 2,0 hinzufügen, wird die Bewertung zu einem größeren Faktor in der RRF-Gesamtbewertung.
In diesem Beispiel werden die @search.score-Werte (gewichtet) an das RRF-Bewertungsmodell übergeben.
Anzahl der bewerteten Ergebnisse in einer Hybridabfrageantwort
Wenn Sie die Paginierung nicht verwenden, gibt die Suchmaschine standardmäßig die höchsten 50 Bewertungsübereinstimmungen für die Volltextsuche und die ähnlichsten k
Übereinstimmungen für die Vektorsuche zurück. In einer Hybridabfrage bestimmt top
die Anzahl der Ergebnisse in der Antwort. Basierend auf den Standardwerten werden die höchsten 50 Übereinstimmungen des einheitlichen Resultsets zurückgegeben.
Häufig findet die Suchmaschine mehr Ergebnisse als top
und k
. Um weitere Ergebnisse zurückzugeben, verwenden Sie die Paginierungsparameter top
, skip
und next
. Das Paginieren bestimmt die Anzahl der Ergebnisse auf jeder logischen Seite und navigiert durch die vollständige Nutzlast. Sie können maxTextRecallSize
auf größere Werte festlegen (der Standardwert ist 1.000), um weitere Ergebnisse von der Textseite der Hybridabfrage zurückzugeben.
Die Volltextsuche unterliegt standardmäßig einem maximalen Grenzwert von 1.000 Übereinstimmungen (siehe API-Antwortgrenzwerte). Sobald 1.000 Übereinstimmungen gefunden wurden, sucht die Suchmaschine nicht mehr nach weiteren.
Weitere Informationen finden Sie unter Arbeiten mit Suchergebnissen.
Diagramm eines Suchbewertungsworkflows
Das folgende Diagramm veranschaulicht eine Hybridabfrage, welche die Schlüsselwort- und Vektorsuche mit einer Aufwertung durch Bewertungsprofile und semantischer Bewertung kombiniert.
Eine Abfrage, die den vorherigen Workflow generiert, sieht möglicherweise wie folgt aus:
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"
}