Comment savoir si deux textes se ressemblent ?
La similarité cosinus mesure à quel point deux textes se ressemblent, en comparant leurs comptes de mots. Le résultat est un nombre entre 0 et 1. Les moteurs de recherche, les détecteurs de doublons et les systèmes de conseil de lecture s’en servent.
La bibliothèque universitaire veut retrouver, parmi 2 000 fiches, celles qui ressemblent à la question d’un étudiant. Il lui faut une mesure que le programme calcule.
À la fin de cette leçon
Remarque
Je peux mesurer la ressemblance entre deux textes avec la similarité cosinus.
Mots clés
| Mot | Ce que ça veut dire | Exemple |
|---|---|---|
| Vecteur | une liste de nombres, ici un compte par mot | [3, 4] |
| Produit scalaire | la somme des produits, position par position | |
| Norme | la longueur d’un vecteur | |
| Similarité cosinus | le produit scalaire divisé par les deux normes | |
| Vocabulaire commun | la liste de mots qui donne les positions du vecteur |
Les cellules que les étudiants remplissent restent vides dans cet aperçu.
Un texte devient une liste de nombres
Pour comparer deux textes, on choisit d’abord un vocabulaire commun, par exemple « stage » et « repas ». Chaque mot a une position fixe.
Le vecteur d’un texte contient le compte de chaque mot à sa position. Deux textes comparés ont toujours le même vocabulaire, donc des vecteurs de même taille.
Exemple travaillé : trois textes en vecteurs
| Texte | Fois « stage » | Fois « repas » | Vecteur |
|---|---|---|---|
| Fiche A, sur les stages et les repas | 3 | 4 | [3, 4] |
| Fiche B, qui parle un peu plus de stages | 4 | 3 | [4, 3] |
| Fiche C, qui parle seulement de repas | 0 | 5 | [0, 5] |
Les cellules que les étudiants remplissent restent vides dans cet aperçu.
Le produit scalaire mesure ce qui est commun
Le produit scalaire multiplie les deux vecteurs position par position, puis additionne. Pour [3, 4] et [4, 3], on obtient 3 × 4 + 4 × 3 = 24.
Il est grand quand les mêmes mots sont fréquents dans les deux textes. Il vaut 0 quand ils n’ont aucun mot en commun.
Calculer un produit scalaire et une norme
docker exec jupyter python3 -c 'print(3 * 4 + 4 * 3, (3 ** 2 + 4 ** 2) ** 0.5)'Affichée ici, non exécutée. Créez un compte gratuit pour appuyer sur Exécuter et la saisir dans le terminal de votre propre labo.
Le cosinus compare la direction, pas la longueur
Un long texte a des comptes plus grands qu’un court, sans parler d’autre chose. Le produit scalaire seul le favoriserait.
La similarité cosinus divise donc par la norme de chaque vecteur, sa longueur : racine de la somme des carrés. Le résultat va de 0, aucun mot en commun, à 1, les mêmes proportions de mots.
Exemple travaillé : trois comparaisons
| Paire | Produit scalaire | Normes | Cosinus |
|---|---|---|---|
| A [3, 4] et B [4, 3] | 24 | 5 et 5 | 24 / 25 = 0,96 |
| A [3, 4] et A doublé [6, 8] | 50 | 5 et 10 | 50 / 50 = 1 |
| A [3, 4] et C [0, 5] | 20 | 5 et 5 | 20 / 25 = 0,8 |
Les cellules que les étudiants remplissent restent vides dans cet aperçu.
Une erreur fréquente
Attention
Beaucoup pensent que deux textes de longueurs très différentes ne peuvent pas se ressembler. Le cosinus ne regarde que les proportions. Un résumé et le texte complet ont un cosinus proche de 1 s’ils parlent des mêmes choses dans les mêmes proportions.
Calculer un cosinus pas à pas
a = [3, 4]
b = [4, 3]
produit = 0
for n in range(len(a)):
produit = produit + a[n] * b[n]
norme_a = (a[0] ** 2 + a[1] ** 2) ** 0.5
norme_b = (b[0] ** 2 + b[1] ** 2) ** 0.5
print(produit, norme_a, norme_b)
print(produit / (norme_a * norme_b))
# Remplacez b par [6, 8], puis relancez. Que devient le cosinus ?
Les trois cosinus du tableau
docker exec jupyter python3 -c 'print(round(24 / 25, 2), round(50 / (5 * 10), 2), round(20 / (5 * 5), 2))'Affichée ici, non exécutée. Créez un compte gratuit pour appuyer sur Exécuter et la saisir dans le terminal de votre propre labo.
Pour aller plus loin
Dans un carnet de JupyterLab, écrivez trois courtes fiches sur trois sujets de votre choix. Calculez les trois cosinus deux à deux avec vos fonctions du devoir.
Les sujets proches ont-ils un cosinus plus grand ? Ajoutez des mots vides communs aux trois fiches : que deviennent les cosinus ?