Neueinstufung

Die hybride Suche erzielt präzisere Suchergebnisse durch mehrere gleichzeitige ANN-Suchen. Mehrere Suchvorgänge liefern mehrere Ergebnissätze, die eine Reranking-Strategie erfordern, um die Ergebnisse zusammenzuführen und neu zu ordnen und einen einzigen Ergebnissatz zu liefern. In diesem Leitfaden werden die von Milvus unterstützten Reranking-Strategien vorgestellt und Tipps für die Auswahl der geeigneten Reranking-Strategie gegeben.

Übersicht

Das folgende Diagramm zeigt den Hauptarbeitsablauf bei der Durchführung einer hybriden Suche in einer multimodalen Suchanwendung. Im Diagramm ist ein Pfad die einfache ANN-Suche in Texten und der andere Pfad die einfache ANN-Suche in Bildern. Jeder Pfad erzeugt eine Reihe von Ergebnissen auf der Grundlage der Text- bzw. Bildähnlichkeitsbewertung(Limit 1 und Limit 2). Dann wird eine Reranking-Strategie angewandt, um die beiden Ergebnismengen auf der Grundlage eines einheitlichen Standards neu zu bewerten und schließlich die beiden Ergebnismengen zu einer endgültigen Menge von Suchergebnissen, Limit(final), zusammenzuführen.

Multi Vector Rerank Multi-Vektor-Ranking

Bei der hybriden Suche ist das Reranking ein entscheidender Schritt, der die Ergebnisse aus mehreren Vektorsuchen integriert, um sicherzustellen, dass die endgültige Ausgabe die relevanteste und genaueste ist. Derzeit unterstützt Milvus die folgenden zwei Reranking-Strategien:

  • WeightedRanker: Bei dieser Strategie werden die Ergebnisse zusammengeführt, indem eine gewichtete Punktzahl der Ergebnisse (oder Abstände) aus verschiedenen Vektorsuchen berechnet wird. Die Gewichtung erfolgt auf der Grundlage der Wichtigkeit der einzelnen Vektorfelder, so dass eine Anpassung an die Prioritäten des jeweiligen Anwendungsfalls möglich ist.

  • RRFRanker (Reciprocal Rank Fusion Ranker): Diese Strategie kombiniert die Ergebnisse auf der Grundlage der Rangfolge. Sie verwendet eine Methode, die die Ränge der Ergebnisse aus verschiedenen Suchvorgängen ausgleicht, was oft zu einer faireren und effektiveren Integration verschiedener Datentypen oder Modalitäten führt.

WeightedRanker

Bei der WeightedRanker-Strategie werden die Ergebnisse der einzelnen Pfade der Vektorsuche je nach ihrer Bedeutung unterschiedlich gewichtet.

Mechanismus von WeightedRanker

Der Hauptarbeitsablauf der WeightedRanker-Strategie ist wie folgt:

  1. Sammeln von Suchergebnissen: Sammeln der Ergebnisse und Punktzahlen aus jedem Pfad der Vektorsuche (score_1, score_2).

  2. Normalisierung der Ergebnisse: Jede Suche kann unterschiedliche Ähnlichkeitsmetriken verwenden, was zu unterschiedlichen Punkteverteilungen führt. Beispielsweise kann die Verwendung des Inneren Produkts (IP) als Ähnlichkeitstyp zu Ergebnissen im Bereich von [-∞,+∞] führen, während die Verwendung des Euklidischen Abstands (L2) zu Ergebnissen im Bereich von [0,+∞] führt. Da die Wertebereiche der verschiedenen Suchvorgänge unterschiedlich sind und nicht direkt miteinander verglichen werden können, müssen die Werte der einzelnen Suchpfade normalisiert werden. In der Regel wird die Funktion arctan angewendet, um die Punktzahlen in einen Bereich zwischen [0, 1] umzuwandeln (score_1_normalisiert, score_2_normalisiert). Werte, die näher bei 1 liegen, weisen auf eine höhere Ähnlichkeit hin.

  3. Gewichte zuweisen: Auf der Grundlage der Bedeutung, die den verschiedenen Vektorfeldern zugewiesen wird, werden den normalisierten Punktzahlen (score_1_normalisiert, score_2_normalisiert) Gewichte(wi) zugewiesen. Die Gewichte der einzelnen Pfade sollten zwischen [0,1] liegen. Die resultierenden gewichteten Scores sind score_1_weighted und score_2_weighted.

  4. Scores zusammenführen: Die gewichteten Punktzahlen (score_1_weighted, score_2_weighted) werden vom höchsten zum niedrigsten Wert geordnet, um einen endgültigen Satz von Punktzahlen (score_final) zu erhalten.

