Scegli tra le funzioni di distanza dei vettori per misurare la somiglianza degli embedding dei vettori

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.

FunzioneDescrizioneFormulaRelazione 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