HyperAIHyperAI

Command Palette

Search for a command to run...

Cosine Similarity Explained: Pourquoi elle domine le NLP et comment elle capte la sémantique réelle

La similarité cosinus est une métrique largement utilisée en traitement du langage naturel (NLP) pour des tâches telles que la recherche sémantique ou la comparaison de documents. Bien qu’elle soit souvent présentée de manière simplifiée dans les cours introductifs, son fondement mathématique reste mal compris par de nombreux scientifiques des données. Cet article vise à démystifier cette métrique en expliquant son intuition mathématique, en illustrant son fonctionnement à l’aide d’exemples pratiques en Python, et en comparant ses avantages par rapport à d’autres mesures comme la distance euclidienne. La similarité cosinus repose sur la fonction cosinus, familière des cours de mathématiques. Cette fonction, définie sur l’intervalle [0, 2π], atteint son maximum à 0 et 2π (valeur 1), son minimum à π (valeur –1), et s’annule à π/2 et 3π/2. En géométrie vectorielle, l’angle entre deux vecteurs correspond à la variable x dans cette fonction. Ainsi, le cosinus de cet angle indique la direction relative des vecteurs : une valeur proche de 1 signifie qu’ils pointent dans la même direction (haute similarité), –1 indique des directions opposées (dissimilarité maximale), et 0 correspond à des vecteurs orthogonaux (absence de lien sémantique). Mathématiquement, la similarité cosinus entre deux vecteurs U et V de même dimension est donnée par le rapport entre leur produit scalaire et le produit de leurs normes : cos(θ) = (U·V) / (||U|| × ||V||). Cette formule découle de la règle du cosinus, qui relie les côtés d’un triangle aux angles entre eux. Elle est invariante par rapport à la taille des vecteurs, ce qui signifie qu’elle mesure uniquement la direction, pas l’amplitude. Cette propriété est cruciale en NLP, où des textes de longueurs différentes peuvent avoir des significations très proches. En comparaison, la distance euclidienne, bien qu’elle mesure aussi la dissimilarité entre deux vecteurs, dépend de leurs magnitudes. Deux documents longs mais sémantiquement proches peuvent avoir une grande distance euclidienne, tandis que deux courtes phrases très différentes peuvent être proches selon cette métrique. La similarité cosinus évite ce biais en se concentrant sur la direction des vecteurs. Dans une expérience pratique, deux modèles d’embeddings sont comparés : all-MiniLM-L6-v2, qui ne capture pas la polarité sémantique, et distilbert-base-uncased-finetuned-sst-2-english, entraîné sur des données de sentiment et donc sensible aux oppositions de sens. Les résultats montrent que pour les mots « movie » et « film », les deux modèles donnent une similarité élevée (~0.84 et ~0.96), comme attendu. Pour « good » et « bad », le premier modèle donne une similarité positive (0.59), tandis que le second retourne une valeur négative (–0.34), reflétant correctement leur opposition sémantique. Ces résultats soulignent que l’interprétation de la similarité cosinus dépend fortement du modèle d’embedding utilisé. Si celui-ci encode la polarité (comme dans les modèles fine-tunés pour la classification de sentiment), les valeurs négatives deviennent significatives. Sinon, la métrique se limite à mesurer la similarité sémantique sans tenir compte des oppositions. En conclusion, la similarité cosinus est une mesure puissante en NLP car elle se concentre sur la direction des vecteurs, indépendamment de leur longueur. Elle est particulièrement adaptée aux tâches où la sémantique et la direction relative sont plus importantes que la magnitude. Toutefois, son interprétation doit tenir compte des capacités du modèle d’embedding utilisé, notamment sa capacité à représenter la polarité sémantique. Une bonne compréhension de cette métrique permet d’optimiser les applications de recherche sémantique, de clustering ou de recommandation.

Liens associés

Towards Data ScienceTowards Data Science