Auf dieser Seite wird beschrieben, wie Sie die in Spanner bereitgestellten Vektordistanzfunktionen auswählen, um die Ähnlichkeit zwischen Vektoreinbettungen zu messen.
Nachdem Sie Einbettungen aus Ihren Spanner-Daten generiert haben, können Sie mit Vektordistanzfunktionen eine Ähnlichkeitssuche durchführen. In der folgenden Tabelle werden die Vektordistanzfunktionen in Spanner beschrieben.
| Funktion | Beschreibung | Formel | Beziehung zu zunehmender Ä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)\) | Steigerungen |
| Kosinus-Distanz | Bei der Kosinus-Distanzfunktion wird die Kosinus-Ähnlichkeit von 1 subtrahiert (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 sich |
| Euklidischer Abstand | Misst die geradlinige Distanz zwischen zwei Vektoren. | \(\sqrt{(a_1-b_1)^2+(a_2-b_2)^2+...+(a_N-b_N)^2}\) | Verringert sich |
Ähnlichkeitsmessung auswählen
Je nachdem, ob alle Ihre Vektoreinbettungen normalisiert sind oder nicht, können Sie festlegen, welcher Ähnlichkeitsmesswert verwendet werden soll, um die Ähnlichkeit zu ermitteln. Eine normalisierte Vektoreinbettung hat eine Größe (Länge) von genau 1,0.
Wenn Sie wissen, mit welcher Distanzfunktion Ihr Modell trainiert wurde, sollten Sie diese Distanzfunktion verwenden, um die Ähnlichkeit zwischen Ihren Vektoreinbettungen zu messen.
Normalisierte Daten
Wenn Sie ein Dataset haben, in dem alle Vektoreinbettungen normalisiert sind, liefern alle drei Funktionen dieselben semantischen Suchergebnisse. Im Grunde geben die einzelnen Funktionen zwar unterschiedliche Werte zurück, diese Werte werden aber auf dieselbe Weise sortiert. Wenn Einbettungen normalisiert werden, ist DOT_PRODUCT() in der Regel die recheneffizienteste Methode. Der Unterschied ist in den meisten Fällen jedoch vernachlässigbar. Wenn Ihre Anwendung jedoch sehr leistungsabhängig 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 Distanzfunktion zu verwenden, da das Skalarprodukt als Funktion keine Distanz misst. Je nachdem, wie die Einbettungen generiert wurden und welche Art von Suche bevorzugt wird, liefert entweder die Funktion COSINE_DISTANCE() oder EUCLIDEAN_DISTANCE() subjektiv bessere Suchergebnisse als die andere Funktion.
Möglicherweise müssen Sie mit COSINE_DISTANCE() oder EUCLIDEAN_DISTANCE() experimentieren, um herauszufinden, welche Methode für Ihren Anwendungsfall am besten geeignet ist.
Sie sind sich nicht sicher, ob die Daten normalisiert oder nicht normalisiert sind.
Wenn Sie sich 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(), nur dass die Normalisierung bereits integriert ist.
Die Ähnlichkeit, die mit COSINE_DISTANCE() gemessen wird, liegt zwischen 0 und 2. Ein Ergebnis, das nahe an 0 liegt, deutet darauf hin, dass die Vektoren sehr ähnlich sind.
Nächste Schritte
- Weitere Informationen zum Ausführen einer Vektorsuche durch Suchen des k-nächsten Nachbarn
- Einbettungen in die Vektorsuche der Gemini Enterprise Agent Platform exportieren
- 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()