Choisissez parmi les fonctions de distance vectorielles 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 de vecteurs.

Après avoir généré des représentations vectorielles continues à partir de vos données Spanner, vous pouvez effectuer une recherche de similarité à l'aide des 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 cosinus soustrait la similarité cosinus d'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 de vecteurs 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.

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 le 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 faciliter le réglage des performances.

Données non normalisées

Si les représentations vectorielles continues ne sont pas normalisées dans votre ensemble de donné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 distance cosinus ou la fonction de distance euclidienne peuvent produire des résultats de recherche subjectivement meilleurs que l'autre fonction.

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 sont normalisées et que vous souhaitez utiliser DOT_PRODUCT(), nous vous recommandons d'utiliser plutôt COSINE_DISTANCE(). COSINE_DISTANCE() est semblable à DOT_PRODUCT() avec normalisation intégrée. La similarité mesurée à l'aide de COSINE_DISTANCE() varie de -1 à 1. Un résultat proche de 0 indique que les vecteurs sont très similaires.

Étapes suivantes