Weighted Reranker Gewichteter Reranker

Beispiel für WeightedRanker

Dieses Beispiel zeigt eine multimodale Hybrid-Suche (topK=5) mit Bildern und Text und veranschaulicht, wie die WeightedRanker-Strategie die Ergebnisse von zwei ANN-Suchen neu ordnet.

  • Ergebnisse der ANN-Suche nach Bildern (topK=5):

ID

Punktzahl (Bild)

101

0.92

203

0.88

150

0.85

198

0.83

175

0.8

  • Ergebnisse der ANN-Suche nach Texten (topK=5):

ID

Punktzahl (Text)

198

0.91

101

0.87

110

0.85

175

0.82

250

0.78

  • Verwenden Sie WeightedRanker, um den Bild- und Textsuchergebnissen Gewichte zuzuweisen. Angenommen, die Gewichtung für die ANN-Bildersuche ist 0,6 und die Gewichtung für die Textsuche ist 0,4.

ID

Punktzahl (Bild)

Punktzahl (Text)

Gewichtetes Ergebnis

101

0.92

0.87

0.6×0.92+0.4×0.87=0.90

203

0.88

N/A

0.6×0.88+0.4×0=0.528

150

0.85

NICHT ZUTREFFEND

0.6×0.85+0.4×0=0.51

198

0.83

0.91

0.6×0.83+0.4×0.91=0.86

175

0.80

0.82

0.6×0.80+0.4×0.82=0.81

110

Nicht im Bild

0.85

0.6×0+0.4×0.85=0.34

250

Nicht im Bild

0.78

0.6×0+0.4×0.78=0.312

  • Die endgültigen Ergebnisse nach der Neuordnung(topK=5):

Rang

ID

Endgültige Punktzahl

1

101

0.90

2

198

0.86

3

175

0.81

4

203

0.528

5

150

0.51

Verwendung von WeightedRanker

Bei der Verwendung der WeightedRanker-Strategie ist es erforderlich, Gewichtungswerte einzugeben. Die Anzahl der einzugebenden Gewichtungswerte sollte der Anzahl der ANN-Basissuchanfragen in der Hybrid Search entsprechen. Die eingegebenen Gewichtungswerte sollten in den Bereich [0,1] fallen, wobei Werte, die näher an 1 liegen, eine größere Bedeutung anzeigen.

Nehmen wir zum Beispiel an, es gibt zwei grundlegende ANN-Suchanfragen in einer Hybridsuche: Textsuche und Bildsuche. Wenn die Textsuche als wichtiger angesehen wird, sollte ihr ein höheres Gewicht zugewiesen werden.

from pymilvus import WeightedRanker

rerank= WeightedRanker(0.8, 0.3)
import io.milvus.v2.service.vector.request.ranker.WeightedRanker;

WeightedRanker rerank = new WeightedRanker(Arrays.asList(0.8f, 0.3f))
import "github.com/milvus-io/milvus/client/v2/milvusclient"

reranker := milvusclient.NewWeightedReranker([]float64{0.8, 0.3})
rerank: WeightedRanker(0.8, 0.3)
export rerank='{
        "strategy": "ws",
        "params": {"weights": [0.8,0.3]}
    }'

RRFRanker

Reciprocal Rank Fusion (RRF) ist eine Datenfusionsmethode, die Ranglisten auf der Basis des Kehrwerts ihrer Rankings kombiniert. Diese Reranking-Strategie gleicht die Bedeutung der einzelnen Pfade der Vektorsuche effektiv aus.

Mechanismus von RRFRanker

Der Hauptarbeitsablauf der RRFRanker-Strategie sieht wie folgt aus:

  1. Sammeln der Suchrankings: Sammeln der Rangfolgen der Ergebnisse aus jedem Pfad der Vektorsuche (Rang_1, Rang_2).

  2. Rankings zusammenführen: Konvertieren Sie die Rankings aus jedem Pfad (rank_rrf_1, rank_rrf_2) gemäß einer Formel.

    Die Berechnungsformel beinhaltet N, das die Anzahl der Abrufe darstellt. ranki(d) ist die Rangposition des Dokuments d, die durch den i(ten) Abrufer erzeugt wurde. k ist ein Glättungsparameter, der normalerweise auf 60 gesetzt wird.

  3. Aggregierte Rankings: Neueinstufung der Suchergebnisse auf der Grundlage der kombinierten Rankings, um die endgültigen Ergebnisse zu erhalten.

