← Retour

Mesures de similarité vectorielle : L2, cosinus et produit scalaire

Faites glisser le point de requête et changez d’unité de mesure pour observer comment les voisins les plus proches évoluent.

Les 5 plus proches voisins(plus bas = plus proche)

#1P1842.1
#2P1074.0
#3P17111.6
#4P14122.8
#5P13126.9
Mesure de similarité
L2
Valeur affichée
Distance euclidienne

L2 (Distance euclidienne)

Mesure la distance en ligne droite entre deux points. Les cercles concentriques indiquent des zones équidistantes : tous les points situés sur un même cercle sont à égale « distance » de la requête.

Qu’est-ce qu’une métrique ?

Une métrique est simplement une fonction qui prend deux vecteurs et renvoie un seul nombre indiquant à quel point ils sont similaires (ou différents). La recherche vectorielle consiste, fondamentalement, à « trouver les K vecteurs présentant le meilleur score métrique par rapport à ma requête ». Tout le reste — index, clusters, graphes — n’est qu’une question d’organisation visant à éviter de calculer ce score pour chaque vecteur de la base de données.

La métrique que vous choisissez définit ce que signifie « similaire » pour vos données. Deux représentations peuvent être « proches » selon une métrique et « éloignées » selon une autre — mêmes données, réponse différente. C’est pourquoi ce choix s’effectue avant même que vous ne créiez un index.

Les trois que vous rencontrerez dans la pratique

  • L2 (Euclidienne) : distance en ligne droite. Plus la valeur est faible, mieux c’est. À utiliser lorsque la direction et l’amplitude importent toutes deux — représentations d’images, coordonnées géographiques, mesures brutes de capteurs. Valeur par défaut pour la plupart des modèles de vision par ordinateur.
  • Cosinus : angle entre deux vecteurs, sans tenir compte de leur longueur. Plus la valeur est élevée, mieux c’est. À utiliser lorsque seule la direction importe — plongements de texte (BERT, OpenAI, etc.), systèmes de recommandation où la « popularité » des vecteurs ne doit pas prévaloir.
  • Inner Product (IP) : produit scalaire, qui prend en compte à la fois l’alignement ET la magnitude. Plus la valeur est élevée, mieux c’est. À utiliser avec des modèles qui effectuent explicitement une normalisation pour l’ IP (DPR, de nombreux modèles de récupération). Mathématiquement identique au cosinus lorsque les vecteurs sont de longueur unitaire.

Deux règles pratiques

  • Adaptez la métrique au modèle. Les modèles d’embedding sont entraînés en fonction d’une métrique spécifique. En utiliser une autre au moment de la recherche réduira considérablement votre recall sans que vous vous en rendiez compte. Vérifiez la fiche du modèle avant de faire votre choix.
  • Restez cohérent. Tous les vecteurs d’une collection doivent utiliser la même métrique. Vous ne pouvez pas les mélanger au sein d’un même index, et vous ne pouvez pas comparer de manière pertinente les scores entre différentes métriques.

Essayez ceci : faites glisser le point de requête près de l’origine et basculez entre « Cosine » et « L2 ». Observez comment « Cosine » ne s’intéresse qu’à la « direction » vers laquelle pointe la requête — des points situés de l’autre côté de l’origine peuvent être « proches » avec « L2 », mais « éloignés » avec « Cosine ». Cette illustration résume tout le concept.

Définition du type de métrique dans Milvus

Dans « Milvus », la métrique est définie par index via « metric_type » — L2, IP, ou COSINE pour les vecteurs denses — lors de la création de l’index. Chaque recherche effectuée sur cette collection utilise alors la même fonction que celle que vous venez d’utiliser ci-dessus. La règle la plus fiable : utilisez la métrique avec laquelle votre modèle d’embedding a été entraîné, celle-ci étant indiquée sur pratiquement toutes les fiches de modèle.

Deux raccourcis utiles. La plupart des API modernes d’intégration de texte (OpenAI, Cohere, Voyage et la plupart des transformateurs de phrases) produisent des vecteurs destinés à la similarité cosinus. Et si vos vecteurs sont normalisés à une longueur unitaire, le cosinus et le produit scalaire renvoient des classements identiques — ainsi, IP sur des vecteurs normalisés est une alternative courante et légèrement moins coûteuse à COSINE.

Foire aux questions

Quelle métrique de similarité dois-je utiliser pour l’ OpenAI e ou d’autres représentations de texte ?

Utilisez la similarité cosinus (metric_type COSINE dans Milvus). Presque tous les modèles modernes d’embedding de texte — y compris la famille text-embedding-3 de OpenAI — sont entraînés pour la similarité cosinus. Comme les embeddings OpenAI sont normalisés à une longueur unitaire, le produit scalaire (IP) donne des classements identiques et constitue une excellente alternative.

Quelle est la différence entre la similarité cosinus et le produit scalaire ?

La similarité cosinus ne mesure que l’angle entre deux vecteurs, sans tenir compte de leurs longueurs. Le produit scalaire (produit point) prend en compte à la fois l’alignement et la magnitude ; ainsi, un vecteur plus long pointant dans la même direction obtient un score plus élevé. Sur des vecteurs normalisés à l’unité, les deux sont mathématiquement équivalents.

Puis-je modifier le type de mesure après avoir créé un index dans « Milvus » ?

Non. La métrique est intégrée à l’index lors de sa création. Pour changer de métrique, il faut supprimer l’index et le recréer avec un nouveau `metric_type`. Les scores issus de métriques différentes ne sont pas comparables entre eux ; il ne faut donc pas les mélanger lors du post-traitement des résultats.

Le choix de la métrique a-t-il une incidence sur le rappel ou la vitesse de recherche ?

La vitesse est pratiquement identique : « L2 », « IP » et « cosine » nécessitent tous un seul passage sur le vecteur. C’est le rappel qui fait la différence : effectuer une recherche avec une métrique différente de celle pour laquelle votre modèle d’embedding a été entraîné dégrade silencieusement la qualité des résultats, souvent de manière spectaculaire.

Pour aller plus loin : consultez la documentation sur les mesures de similarité pour obtenir la liste complète des mesures prises en charge par « Milvus », notamment les mesures de Hamming et de Jaccard pour les vecteurs binaires et BM25 pour la recherche en texte intégral.

Continuez à explorer