Choisissez parmi les fonctions de distance de vecteur pour mesurer la similarité des représentations vectorielles continues

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.

FonctionDescriptionFormulaLien 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