RRF Reranker RRF Reranker

Beispiel für RRFRanker

Dieses Beispiel zeigt eine hybride Suche (topK=5) auf sparse-dense Vektoren und veranschaulicht, wie die RRFRanker-Strategie die Ergebnisse von zwei ANN-Suchen neu ordnet.

  • Ergebnisse der ANN-Suche auf spärlichen Vektoren von Texten (topK=5):

ID

Rang (spärlich)

101

1

203

2

150

3

198

4

175

5

  • Ergebnisse der ANN-Suche auf dichten Textvektoren (topK=5):

ID

Rang (dicht)

198

1

101

2

110

3

175

4

250

5

  • Verwenden Sie RRF, um die Rangfolge der beiden Gruppen von Suchergebnissen neu zu ordnen. Nehmen Sie an, dass der Glättungsparameter k auf 60 eingestellt ist.

ID

Punktzahl (spärlich)

Punktzahl (dicht)

Endgültige Punktzahl

101

1

2

1/(60+1)+1/(60+2) = 0.01639

198

4

1

1/(60+4)+1/(60+1) = 0.01593

175

5

4

1/(60+5)+1/(60+4) = 0.01554

203

2

N/A

1/(60+2) = 0.01613

150

3

NICHT ZUTREFFEND

1/(60+3) = 0.01587

110

K.A.

3

1/(60+3) = 0.01587

250

K.A.

5

1/(60+5) = 0.01554

  • Die endgültigen Ergebnisse nach der Neuordnung(topK=5):

Rang

ID

Endgültige Punktzahl

1

101

0.01639

2

203

0.01613

3

198

0.01593

4

150

0.01587

5

110

0.01587

Verwendung von RRFRanker

Wenn Sie die RRF-Reranking-Strategie verwenden, müssen Sie den Parameter k konfigurieren. Es handelt sich dabei um einen Glättungsparameter, der die relative Gewichtung von Volltextsuche und Vektorsuche effektiv verändern kann. Der Standardwert dieses Parameters ist 60, und er kann in einem Bereich von (0, 16384) eingestellt werden. Der Wert sollte eine Fließkommazahl sein. Der empfohlene Wert liegt zwischen [10, 100]. Während k=60 eine gängige Wahl ist, kann der optimale k Wert je nach Ihren spezifischen Anwendungen und Datensätzen variieren. Wir empfehlen, diesen Parameter auf der Grundlage Ihres spezifischen Anwendungsfalls zu testen und anzupassen, um die beste Leistung zu erzielen.

from pymilvus import RRFRanker

ranker = RRFRanker(100)
import io.milvus.v2.service.vector.request.ranker.RRFRanker;

RRFRanker ranker = new RRFRanker(100);
reranker := milvusclient.NewRRFReranker().WithK(100)
rerank: RRFRanker("100")
"rerank": {
    "strategy": "rrf",
    "params": {
        "k": 100
    }
}
export rerank='{
        "strategy": "rrf",
        "params": {"k": 100}
    }'

Auswahl der richtigen Reranking-Strategie

Bei der Auswahl einer Reranking-Strategie ist zu berücksichtigen, ob ein Schwerpunkt auf einer oder mehreren ANN-Basissuchen auf den Vektorfeldern liegt.

  • WeightedRanker: Diese Strategie ist zu empfehlen, wenn die Ergebnisse ein bestimmtes Vektorfeld betonen sollen. Mit dem WeightedRanker können Sie bestimmten Vektorfeldern eine höhere Gewichtung zuweisen und sie damit stärker hervorheben. Bei einer multimodalen Suche könnten beispielsweise Textbeschreibungen eines Bildes als wichtiger angesehen werden als die Farben dieses Bildes.

  • RRFRanker (Reciprocal Rank Fusion Ranker): Diese Strategie wird empfohlen, wenn es keine besondere Gewichtung gibt. Der RRF kann die Bedeutung der einzelnen Vektorfelder effektiv ausgleichen.

Try Managed Milvus for Free

Zilliz Cloud is hassle-free, powered by Milvus and 10x faster.

Get Started
Feedback

War diese Seite hilfreich?