Scegli tra le funzioni di distanza dei vettori per misurare la somiglianza degli embedding dei vettori
Mantieni tutto organizzato con le raccolte
Salva e classifica i contenuti in base alle tue preferenze.
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.
Funzione
Descrizione
Formula
Relazione con
l'aumento della somiglianza
Prodotto scalare
Calcola il coseno dell'angolo \(\theta\) moltiplicato per il prodotto delle intensità dei vettori corrispondenti.
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.
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.
[[["Facile da capire","easyToUnderstand","thumb-up"],["Il problema è stato risolto","solvedMyProblem","thumb-up"],["Altra","otherUp","thumb-up"]],[["Difficile da capire","hardToUnderstand","thumb-down"],["Informazioni o codice di esempio errati","incorrectInformationOrSampleCode","thumb-down"],["Mancano le informazioni o gli esempi di cui ho bisogno","missingTheInformationSamplesINeed","thumb-down"],["Problema di traduzione","translationIssue","thumb-down"],["Altra","otherDown","thumb-down"]],["Ultimo aggiornamento 2025-09-05 UTC."],[],[],null,["# Choose among vector distance functions to measure vector embeddings similarity\n\n| **Note:** This feature is available with the Spanner Enterprise edition and Enterprise Plus edition. For more information, see the [Spanner editions overview](/spanner/docs/editions-overview).\n\n\u003cbr /\u003e\n\nThis page describes how to choose among the vector distance functions provided\nin Spanner to measure similarity between vector embeddings.\n\nAfter you've [generated embeddings](/spanner/docs/ml-tutorial-embeddings) from\nyour Spanner data, you can perform a similarity search using vector\ndistance functions. The following table describes the vector distance functions\nin Spanner.\n\nChoose a similarity measure\n---------------------------\n\nDepending on whether or not all your vector embeddings are normalized, you can\ndetermine which similarity measure to use to find similarity. A normalized\nvector embedding has a magnitude (length) of exactly 1.0.\n\nIn addition, if you know which distance function your model was trained with,\nuse that distance function to measure similarity between your vector\nembeddings.\n\n**Normalized data**\n\nIf you have a dataset where all vector embeddings are normalized, then all three\nfunctions provide the same semantic search results. In essence, although each\nfunction returns a different value, those values sort the same way. When\nembeddings are normalized, `DOT_PRODUCT()` is usually the most computationally\nefficient, but the difference is negligible in most cases. However, if your\napplication is highly performance sensitive, `DOT_PRODUCT()` might help with\nperformance tuning.\n\n**Non-normalized data**\n\nIf you have a dataset where vector embeddings aren't normalized,\nthen it's not mathematically correct to use `DOT_PRODUCT()` as a distance\nfunction because dot product as a function doesn't measure distance. Depending\non how the embeddings were generated and what type of search is preferred,\neither the `COSINE_DISTANCE()` or `EUCLIDEAN_DISTANCE()` function produces\nsearch results that are subjectively better than the other function.\nExperimentation with either `COSINE_DISTANCE()` or `EUCLIDEAN_DISTANCE()` might\nbe necessary to determine which is best for your use case.\n\n**Unsure if data is normalized or non-normalized**\n\nIf you're unsure whether or not your data is normalized and you want to use\n`DOT_PRODUCT()`, we recommend that you use `COSINE_DISTANCE()` instead.\n`COSINE_DISTANCE()` is like `DOT_PRODUCT()` with normalization built-in.\nSimilarity measured using `COSINE_DISTANCE()` ranges from `0` to `2`. A result\nthat is close to `0` indicates the vectors are very similar.\n\nWhat's next\n-----------\n\n- Learn more about how to [perform a vector search by finding the k-nearest neighbor](/spanner/docs/find-k-nearest-neighbors).\n- Learn how to [export embeddings to Vertex AI Vector Search](/spanner/docs/vector-search-embeddings).\n- Learn more about the [GoogleSQL `COSINE_DISTANCE()`, `EUCLIDEAN_DISTANCE()`, and `DOT_PRODUCT()`](/spanner/docs/reference/standard-sql/mathematical_functions) functions.\n- Learn more about the [PostgreSQL `spanner.cosine_distance()`, `spanner.euclidean_distance(), and spanner.dot_product()`](/spanner/docs/reference/postgresql/functions-and-operators#mathematical) functions."]]