Questa pagina descrive come scegliere tra le funzioni di distanza dei vettori fornite in Spanner per misurare la somiglianza tra gli embedding dei vettori.
Dopo aver generato gli embedding 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 la funzione coseno dell'angolo \(\theta\) moltiplicata per il prodotto delle intensità 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 somiglianza del coseno da 1 (cosine_distance() = 1 - cosine similarity ). La somiglianza 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 |
Scegli una misura di somiglianza
A seconda che tutti gli incorporamenti vettoriali siano o meno normalizzati, puoi determinare quale misura di somiglianza usare per trovare le somiglianze. Un vettore incorporato normalizzato ha una grandezza (lunghezza) pari esattamente a 1,0.
Inoltre, se sai con quale funzione di distanza è stato addestrato il tuo modello, utilizza la funzione di distanza per misurare la somiglianza tra il vettore incorporamenti.
Dati normalizzati
Se hai un set di dati in cui tutti gli embedding vettoriali 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 embedding sono 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()
potrebbe aiutarti a ottimizzarlo.
Dati non normalizzati
Se hai un set di dati in cui gli embedding 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
su come sono stati generati gli incorporamenti e
sul tipo di ricerca preferito,
la funzione COSINE_DISTANCE()
o EUCLIDEAN_DISTANCE()
genera
risultati di ricerca soggettivamente migliori dell'altra funzione.
Potrebbe essere necessario eseguire esperimenti con COSINE_DISTANCE()
o EUCLIDEAN_DISTANCE()
per determinare quale sia la soluzione migliore per il tuo caso d'uso.
Non so se i dati sono normalizzati o non normalizzati
Se non sai con certezza 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()
va da 0
a 2
. Un risultato
un valore vicino a 0
indica che i vettori sono molto simili.
Passaggi successivi
- Scopri di più su come eseguire una ricerca vettoriale trovando il k-esimo vicino più vicino.
- Scopri come esportare gli embedding in Vertex AI Vector Search.
- Scopri di più sulle funzioni GoogleSQL
COSINE_DISTANCE()
,EUCLIDEAN_DISTANCE()
eDOT_PRODUCT()
. - Scopri di più sulle funzioni
spanner.cosine_distance()
,spanner.euclidean_distance(), and spanner.dot_product()
di PostgreSQL.