Scegli tra le funzioni di distanza vettoriali per misurare la somiglianza degli incorporamenti vettoriali

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.

FunzioneDescrizioneFormulaRelazione 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