Une réponse sûre d’elle, et fausse
Un nouvel employé demande à un assistant conversationnel les horaires du dimanche. La réponse arrive aussitôt, polie et sûre d’elle. Les horaires sont faux.
Rien n’a planté. Le modèle a fait exactement ce pour quoi il est construit. Cette leçon montre ce que c’est, avec un modèle assez petit pour le suivre à la main.
À la fin de cette leçon
Remarque
Je peux expliquer comment un modèle de langage choisit le mot suivant et où il se trompe.
Mots clés
| Mot | Ce que ça veut dire | Exemple |
|---|---|---|
| Modèle de langage | un programme qui donne la probabilité du jeton suivant | |
| Jeton | un morceau de texte que traite le modèle, un mot ou un bout de mot | token |
| Probabilité | à quel point une chose est probable, de 0 à 1 | |
| Bigramme | une paire de jetons côte à côte | le magasin |
| Texte d’entraînement | le texte dont le modèle apprend | |
| Réponse inventée | un texte fluide mais faux, qu’on appelle aussi hallucination |
Les cellules que les étudiants remplissent restent vides dans cet aperçu.
Le texte devient des jetons
Un modèle ne lit pas les lettres comme vous. Il découpe d’abord le texte en jetons. Ceux d’un grand modèle sont des mots courants et des morceaux de mots rares, souvent avec l’espace collée.
Notre petit modèle fait simple. Il passe tout en minuscules, traite le point comme un jeton et coupe aux espaces.
Découper une phrase en jetons
phrase = "Le magasin ouvre à neuf heures. Le magasin ferme à dix-neuf heures."
# En minuscules, et le point devient un jeton à lui seul.
jetons = phrase.lower().replace(".", " .").split()
print(jetons)
print(len(jetons), "jetons")
# Ajoutez une phrase à vous. Combien de jetons maintenant ?
Des comptes aux probabilités du mot suivant
Un modèle bigramme n’apprend qu’une chose : quel jeton suit tel autre. On parcourt le texte d’entraînement et on compte chaque paire de voisins.
Pour les probabilités après un mot, on divise chaque compte par le nombre de fois où ce mot a été suivi. bigram.py le fait pour le mot anglais « the », l’article « le », dans un court texte anglais sur un loueur de vélos.
Compter ce qui suit le mot the
docker exec jupyter python3 steps/bigram.pyAffiché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.
Exemple travaillé : après le mot the
| Jeton suivant | Compte | Probabilité |
|---|---|---|
| shop, le magasin | 3 | 3 / 9 = 0,33 |
| desk, le comptoir | 2 | 2 / 9 = 0,22 |
| hour, l’heure | 1 | 1 / 9 = 0,11 |
| bikes, customer, door | 1 chacun | 0,11 chacun |
| Total | 9 | 1,00, à l’arrondi près |
Les cellules que les étudiants remplissent restent vides dans cet aperçu.
Compter vous-même le mot suivant
# Compter ce qui suit un mot dans un court texte.
texte = "le bus est en retard . le bus est plein . le train est en retard ."
mots = texte.split()
mot = "est"
comptes = {}
total = 0
for n in range(len(mots) - 1):
if mots[n] == mot:
suivant = mots[n + 1]
if suivant in comptes:
comptes[suivant] = comptes[suivant] + 1
else:
comptes[suivant] = 1
total = total + 1
for suivant in comptes:
print(mot, suivant, comptes[suivant], "sur", total)
# Mettez mot à "le". Quel mot suit le plus souvent ?
Écrire, c’est choisir le jeton suivant encore
Pour écrire, le modèle choisit un jeton suivant, souvent au hasard selon les probabilités. Puis il recommence depuis ce jeton, encore et encore.
Rien dans cette boucle ne vérifie que la phrase est vraie. Un grand modèle est un réseau de neurones qui regarde des milliers de jetons précédents, pas un seul. Il apprend sur une masse énorme de texte, mais il choisit toujours des jetons probables.
Écrire quatre phrases à partir des comptes
docker exec jupyter python3 steps/generate.pyAffiché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 des faits et les rapporte. Il produit des jetons probables. Quand les mots probables sont aussi vrais, la réponse est juste. Sinon, elle est fausse avec la même assurance : vérifiez tout ce qui compte.
Le texte d’entraînement décide du probable
Un modèle ne peut que répéter les motifs de son texte d’entraînement. Notre texte dit « the shop » trois fois : le modèle tend vers « shop » quel que soit le sujet.
Un grand modèle fait de même avec les gens. Si son texte associe surtout un métier à un sexe, ou un pays à un délit, il le répète. C’est un biais venu des données, souvent invisible dans une seule réponse.
Comment vérifier une réponse
Traitez une réponse comme le brouillon d’un rédacteur rapide qui ne vérifie jamais. Demandez d’où vient un fait, puis ouvrez cette source vous-même. Une source qui n’existe pas est un signal d’alerte.
Refaites tout calcul. Posez la même question autrement et comparez. Ne collez jamais de données privées, comme des noms de clients, sauf si votre organisation autorise cet outil pour cela.
Pour aller plus loin
Copiez le texte de generate.py dans une cellule du carnet. Faites regarder au modèle deux mots précédents au lieu d’un : comptez quel mot suit chaque paire, comme « the shop ».
Générez quatre phrases avec la même graine. Sont-elles plus proches du texte d’entraînement ? Expliquez pourquoi un modèle qui regarde plus loin écrit mieux, et peut pourtant encore inventer.