Questa pagina descrive come scegliere tra le funzioni di distanza vettoriale fornite in Spanner per misurare la similarità tra gli embedding vettoriali.
Dopo aver generato gli incorporamenti dai tuoi dati Spanner, puoi eseguire una ricerca di somiglianza utilizzando le funzioni di distanza vettoriale. La tabella seguente descrive le funzioni di distanza vettoriale in Spanner.
| Funzione | Descrizione | Formula | Relazione con l'aumento della somiglianza |
|---|---|---|---|
| Prodotto scalare | Calcola il coseno dell'angolo \(\theta\) moltiplicato per il prodotto delle magnitudo dei vettori corrispondenti. | \(a_1b_1+a_2b_2+...+a_nb_n\) \(=|a||b|cos(\theta)\) | Aumenta |
| Distanza coseno | La funzione di distanza del coseno sottrae la similarità del coseno da 1 (cosine_distance() = 1 - cosine similarity). La similarità del coseno misura il coseno dell'angolo \(\theta\) tra due vettori.
|
1 - \(\frac{a^T b}{|a| \cdot |b|}\) | Diminuisce |
| Distanza euclidea | Misura la distanza in linea retta tra due vettori. | \(\sqrt{(a_1-b_1)^2+(a_2-b_2)^2+...+(a_N-b_N)^2}\) | Diminuisce |
Scegliere una misura di similarità
A seconda che tutti i tuoi vector embedding siano normalizzati o meno, puoi determinare quale misura di similarità utilizzare per trovare la similarità. Un vector embedding normalizzato ha una magnitudine (lunghezza) pari esattamente a 1.0.
Inoltre, se sai con quale funzione di distanza è stato addestrato il modello, utilizza questa funzione per misurare la somiglianza tra gli incorporamenti dei vettori.
Dati normalizzati
Se hai un set di dati in cui tutti i vector embedding sono normalizzati, tutte e tre le funzioni forniscono gli stessi risultati di ricerca semantica. In sostanza, anche se ogni
funzione restituisce un valore diverso, questi valori vengono ordinati nello stesso modo. Quando
gli incorporamenti vengono normalizzati, DOT_PRODUCT() è in genere il più efficiente dal punto di vista computazionale, ma la differenza è trascurabile nella maggior parte dei casi. Tuttavia, se la tua
applicazione è molto sensibile al rendimento, DOT_PRODUCT() può aiutarti a
ottimizzare il rendimento.
Dati non normalizzati
Se hai un set di dati in cui gli incorporamenti vettoriali non sono normalizzati,
non è matematicamente corretto utilizzare DOT_PRODUCT() come funzione di distanza
perché il prodotto scalare come funzione non misura la distanza. A seconda
di come sono stati generati gli incorporamenti e del tipo di ricerca preferito,
la funzione COSINE_DISTANCE() o EUCLIDEAN_DISTANCE() produce
risultati di ricerca soggettivamente migliori rispetto all'altra funzione.
Potrebbe essere necessario sperimentare con COSINE_DISTANCE() o EUCLIDEAN_DISTANCE() per determinare quale sia la soluzione migliore per il tuo caso d'uso.
Non sai se i dati sono normalizzati o non normalizzati
Se non sai se i tuoi dati sono normalizzati e vuoi utilizzare
DOT_PRODUCT(), ti consigliamo di utilizzare COSINE_DISTANCE().
COSINE_DISTANCE() è come DOT_PRODUCT() con la normalizzazione integrata.
La somiglianza misurata utilizzando COSINE_DISTANCE() varia da 0 a 2. Un risultato
vicino a 0 indica che i vettori sono molto simili.
Passaggi successivi
- Scopri di più su come eseguire una ricerca vettoriale trovando il vicino più prossimo k.
- Scopri come esportare gli incorporamenti nella ricerca vettoriale di Gemini Enterprise Agent Platform.
- Scopri di più sulle funzioni GoogleSQL
COSINE_DISTANCE(),EUCLIDEAN_DISTANCE()eDOT_PRODUCT(). - Scopri di più sulle funzioni PostgreSQL
spanner.cosine_distance(),spanner.euclidean_distance(), and spanner.dot_product().