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 Ebenen aus Ihren Spanner-Daten generiert haben, können Sie mithilfe von Vektordistanzfunktionen eine Ähnlichkeitssuche durchführen. In der folgenden Tabelle werden die Vektordistanzfunktionen in Spanner beschrieben.

FunktionBeschreibungFormelBeziehung zur steigenden Ähnlichkeit
Skalarprodukt Berechnet den Kosinus des Winkels  θ multipliziert mit dem Produkt der entsprechenden Vektormagnituden. a1b1+a2b2+...+anbn =|a||b|cos(θ) 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 θ zwischen zwei Vektoren. 1 – aTb|a||b| sinkt
Euklidischer Abstand Misst den Abstand zwischen zwei Vektoren in gerader Linie. (a1b1)2+(a2b2)2+...+(aNbN)2 sinkt

Ähnlichkeitsmaß auswählen

Je nachdem, ob alle Ihre Vektor-Embeddings normalisiert sind, können Sie festlegen, welches Ähnlichkeitsmaß 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 Vektoreinbettungen 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 nachdem, wie die Einbettungen generiert wurden und welche Art von Suche bevorzugt wird, liefert entweder die Funktion COSINE_DISTANCE() oder EUCLIDEAN_DISTANCE() Suchergebnisse, die subjektiv besser sind als die der anderen 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() ist wie DOT_PRODUCT() mit integrierter Normalisierung. Die Ähnlichkeit, die mit COSINE_DISTANCE() gemessen wird, reicht von 0 bis 2. Ein Ergebnis, das nahe an 0 liegt, weist darauf hin, dass die Vektoren sehr ähnlich sind.

Nächste Schritte