Plus facile à lire avec un fond crème, une teinte, plus de contraste ou un texte plus grand ? Choisissez vos couleurs et votre texte, une fois pour toutes les pages.

Leçon gratuite

Mesurer la ressemblance entre deux textes

Après cette leçon: Je peux mesurer la ressemblance entre deux textes avec la similarité cosinus.

Leçon de 55 min2 commandesLab JupyterLab de science des données : pandas, Matplotlib et scikit-learn dans le navigateur

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

MotCe que ça veut direExemple
Vecteurune liste de nombres, ici un compte par mot[3, 4]
Produit scalairela somme des produits, position par position
Normela longueur d’un vecteur
Similarité cosinusle produit scalaire divisé par les deux normes
Vocabulaire communla 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

TexteFois « stage »Fois « repas »Vecteur
Fiche A, sur les stages et les repas34[3, 4]
Fiche B, qui parle un peu plus de stages43[4, 3]
Fiche C, qui parle seulement de repas05[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

Commande
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

PaireProduit scalaireNormesCosinus
A [3, 4] et B [4, 3]245 et 524 / 25 = 0,96
A [3, 4] et A doublé [6, 8]505 et 1050 / 50 = 1
A [3, 4] et C [0, 5]205 et 520 / 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

Code: python
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

Commande
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 ?

À propos de ce labo et de sa source: Lab JupyterLab de science des données : pandas, Matplotlib et scikit-learn dans le navigateur

Vous enseignez à une classe ? Proposez ce module à vos étudiants avec un guide de l'enseignant, des devoirs corrigés et un laboratoire pour chaque étudiant.