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

Plongements de mots (embeddings) et limites

Après cette leçon: Je peux expliquer comment un mot devient un vecteur et où un modèle de langage se trompe.

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

Comment un mot devient-il un vecteur ?

Un plongement de mots, en anglais « word embedding », représente chaque mot par une liste de nombres. Des mots de sens proche reçoivent des listes proches. Les moteurs de recherche, les traducteurs et les assistants s’en servent pour comprendre ce que vous voulez dire, et pas seulement les mots exacts.

Ces modèles se trompent pourtant de façons précises. Savoir lesquelles vous permet de les utiliser sans vous laisser piéger.

À la fin de cette leçon

Remarque

Je peux expliquer comment un mot devient un vecteur et où un modèle de langage se trompe.

Mots clés

MotCe que ça veut direExemple
Plongementla liste de nombres qui représente un mot[9, 1]
Voisinle mot dont le vecteur est le plus proche
Attentionle poids que le modèle donne à chaque mot du contexte
Biaisune tendance injuste que le modèle a prise dans ses données
Hallucinationune réponse fluide mais inventée

Les cellules que les étudiants remplissent restent vides dans cet aperçu.

Des mots proches ont des vecteurs proches

Un sac de mots traite « pizza » et « salade » comme deux mots sans lien. Un plongement place chaque mot dans un espace de nombres, de sorte que les mots de sens proche soient voisins.

Le modèle apprend cela en lisant beaucoup de textes. Des mots qui apparaissent entourés des mêmes mots reçoivent des vecteurs proches. On compare ensuite avec le cosinus de la leçon précédente.

Exemple travaillé : quatre mots à deux nombres

MotVecteur (nourriture, études)Voisin le plus procheCosinus
pizza[9, 1]salade0,99
salade[8, 2]pizza0,99
cours[1, 9]examen0,99
examen[2, 8]cours0,99

Les cellules que les étudiants remplissent restent vides dans cet aperçu.

Chercher le voisin d’un mot

Code: python
vecteurs = {"pizza": [9, 1], "salade": [8, 2], "cours": [1, 9], "examen": [2, 8]}

def cosinus(a, b):
    produit = a[0] * b[0] + a[1] * b[1]
    return produit / ((a[0] ** 2 + a[1] ** 2) ** 0.5 * (b[0] ** 2 + b[1] ** 2) ** 0.5)

mot = "pizza"
for autre in vecteurs:
    if autre != mot:
        print(autre, round(cosinus(vecteurs[mot], vecteurs[autre]), 2))
# Changez mot en "examen", puis relancez. Quel voisin gagne ?

On peut calculer avec les vecteurs de mots

Comme les mots sont des listes de nombres, on peut les additionner et les soustraire. Une analogie se calcule ainsi : « homme est à roi ce que femme est à ? ».

On prend le vecteur de roi, on retire celui de homme, on ajoute celui de femme. Puis on cherche le mot le plus proche du résultat.

Faire le calcul d’une analogie

Commande
docker exec jupyter python3 -c 'print(9 - 1 + 1, 0 - 0 + 8, 5 - 5 + 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.

L’attention pèse chaque mot du contexte

Pour choisir le mot suivant, un modèle de langage ne lit pas la phrase d’un bloc. Pour chaque mot, il donne un poids à chaque autre mot du contexte. C’est l’attention.

Dans « La bibliothèque est fermée car elle est en travaux », le mot « elle » regarde surtout « bibliothèque ». Ces poids s’additionnent à 1.

Exemple : les poids de « elle » (valeurs inventées)

Mot du contextePoids donné par « elle »
bibliothèque0,6
fermée0,2
car0,1
est0,1
Total1

Les cellules que les étudiants remplissent restent vides dans cet aperçu.

Un modèle de langage prédit le mot suivant

Un modèle de langage prédit le mot suivant d’après les mots qui précèdent. Le plus petit possible compte, dans un texte, quel mot suit quel mot.

Le script du labo le fait sur un court texte anglais, celui d’une boutique de vélos. Il affiche, pour le mot « the », la part de chaque mot qui le suit.

Un modèle de langage qui compte les paires

Commande
docker exec jupyter python3 steps/bigram.py

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.

Une erreur fréquente

Attention

Beaucoup pensent qu’un modèle de langage cherche la réponse dans une base de faits. Il prédit le mot suivant le plus probable d’après ses textes. Une phrase fluide n’est pas une phrase vraie : vérifiez toujours un fait important.

Un modèle reprend les préjugés de ses textes

Un modèle apprend les associations du texte qui l’a nourri. Si ce texte relie souvent un métier à un genre, le modèle fait de même.

C’est un biais. Il vient des données, pas d’une intention. Pour le trouver, comparez les voisins d’un mot pour plusieurs groupes de personnes.

Un modèle peut inventer une réponse fausse

Le modèle choisit des mots probables, sans savoir si le résultat est vrai. Quand il manque de données, il peut inventer un titre de livre ou une date qui sonnent juste. On parle d’hallucination.

Le script suivant l’illustre : il écrit des phrases mot à mot avec les comptes de paires. Elles ont l’air de phrases, et plusieurs ne veulent rien dire.

Écrire des phrases mot à mot

Commande
docker exec jupyter python3 steps/generate.py

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, ajoutez dix mots de votre choix au dictionnaire de vecteurs du devoir, avec trois nombres chacun. Cherchez leurs voisins.

Vos nombres sont-ils bien choisis ? Un vecteur fait à la main reflète vos propres idées : que cela dit-il d’un vecteur appris sur des textes ?

À 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.