Questa pagina descrive come scegliere tra le funzioni di distanza vettoriale fornite in Spanner per misurare la somiglianza tra incorporamenti vettoriali.
Dopo aver generato incorporamenti dai tuoi dati Spanner, puoi eseguire una ricerca di somiglianze utilizzando le funzioni di distanza vettoriale. La seguente tabella 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 corrispondenti magnitudini vettoriali. | \(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 normalizzati o meno, puoi determinare quale misura di somiglianza utilizzare per trovare la somiglianza. L'incorporamento di un vettore normalizzato ha una magnitudine (lunghezza) esattamente di 1,0.
Dati normalizzati
Se hai un set di dati in cui tutti gli incorporamenti 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 incorporamenti sono normalizzati, DOT_PRODUCT()
è di solito il più efficiente dal punto di vista della calcolo, ma la differenza è trascurabile nella maggior parte dei casi. Tuttavia, se la tua applicazione è molto sensibile alle prestazioni, DOT_PRODUCT()
potrebbe essere utile per l'ottimizzazione delle prestazioni.
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, poiché la funzione prodotto scalare non misura la distanza. A seconda di come sono stati generati gli incorporamenti e del tipo di ricerca preferito, la funzione di distanza coseno o la funzione di distanza euclidea può produrre risultati di ricerca soggettivamente migliori rispetto all'altra funzione.
Non so se i dati sono normalizzati o non normalizzati
Se non hai la certezza che i tuoi dati siano normalizzati o meno 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 -1
a 1
. Un risultato
vicino a 0
indica che i vettori sono molto simili.
Passaggi successivi
- Scopri di più su come eseguire una ricerca vettoriale individuando il vicino k più vicino.
- 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()
,spanner.euclidean_distance(), and spanner.dot_product()
.