Vektordistanzfunktionen zum Messen der Ähnlichkeit von Vektoreinbettungen auswählen

Auf dieser Seite wird beschrieben, wie Sie die in Spanner verfügbaren Vektordistanzfunktionen auswählen, um die Ähnlichkeit zwischen Vektoreinbettungen zu messen.

Nachdem Sie Einbettungen generiert haben, aus Spanner-Daten abrufen können, können Sie mit Vektoren Entfernungsfunktionen. In der folgenden Tabelle werden die Vektordistanzfunktionen in Spanner beschrieben.

FunktionBeschreibungFormelBeziehung zur steigenden Ähnlichkeit
Skalarprodukt Berechnet den Kosinus des Winkels  \(\theta\) multipliziert mit dem Produkt der entsprechenden Vektormagnituden. \(a_1b_1+a_2b_2+...+a_nb_n\) \(=|a||b|cos(\theta)\) erhöht
Kosinus-Distanz Bei der Kosinus-Distanzfunktion wird die Kosinus-Ähnlichkeit von 1 (cosine_distance() = 1 - cosine similarity) abgezogen. Die Kosinus-Ähnlichkeit misst den Kosinus des Winkels \(\theta\) zwischen zwei Vektoren. 1– \(\frac{a^T b}{|a| \cdot |b|}\) Verringert
Euklidischer Abstand Misst die Entfernung zwischen zwei Vektoren. \(\sqrt{(a_1-b_1)^2+(a_2-b_2)^2+...+(a_N-b_N)^2}\) sinkt

Ähnlichkeitsmesswert auswählen

Je nachdem, ob alle Vektoreinbettungen normalisiert sind, bestimmen, welches Maß für die Ähnlichkeit zum Auffinden der Ähnlichkeit verwendet werden soll. Ein normalisierter Vektor hat eine Größe (Länge) von genau 1,0.

Wenn Sie außerdem wissen, mit welcher Distanzfunktion Ihr Modell trainiert wurde, können Sie diese Funktion verwenden, um die Ähnlichkeit zwischen Ihren Vektor-Ebenen zu messen.

Normalisierte Daten

Wenn Sie einen Datensatz 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 Grunde auf dieselbe Weise sortiert. Wenn Einbettungen normalisiert sind, ist DOT_PRODUCT() in der Regel die leistungseffizienteste Option. Der Unterschied ist jedoch in den meisten Fällen vernachlässigbar. Wenn Ihre Anwendung jedoch sehr leistungsabhängig ist, kann DOT_PRODUCT() bei der Leistungsoptimierung helfen.

Nicht normalisierte Daten

Wenn Sie einen Datensatz haben, in dem die Vektor-Ebenen nicht normalisiert sind, ist es mathematisch nicht korrekt, DOT_PRODUCT() als Distanzfunktion zu verwenden, da die Punktproduktfunktion keine Entfernung misst. Je nach wie die Einbettungen generiert wurden und welche Art von Suche bevorzugt wird, wird entweder durch die COSINE_DISTANCE()- oder EUCLIDEAN_DISTANCE()-Funktion die subjektiv besser sind als die andere Funktion. Es kann sein, dass Sie mit COSINE_DISTANCE() oder EUCLIDEAN_DISTANCE() experimentieren müssen, um herauszufinden, welche Option für Ihren Anwendungsfall am besten geeignet ist.

Nicht sicher, ob die Daten normalisiert sind

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

Nächste Schritte