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 de vecteur fournies dans Spanner pour mesurer la similarité entre les représentations vectorielles continues.

Après avoir généré des représentations vectorielles continues à partir de vos données Spanner, vous pouvez effectuer une recherche de similarités à l'aide de fonctions de distance vectorielles. 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). Elle 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é. Une représentation vectorielle continue normalisée a une magnitude (longueur) exactement égale à 1,0.

En outre, 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 toutes les représentations vectorielles continues sont normalisées, 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 extrêmement sensible aux performances, DOT_PRODUCT() peut vous aider à les ajuster.

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, 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 préféré, la fonction COSINE_DISTANCE() ou EUCLIDEAN_DISTANCE() produit des résultats de recherche subjectivement meilleurs que l'autre fonction. Il peut être nécessaire de tester COSINE_DISTANCE() ou EUCLIDEAN_DISTANCE() pour déterminer la meilleure option pour votre cas d'utilisation.

Je ne sais pas si les données sont normalisées ou non normalisées

Si vous ne savez pas si vos données sont 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 proche de 0 indique que les vecteurs sont très similaires.

Étapes suivantes