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.
Funktion | Beschreibung | Formel | Beziehung 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
- Weitere Informationen zum Durchführen einer Vektorsuche durch Finden des k-nächsten Nachbarn
- Informationen zum Exportieren von Einbettungen in die Vertex AI-Vektorsuche
- Weitere Informationen zu den GoogleSQL-Funktionen
COSINE_DISTANCE()
,EUCLIDEAN_DISTANCE()
undDOT_PRODUCT()
- Weitere Informationen zu den PostgreSQL-Funktionen
spanner.cosine_distance()
undspanner.euclidean_distance(), and spanner.dot_product()