Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Während der Ausführung von Vektorabfragen sucht die Suchmaschine nach ähnlichen Vektoren, um die besten Kandidaten zu finden, die in Suchergebnissen zurückgegeben werden sollen. Je nachdem, wie Sie den Vektorinhalt indiziert haben, ist die Suche nach relevanten Übereinstimmungen entweder erschöpfend oder für eine schnellere Verarbeitung auf die nächsten Nachbarn beschränkt. Sobald Kandidaten gefunden wurden, werden Ähnlichkeitsmetriken verwendet, um jedes Ergebnis basierend auf der Stärke der Übereinstimmung zu bewerten.
Dieser Artikel erläutert die Algorithmen, die verwendet werden, um relevante Übereinstimmungen und die für die Bewertung verwendeten Ähnlichkeitsmetriken zu suchen. Es bietet auch Tipps zur Verbesserung der Relevanz, wenn Suchergebnisse nicht den Erwartungen entsprechen.
In der Vektorsuche verwendete Algorithmen
Zu den Vektorsuchalgorithmen gehören:
Erschöpfende K-Nearest Neighbors (KNN),die einen Brute-Force-Scan des gesamten Vektorraums durchführt.
Hierarchische Navigable Small World (HNSW), das eine ANN-Suche (Approximate Nearest Neighbor) durchführt.
Nur Vektorfelder, die im searchable Index oder searchFields in der Abfrage markiert sind, werden für die Suche und Bewertung verwendet.
Über erschöpfende KNN
Erschöpfende KNN berechnet die Abstände zwischen allen Datenpunktpaaren und sucht die genau k nächsten Nachbarn für einen Abfragepunkt. Da der Algorithmus keinen schnellen zufälligen Zugriff auf Datenpunkte erfordert, verbraucht KNN kein Vektorindex-Größenkontingent . Er liefert jedoch die globale Gruppe der nächsten Nachbarn.
Erschöpfende KNN ist rechenintensiv, also verwenden Sie es für kleine bis mittlere Datasets oder wenn die Notwendigkeit der Genauigkeit die Notwendigkeit der Abfrageleistung überwiegt. Ein weiterer Anwendungsfall besteht darin, ein Dataset zu erstellen, um den Rückruf eines ANN-Algorithmusauszuwerten, da erschöpfende KNN verwendet werden kann, um den Boden wahrheitssatz der nächsten Nachbarn zu erstellen.
Über HNSW
HNSW ist ein ANN-Algorithmus, der für Anwendungen mit hoher Rückrufzeit und geringer Latenz mit unbekannter oder volatiler Datenverteilung optimiert ist. Während der Indizierung erstellt HNSW zusätzliche Datenstrukturen, die Datenpunkte in einem hierarchischen Diagramm organisieren. Während der Abfrageausführung navigiert HNSW durch dieses Diagramm, um die relevantesten Übereinstimmungen zu finden, wodurch effiziente benachbarte Suchvorgänge ermöglicht werden.
HNSW erfordert, dass sich alle Datenpunkte im Arbeitsspeicher befinden, um schnellen zufälligen Zugriff zu erhalten, der das Vektorindexgrößenkontingent verbraucht. Dieser Entwurf gleicht die Suchgenauigkeit mit der Recheneffizienz ab und macht HNSW für die meisten Szenarien geeignet, insbesondere bei der Suche über größere Datasets.
HNSW bietet mehrere tunbare Konfigurationsparameter, um den Durchsatz, die Latenz und den Rückruf für Ihre Suchanwendung zu optimieren. Beispielsweise unterstützen Felder, die HNSW angeben, auch vollständige KNN mithilfe des Abfrageanforderungsparameters"exhaustive": true. Felder, die für exhaustiveKnn indiziert sind, unterstützen HNSW-Abfragen nicht, da die zusätzlichen Datenstrukturen, die eine effiziente Suche ermöglichen, nicht vorhanden sind.
Über ANN
ANN ist eine Klasse von Algorithmen zum Suchen von Übereinstimmungen im Vektorraum. Diese Klasse von Algorithmen verwendet verschiedene Datenstrukturen oder Datenpartitionierungsmethoden, um den Suchraum erheblich zu reduzieren und die Abfrageverarbeitung zu beschleunigen.
ANN-Algorithmen opfern etwas Genauigkeit, bieten aber skalierbare und schnellere Abrufe ungefährer nächster Nachbarn, was sie ideal macht, um Genauigkeit und Effizienz in modernen Informationsabrufanwendungen auszubalancieren. Sie können die Parameter Ihres Algorithmus anpassen, um die Abruf-, Wartezeit-, Arbeitsspeicher- und Speicherbedarfsanforderungen Ihrer Suchanwendung zu optimieren.
Azure KI Search verwendet HNSW als ANN-Algorithmus.
Funktionsweise der Pixelwiederholungssuche
Vektorabfragen werden für einen Einbettungsraum ausgeführt, der aus demselben Einbettungsmodell generierten Vektoren besteht. Im Allgemeinen wird der Eingabewert innerhalb einer Abfrageanforderung in dasselbe Machine Learning-Modell eingespeist, das Einbettungen im Vektorindex generiert hat. Die Ausgabe ist ein Vektor im gleichen Einbettungsraum. Da ähnliche Vektoren eng gruppiert sind, entspricht die Suche nach Übereinstimmungen dem Auffinden der Vektoren, die dem Abfragevektor am nächsten sind, und dem Zurückgeben der zugehörigen Dokumente als Suchergebnis.
Wenn sich beispielsweise eine Abfrageanfrage um Hotels handelt, ordnet das Modell die Abfrage einem Vektor zu, der irgendwo im Cluster von Vektoren vorhanden ist, die Dokumente zu Hotels darstellen. Anhand einer Ähnlichkeitsmetrik bestimmen Sie, welche Vektoren der Abfrage am ehesten ähneln.
Wenn Vektorfelder für vollständige KNN indiziert werden, wird die Abfrage für „alle Nachbarn“ ausgeführt. Bei Feldern, die für HNSW indiziert sind, verwendet die Suchmaschine ein HNSW-Diagramm, um eine Teilmenge von Knoten im Vektorindex zu durchsuchen.
Erstellen des HNSW-Diagramms
Während der Indizierung erstellt der Suchdienst den HNSW-Graphen. Das Ziel der Indizierung eines neuen Vektors in einem HNSW-Diagramm besteht darin, ihn der Diagrammstruktur auf eine Weise hinzuzufügen, die eine effiziente Pixelwiederholungssuche ermöglicht. Die folgenden Schritte fassen den Prozess zusammen:
Initialisierung: Beginnen Sie mit einem leeren HNSW-Diagramm oder dem vorhandenen HNSW-Diagramm, wenn es sich nicht um einen neuen Index handelt.
Einstiegspunkt: Dies ist die oberste Ebene des hierarchischen Diagramms und dient als Startpunkt für die Indizierung.
Hinzufügen zum Diagramm: Verschiedene hierarchische Ebenen stellen unterschiedliche Granularitäten des Diagramms dar, wobei höhere Ebenen globaler sind und niedrigere Ebenen präziser sind. Jeder Knoten im Diagramm stellt einen Vektorpunkt dar.
Jeder Knoten ist mit
mNachbarn verbunden, die sich in der Nähe befinden. Dies ist dermParameter.Die Anzahl der Datenpunkte, die als Kandidatenverbindungen betrachtet werden, wird durch den
efConstruction-Parameter gesteuert. Diese dynamische Liste bildet den Satz der nächstgelegenen Punkte im vorhandenen Diagramm, damit der Algorithmus berücksichtigt werden kann. HöhereefConstructionWerte führen dazu, dass mehr Knoten berücksichtigt werden, was häufig dazu führt, dass die lokalen Umgebungen für jeden Vektor verdichtet werden.Diese Verbindungen verwenden die konfigurierte
metricÄhnlichkeit, um den Abstand zu bestimmen. Einige Verbindungen sind „Fernverbindungen“, die sich über verschiedene hierarchische Ebenen hinweg verbinden, wodurch Verknüpfungen im Diagramm erstellt werden, die die Sucheffizienz verbessern.
Bereinigung und Optimierung des Graphen: Dies kann nach der Indizierung aller Vektoren geschehen und verbessert die Navigationsfähigkeit und Effizienz des HNSW-Graphen.
Navigieren im HNSW-Graphen zur Abfragezeit
Eine Vektorabfrage navigiert in der hierarchischen Graphstruktur, um nach Übereinstimmungen zu scannen. Im Folgenden werden die Schritte im Prozess zusammengefasst:
Initialisierung: Der Algorithmus initiiert die Suche auf der obersten Ebene des hierarchischen Diagramms. Dieser Einstiegspunkt enthält den Satz von Vektoren, die als Ausgangspunkt für die Suche dienen.
Traversal: Als Nächstes durchläuft es die Diagrammebene nach Ebene, navigiert von der obersten Ebene zu niedrigeren Ebenen und wählt Kandidatenknoten aus, die näher am Abfragevektor liegen, basierend auf der konfigurierten Entfernungsmetrik, z. B. Kosinusähnlichkeit.
Pruning: Um die Effizienz zu verbessern, schneidet der Algorithmus den Suchbereich, indem nur Knoten berücksichtigt werden, die wahrscheinlich nächste Umgebung enthalten. Dies wird erreicht, indem eine Prioritätswarteschlange potenzieller Kandidaten beibehalten und aktualisiert wird, während die Suche fortschreitet. Die Länge dieser Warteschlange wird durch den Parameter
efSearchkonfiguriert.Einschränkung: Wenn der Algorithmus zu niedrigeren, granulareren Ebenen wechselt, berücksichtigt HNSW weitere Umgebungen in der Nähe der Abfrage, wodurch der Kandidatensatz von Vektoren optimiert und die Genauigkeit verbessert werden kann.
Abschluss: Die Suche wird abgeschlossen, wenn die gewünschte Anzahl der nächsten Umgebung identifiziert wurde oder wenn andere Stoppkriterien erfüllt sind. Diese gewünschte Anzahl der nächsten Nachbarn wird vom Abfragezeitparameter
kgesteuert.
Ähnlichkeitsmetriken, die zum Messen der Nähe verwendet werden
Der Algorithmus findet Kandidatenvektoren zum Auswerten der Ähnlichkeit. Zum Ausführen dieser Aufgabe vergleicht eine Berechnung der Ähnlichkeitsmetrik den Kandidatenvektor mit dem Abfragevektor und misst die Ähnlichkeit. Der Algorithmus verfolgt den sortierten Satz der ähnlichsten Vektoren, die gefunden werden, was den bewerteten Resultset bildet, wenn der Algorithmus den Abschluss erreicht hat.
| Metrik | BESCHREIBUNG |
|---|---|
cosine |
Diese Metrik misst den Winkel zwischen zwei Vektoren und wird von unterschiedlichen Vektorlängen nicht beeinflusst. Mathematisch berechnet sie den Winkel zwischen zwei Vektoren. Kosinus ist die Ähnlichkeitsmetrik, die von Azure Open KI-Einbettungsmodellen verwendet wird. Wenn Sie Also Azure OpenAI verwenden, geben Sie cosine in der Vektorkonfiguration an. |
dotProduct |
Diese Metrik misst sowohl die Länge jedes Paars von zwei Vektoren als auch den Winkel dazwischen. Mathematisch berechnet es die Produkte der Größen von Vektoren und den Winkel dazwischen. Bei normalisierten Vektoren ist dies identisch mit cosine der Ähnlichkeit, aber etwas leistungsleistungsfähiger. |
euclidean |
(auch bekannt als l2 norm) Diese Metrik misst die Länge des Vektorunterschieds zwischen zwei Vektoren. Mathematisch berechnet sie den Euklidischen Abstand zwischen zwei Vektoren, was die l2-Norm des Unterschieds der beiden Vektoren ist. |
Hinweis
Wenn Sie mehrere Vektorabfragen parallel ausführen oder eine Hybridsuche durchführen, die Vektor- und Textabfragen in derselben Anforderung kombiniert, wird RRF (Reciprocal Rank Fusion) zum Bewerten der endgültigen Suchergebnisse verwendet.
Bewertungen in Vektorsuchergebnissen
Scores werden berechnet und den einzelnen Übereinstimmungen zugewiesen, wobei die höchsten Übereinstimmungen als k-Ergebnisse zurückgegeben werden. Die @search.score-Eigenschaft enthält den Score. Die folgende Tabelle zeigt die Spanne, in die eine Score fallen wird.
| Suchverfahren | Parameter | Bewertungsmetrik | Range |
|---|---|---|---|
| Vektorsuche | @search.score |
Kosinus | 0.333 – 1.00 |
Für die cosine-Metrik ist es wichtig zu beachten, dass der berechnete @search.score nicht der Kosinuswert zwischen dem Abfragevektor und den Dokumentvektoren ist. Stattdessen wendet Azure KI Search Transformationen an, sodass die Bewertungsfunktion monoton abnimmt, was bedeutet, dass die Bewertungswerte immer kleiner werden, wenn die Ähnlichkeit schlimmer wird. Diese Transformation stellt sicher, dass Suchergebnisse für Bewertungszwecke verwendet werden können.
Es gibt einige Nuancen mit Ähnlichkeitsbewertungen:
- Kosinusähnlichkeit wird als Kosinus des Winkels zwischen zwei Vektoren definiert.
- Kosinusabstand ist definiert als
1 - cosine_similarity.
Um eine monotonisch abnehmende Funktion zu erstellen, wird dies @search.score als definiert. 1 / (1 + cosine_distance)
Entwickler, die anstelle des synthetischen Werts einen Kosinuswert benötigen, können eine Formel verwenden, um die Suchbewertung wieder in Kosinusabstand umzuwandeln:
double ScoreToSimilarity(double score)
{
double cosineDistance = (1 - score) / score;
return -cosineDistance + 1;
}
Der ursprüngliche Kosinuswert kann bei benutzerdefinierten Lösungen hilfreich sein, die Schwellenwerte einrichten, um Ergebnisse von Ergebnissen niedriger Qualität zu kürzen.
Tipps zur Optimierung der Relevanz
Wenn Sie keine relevanten Ergebnisse erhalten, experimentieren Sie mit Änderungen an der Abfragekonfiguration. Für Vektorabfragen gibt es keine spezifischen Optimierungsfeatures, z. B. ein Bewertungsprofil oder ein Feld oder eine Ausdruckssteigerung:
Experimentieren Sie mit Blockgröße und Überlappung. Versuchen Sie, die Blockgröße zu erhöhen und sicherzustellen, dass genügend Überlappung vorhanden ist, um den Kontext oder die Kontinuität zwischen Blöcken beizubehalten.
Probieren Sie für HNSW verschiedene Ebenen von
efConstructionaus, um die interne Zusammensetzung des Näherungsgraphen zu ändern. Der Standardwert ist 400. Der Bereich liegt zwischen 100 und 1.000.Erhöhen Sie
k-Ergebnisse, um weitere Suchergebnisse in ein Chatmodell einzuspeisen, wenn Sie eines verwenden.Testen Sie Hybridabfragen mit semantischer Rangfolge. Bei Benchmarktests erzeugte diese Kombination durchweg die relevantesten Ergebnisse.