Wählen Sie eine der Funktionen für Vektorentfernung aus, um die Ähnlichkeit von Vektoreinbettungen zu messen

Auf dieser Seite wird beschrieben, wie Sie eine der in Spanner bereitgestellten Funktionen für Vektordistanzen auswählen, um die Ähnlichkeit zwischen Vektoreinbettungen zu messen.

Nachdem Sie aus Ihren Spanner-Daten Einbettungen generiert haben, können Sie mithilfe von Vektorentfernungsfunktionen eine Ähnlichkeitssuche durchführen. In der folgenden Tabelle werden die Vektor-Entfernungsfunktionen in Spanner beschrieben.

FunktionBeschreibungFormelBeziehung zur zunehmenden Ähnlichkeit
Punktprodukt Berechnet den Kosinus des Winkels \(\theta\) multipliziert mit dem Produkt der entsprechenden Vektorgrößen. \(a_1b_1+a_2b_2+...+a_nb_n\) \(=|a||b|cos(\theta)\) Steigerungen
Kosinus-Distanz Die Kosinus-Distanzfunktion subtrahiert die Kosinus-Ähnlichkeit von eins (cosine_distance() = 1 - cosine similarity). Die Kosinus-Ähnlichkeit misst den Kosinus des Winkels \(\theta\) zwischen zwei Vektoren. 1 - \(\frac{a^T b}{|a| \cdot |b|}\) Verringert
Euklidische Distanz Misst die Luftlinie zwischen zwei Vektoren. \(\sqrt{(a_1-b_1)^2+(a_2-b_2)^2+...+(a_N-b_N)^2}\) Verringert

Ähnlichkeitsmaß auswählen

Je nachdem, ob alle Ihre Vektoreinbettungen normalisiert wurden oder nicht, können Sie bestimmen, mit welchem Ähnlichkeitsmaß nach Ähnlichkeit gesucht werden soll. Eine normalisierte Vektoreinbettung hat eine Größe (Länge) von genau 1,0.

Normalisierte Daten

Wenn Sie ein Dataset haben, in dem alle Vektoreinbettungen normalisiert sind, liefern alle drei Funktionen dieselben semantischen Suchergebnisse. Obwohl jede Funktion einen anderen Wert zurückgibt, werden diese Werte im Wesentlichen auf die gleiche Weise sortiert. Wenn Einbettungen normalisiert werden, ist DOT_PRODUCT() in der Regel am recheneffizientesten, aber der Unterschied ist in den meisten Fällen vernachlässigbar. Wenn Ihre Anwendung jedoch sehr leistungssensibel ist, kann DOT_PRODUCT() bei der Leistungsoptimierung helfen.

Nicht normalisierte Daten

Wenn Sie ein Dataset haben, in dem Vektoreinbettungen nicht normalisiert sind, ist es mathematisch nicht korrekt, DOT_PRODUCT() als Entfernungsfunktion zu verwenden, da das Punktprodukt als Funktion keine Entfernung misst. Je nachdem, wie die Einbettungen generiert wurden und welche Art der Suche bevorzugt wird, kann entweder die Kosinus-Distanz oder die euklidische Entfernungsfunktion Suchergebnisse liefern, die subjektiv besser sind als die andere Funktion.

Nicht sicher, ob Daten normalisiert oder nicht normalisiert sind

Wenn Sie sich nicht sicher sind, ob Ihre Daten normalisiert wurden, und Sie DOT_PRODUCT() verwenden möchten, empfehlen wir stattdessen die Verwendung von COSINE_DISTANCE(). COSINE_DISTANCE() entspricht DOT_PRODUCT() mit integrierter Normalisierung. Die mit COSINE_DISTANCE() gemessene Ähnlichkeit reicht von -1 bis 1. Ein Ergebnis, das nahe bei 0 liegt, weist darauf hin, dass die Vektoren sehr ähnlich sind.

Nächste Schritte