Cette page explique comment choisir parmi les fonctions de distance vectorielle fournies. dans Spanner pour mesurer la similarité entre les représentations vectorielles continues.
Après avoir généré des représentations vectorielles continues vos données Spanner, vous pouvez effectuer une recherche de similarités à l'aide d'un vecteur des fonctions de distance. 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 magnitudes de vecteur correspondantes. | \(a_1b_1+a_2b_2+...+a_nb_n\) \(=|a||b|cos(\theta)\) | Augmentations |
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 toutes vos représentations vectorielles continues sont normalisées ou non, vous pouvez déterminer la mesure de similarité à utiliser pour trouver la similarité. Un modèle normalisé la représentation vectorielle continue de vecteur a une magnitude (longueur) exactement égale à 1,0.
De plus, si vous savez avec quelle fonction de distance votre modèle a été entraîné, utiliser cette fonction de distance pour mesurer la similarité entre vos vecteurs représentations vectorielles continues.
Données normalisées
Si vous disposez d'un ensemble de données dans lequel toutes les représentations vectorielles continues sont normalisées, les trois
fournissent les mêmes résultats de recherche sémantiques. Concrètement, même si chaque
renvoie une valeur différente, ces valeurs trient de la même manière. Quand ?
représentations vectorielles continues sont normalisées, DOT_PRODUCT()
est généralement la plus performante en termes de calcul
efficace, 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 dans lequel les représentations vectorielles continues ne sont pas normalisées,
l'utilisation de DOT_PRODUCT()
comme distance n'est pas mathématiquement correcte
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 pouvez effectuer des tests avec COSINE_DISTANCE()
ou EUCLIDEAN_DISTANCE()
pour déterminer la solution 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 -1
à 1
. 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 trouvant le voisin k le plus proche.
- Découvrez comment exporter des représentations vectorielles continues vers Vertex AI Vector Search.
- Apprenez-en plus sur les fonctions GoogleSQL
COSINE_DISTANCE()
,EUCLIDEAN_DISTANCE()
etDOT_PRODUCT()
. - Apprenez-en plus sur les fonctions PostgreSQL
spanner.cosine_distance()
,spanner.euclidean_distance(), and spanner.dot_product()
.