Calculateur de similarité cosinus TF-IDF — note deux textes de 0 à 1
Colle deux textes et obtiens la similarité cosinus de leurs vecteurs TF-IDF lissés (N=2) sur une échelle de 0 à 1. Le vocabulaire total, le nombre de termes communs et la norme de chaque vecteur figurent sur un seul panneau, avec des interrupteurs pour ignorer la casse et pour le TF sous-linéaire. Jusqu'à 20 000 caractères par document.
💡 À propos de cet outil
Quand on implémente le classement d'un moteur de recherche ou qu'on vérifie le recouvrement entre deux articles, on veut souvent contrôler à la main si deux passages se ressemblent vraiment par la façon dont leurs mots se croisent. Avant de recourir à un modèle d'embeddings, on souhaite d'abord la similarité lexicale simple : c'est ce que fournit ce calculateur.
TF-IDF pondère chaque terme en multipliant sa fréquence dans le document (TF) par sa rareté entre les documents (IDF). Les mots fréquents et distinctifs pèsent davantage, tandis que ceux présents dans les deux documents sont escomptés. L'outil traite tes deux entrées comme deux documents, construit le vocabulaire commun, forme les vecteurs TF-IDF et renvoie la similarité cosinus à quatre décimales.
Avec seulement deux documents, l'IDF brute d'un mot partagé s'annule, donc l'outil utilise la même formule lissée que scikit-learn : IDF = ln((N+1)/(df+1)) + 1. Cela attribue un poids de 1,0 aux termes communs et environ 1,405 à ceux présents dans un seul document. Le vocabulaire total, le nombre de termes communs et les normes sont affichés à côté pour suivre comment le nombre s'est construit.
🧐 Questions fréquentes
Comment lire la valeur cosinus ? Plus elle est proche de 1, plus les vecteurs sont alignés et les textes similaires (angle 0°) ; 0 signifie qu'il n'y a aucun terme commun et qu'ils sont orthogonaux (angle 90°). Autour de 0,5 indique un recouvrement partiel du vocabulaire.
Pourquoi un lissage de +1 dans l'IDF ? Avec seulement deux documents, un mot présent dans les deux aurait une IDF brute nulle et perdrait tout son poids. Le lissage par défaut de scikit-learn (+1 au numérateur et au dénominateur, +1 à la fin) maintient un poids de 1,0 sur les termes communs pour que le calcul reste stable.
Que change l'activation du TF sous-linéaire ? Au lieu du décompte brut, la fréquence devient 1 + ln(tf), ce qui atténue l'effet d'un mot répété de nombreuses fois. Cela compte pour les textes longs où un terme revient beaucoup ; c'est l'option par défaut de scikit-learn.
Comment le CJK et les autres écritures sont-ils découpés ? Les caractères CJK (chinois, kana japonais, coréen) sont traités à raison d'un jeton par caractère. Les suites de lettres, chiffres, apostrophe, trait d'union et soulignement forment un seul mot. Aucune analyse morphologique n'est appliquée : utilise-le comme une mesure lexicale de proximité, de type sac de mots.
Sur quoi agit la normalisation de la casse ? Activée, les lettres ASCII sont mises en minuscules, si bien que « Cosine » et « cosine » comptent comme le même terme. Le CJK n'est pas affecté. Désactive-la quand tu dois distinguer les noms propres avec majuscule.
📚 Repères sur TF-IDF et le cosinus
Depuis sa proposition dans les années 1970, TF-IDF reste un socle du scoring en recherche plein texte. Le score par défaut d'Elasticsearch et de Lucene est BM25, une évolution de TF-IDF, mais l'idée de fond — fréquence multipliée par rareté — est la même. Examiner à la main un cosinus TF-IDF simple aide à comprendre pourquoi un classement de recherche sort dans un certain ordre.
La similarité cosinus ignore la longueur du vecteur et ne regarde que la direction, car le but est de comparer la « direction » du vocabulaire sans être faussé par la longueur de chaque texte. Un document long et un court peuvent obtenir un score élevé si la composition de leurs mots est similaire. L'outil affiche aussi la norme A et la norme B, pour voir en même temps la magnitude du vecteur TF-IDF de chaque document : l'accumulation de ses termes et de ses poids.