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 vettoriale fornite in Spanner per misurare la somiglianza tra gli incorporamenti vettoriali.

Dopo aver generato gli incorporamenti da i dati Spanner, puoi eseguire una ricerca di somiglianza utilizzando funzioni di distanza. La tabella seguente descrive le funzioni di distanza vettoriale in Spanner.

FunzioneDescrizioneFormulaRelazione con una maggiore somiglianza
Prodotto scalare Calcola il coseno dell'angolo \(\theta\) moltiplicato per il prodotto delle magnitudini vettoriali corrispondenti. \(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 o meno normalizzati, puoi determinare quale misura di somiglianza usare per trovare le somiglianze. Un modello l'incorporamento vettoriale ha una grandezza (lunghezza) esattamente 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 si dispone di un set di dati in cui tutti gli incorporamenti vettoriali sono normalizzati, forniscono gli stessi risultati di ricerca semantici. In sostanza, anche se ogni restituisce un valore diverso, i cui valori vengono ordinati nello stesso modo. Quando gli incorporamenti sono normalizzati, DOT_PRODUCT() di solito è il livello efficiente, ma nella maggior parte dei casi la differenza è trascurabile. Tuttavia, se è molto sensibile alle prestazioni, DOT_PRODUCT() potrebbe aiutarti con dell'ottimizzazione delle prestazioni.

Dati non normalizzati

Se hai un set di dati in cui gli incorporamenti vettoriali non sono normalizzati, allora non è matematicamente corretto usare DOT_PRODUCT() come distanza funzione 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() produce risultati di ricerca soggettivamente migliori dell'altra funzione. La sperimentazione con COSINE_DISTANCE() o EUCLIDEAN_DISTANCE() potrebbe per stabilire qual è la migliore per il tuo caso d'uso.

Non so se i dati sono normalizzati o non normalizzati

Se non hai la certezza che i dati siano normalizzati o meno e vuoi utilizzare DOT_PRODUCT(), ti consigliamo di usare invece COSINE_DISTANCE(). COSINE_DISTANCE() è come DOT_PRODUCT() con la normalizzazione integrata. La somiglianza misurata utilizzando COSINE_DISTANCE() va da -1 a 1. Un risultato un valore vicino a 0 indica che i vettori sono molto simili.

Passaggi successivi