Questa pagina descrive come scegliere tra le funzioni di distanza vettoriale fornite in Spanner per misurare la somiglianza tra gli incorporamenti vettoriali.
Dopo aver generato gli incorporamenti da i dati Spanner, puoi eseguire una ricerca di somiglianza utilizzando funzioni di distanza. La tabella seguente descrive le funzioni di distanza vettoriale in Spanner.
Funzione | Descrizione | Formula | Relazione con una maggiore somiglianza |
---|---|---|---|
Prodotto scalare | Calcola il coseno dell'angolo \(\theta\) moltiplicato per il prodotto delle magnitudini vettoriali corrispondenti. | \(a_1b_1+a_2b_2+...+a_nb_n\) \(=|a||b|cos(\theta)\) | Aumenta |
Distanza coseno | La funzione di distanza coseno sottrae la somiglianza coseno da uno (cosine_distance() = 1 - cosine similarity ). La somiglianza 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 modello l'incorporamento vettoriale ha una grandezza (lunghezza) esattamente 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 si dispone di un set di dati in cui tutti gli incorporamenti vettoriali sono normalizzati,
forniscono gli stessi risultati di ricerca semantici. In sostanza, anche se ogni
restituisce un valore diverso, i cui valori vengono ordinati nello stesso modo. Quando
gli incorporamenti sono normalizzati, DOT_PRODUCT()
di solito è il livello
efficiente, ma nella maggior parte dei casi la differenza è trascurabile. Tuttavia, se
è molto sensibile alle prestazioni, DOT_PRODUCT()
potrebbe aiutarti con
dell'ottimizzazione delle prestazioni.
Dati non normalizzati
Se hai un set di dati in cui gli incorporamenti vettoriali non sono normalizzati,
allora non è matematicamente corretto usare DOT_PRODUCT()
come distanza
funzione 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()
produce
risultati di ricerca soggettivamente migliori dell'altra funzione.
La sperimentazione con COSINE_DISTANCE()
o EUCLIDEAN_DISTANCE()
potrebbe
per stabilire qual è la migliore per il tuo caso d'uso.
Non so se i dati sono normalizzati o non normalizzati
Se non hai la certezza che i dati siano normalizzati o meno e vuoi utilizzare
DOT_PRODUCT()
, ti consigliamo di usare invece COSINE_DISTANCE()
.
COSINE_DISTANCE()
è come DOT_PRODUCT()
con la normalizzazione integrata.
La somiglianza misurata utilizzando COSINE_DISTANCE()
va da -1
a 1
. 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 individuando il vicino più vicino k.
- Scopri come esportare gli incorporamenti in Vertex AI Vector Search.
- Scopri di più sulle funzioni GoogleSQL
COSINE_DISTANCE()
,EUCLIDEAN_DISTANCE()
eDOT_PRODUCT()
. - Scopri di più sulle funzioni PostgreSQL
spanner.cosine_distance()
espanner.euclidean_distance(), and spanner.dot_product()
.