Scegli tra le funzioni di distanza vettoriale per misurare la somiglianza con gli incorporamenti vettoriali

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.

FunzioneDescrizioneFormulaRelazione 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