Cette page explique comment choisir parmi les fonctions de distance vectorielle fournies dans Spanner pour mesurer la similarité entre les représentations vectorielles continues.
Une fois que vous avez généré des représentations vectorielles continues à partir de vos données Spanner, vous pouvez effectuer une recherche de similarité à l'aide de fonctions de distance vectorielle. Le tableau suivant décrit les fonctions de distance vectorielle dans Spanner.
Fonction | Description | Formula | Lien avec une similarité croissante |
---|---|---|---|
Produit scalaire | Calcule le cosinus de l'angle \(\theta\) multiplié par le produit des grandeurs vectorielles correspondantes. | \(a_1b_1+a_2b_2+...+a_nb_n\) \(=|a||b|cos(\theta)\) | Augmente |
Distance de cosinus | La fonction de distance de cosinus soustrait la similarité cosinus de un (cosine_distance() = 1 - cosine similarity ). La similarité cosinus mesure le cosinus de l'angle \(\theta\) entre deux vecteurs.
|
1 - \(\frac{a^T b}{|a| \cdot |b|}\) | Diminution |
Distance euclidienne | Mesure la distance en ligne droite entre deux vecteurs. | \(\sqrt{(a_1-b_1)^2+(a_2-b_2)^2+...+(a_N-b_N)^2}\) | Diminution |
Choisir une mesure de similarité
Selon que tous vos représentations vectorielles continues sont normalisées ou non, vous pouvez déterminer la mesure de similarité à utiliser pour trouver des similarités. Un embedding vectoriel normalisé a une magnitude (longueur) exacte de 1,0.
De plus, si vous savez avec quelle fonction de distance votre modèle a été entraîné, utilisez-la pour mesurer la similarité entre vos représentations vectorielles continues.
Données normalisées
Si vous disposez d'un ensemble de données dans lequel tous les embeddings vectoriels sont normalisés, les trois fonctions fournissent les mêmes résultats de recherche sémantique. Concrètement, même si chaque
renvoie une valeur différente, ces valeurs trient de la même manière. Lorsque les représentations vectorielles continues sont normalisées, DOT_PRODUCT()
est généralement la plus efficace en termes de calcul, mais la différence est négligeable dans la plupart des cas. Toutefois, si votre
application sensible aux performances, DOT_PRODUCT()
peut vous aider
l'optimisation des performances.
Données non normalisées
Si vous disposez d'un ensemble de données dont les représentations vectorielles continues ne sont pas normalisées, il n'est pas mathématiquement correct d'utiliser DOT_PRODUCT()
comme fonction de distance, car le produit scalaire en tant que fonction ne mesure pas la distance. En fonction
sur la façon dont les représentations vectorielles continues
ont été générées et sur le type de recherche à privilégier,
la fonction COSINE_DISTANCE()
ou EUCLIDEAN_DISTANCE()
génère
des résultats de recherche qui sont subjectivement
meilleurs que l'autre fonction.
Vous devrez peut-être tester COSINE_DISTANCE()
ou EUCLIDEAN_DISTANCE()
pour déterminer laquelle est la plus adaptée à votre cas d'utilisation.
Je ne sais pas si les données sont normalisées ou non normalisées
Si vous n'êtes pas sûr que vos données soient normalisées ou non et que vous souhaitez utiliser
DOT_PRODUCT()
, nous vous recommandons d'utiliser plutôt COSINE_DISTANCE()
.
COSINE_DISTANCE()
est semblable à DOT_PRODUCT()
avec la normalisation intégrée.
La similarité mesurée à l'aide de COSINE_DISTANCE()
s'étend de 0
à 2
. Un résultat
qui est proche de 0
indique que les vecteurs sont très similaires.
Étape suivante
- Découvrez comment effectuer une recherche vectorielle en recherchant le k-plus proche voisin.
- Découvrez comment exporter des embeddings vers Vertex AI Vector Search.
- Apprenez-en plus sur les fonctions GoogleSQL
COSINE_DISTANCE()
,EUCLIDEAN_DISTANCE()
etDOT_PRODUCT()
. - Apprenez-en davantage sur les fonctions PostgreSQL
spanner.cosine_distance()
,spanner.euclidean_distance(), and spanner.dot_product()
.