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 il coseno dell'angolo \(\theta\) moltiplicato 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 embedding vettoriali siano o meno normalizzati, puoi determinare quale misura di somiglianza utilizzare per trovare la somiglianza. Un vettore incorporato normalizzato ha una grandezza (lunghezza) pari esattamente a 1,0.
Inoltre, se conosci la funzione di distanza con cui è stato addestrato il modello, utilizzala per misurare la somiglianza tra gli embedding vettoriali.
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 di come sono stati generati gli embedding e del tipo di ricerca preferito, la funzione COSINE_DISTANCE()
o EUCLIDEAN_DISTANCE()
produce 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 sai se i dati sono normalizzati o meno
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 prossimo 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
COSINE_DISTANCE()
,EUCLIDEAN_DISTANCE()
eDOT_PRODUCT()
di GoogleSQL. - Scopri di più sulle funzioni
spanner.cosine_distance()
,spanner.euclidean_distance(), and spanner.dot_product()
di PostgreSQL.