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 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 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