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 | Relation avec l'augmentation de la similarité |
---|---|---|---|
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 cosinus soustrait la similarité cosinus de 1 (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|}\) | Diminue |
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}\) | Diminue |
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 embeddings vectoriels.
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. En substance, bien que chaque fonction renvoie une valeur différente, ces valeurs sont triées 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 est très sensible aux performances, DOT_PRODUCT()
peut vous aider à les optimiser.
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. Selon la manière dont les représentations vectorielles continues ont été générées et le type de recherche privilégié, la fonction COSINE_DISTANCE()
ou EUCLIDEAN_DISTANCE()
produit des résultats de recherche 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.
Vous ne savez pas si les données sont normalisées ou non.
Si vous ne savez pas si vos données sont normalisées et que vous souhaitez utiliser DOT_PRODUCT()
, nous vous recommandons d'utiliser COSINE_DISTANCE()
à la place.
COSINE_DISTANCE()
est semblable à DOT_PRODUCT()
avec une normalisation intégrée.
La similarité mesurée à l'aide de COSINE_DISTANCE()
varie de 0
à 2
. Un résultat 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.
- En savoir plus sur les fonctions
COSINE_DISTANCE()
,EUCLIDEAN_DISTANCE()
etDOT_PRODUCT()
de GoogleSQL - En savoir plus sur les fonctions
spanner.cosine_distance()
,spanner.euclidean_distance(), and spanner.dot_product()
de PostgreSQL