Un modèle devine la suite
Un modèle de langage est un programme qui écrit en devinant ce qui vient ensuite. Votre téléphone en fait une petite version quand il propose le mot suivant d’un message.
Cela compte, car toute fonction bâtie sur un modèle hérite de cette devinette. Une fois le principe compris, ses réponses étranges deviennent logiques.
À la fin de cette leçon
Remarque
Je peux expliquer comment un modèle de langage produit du texte, sans les mathématiques.
Mots clés
| Mot | Ce que ça veut dire |
|---|---|
| Modèle | un programme qui a appris des motifs dans une énorme quantité de texte |
| Consigne | le texte que vous envoyez à un modèle |
| Jeton | un petit morceau de texte, souvent un mot ou une partie de mot |
| Contexte | tout le texte que le modèle voit pour une réponse |
| Température | un réglage qui rend la devinette plus ou moins variée |
Les cellules que les étudiants remplissent restent vides dans cet aperçu.
Un modèle écrit un jeton à la fois
Un modèle ne prépare pas une réponse entière. Il lit votre consigne, devine le jeton suivant, l’ajoute, puis devine encore.
Il recommence jusqu’à la fin de la réponse. Chaque jeton est choisi d’après tout le texte écrit jusque-là, le contexte.
Exemple travaillé : le mot suivant
| Le texte jusque-là | Mot suivant | Vu sur 10 |
|---|---|---|
| Le chat dort sur le | canapé | 6 |
| Le chat dort sur le | tapis | 3 |
| Le chat dort sur le | toit | 1 |
Les cellules que les étudiants remplissent restent vides dans cet aperçu.
Demander le mot suivant
docker exec -w /home/node/project agent node -e "const u=(process.env.AI_URL||'http://ai:4000')+'/v1/chat/completions';const poster=(m,t,x)=>fetch(u,{method:'POST',headers:{'content-type':'application/json',authorization:'Bearer lab'},body:JSON.stringify({model:'lab',messages:[{role:'user',content:m}],max_tokens:t,temperature:x})}).then(r=>r.json());poster('Terminez la phrase avec un seul mot et rien d’autre : Le chat dort sur le',12,0.7).then(j=>console.log('Modèle : '+j.choices[0].message.content)).catch(e=>console.log('Exemple enregistré (aucun modèle n’a répondu) : canapé'))"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.
La même consigne peut donner des réponses différentes
Le modèle donne à chaque jeton possible une chance, puis en tire un. La température règle l’audace du tirage. Une température basse choisit presque toujours le jeton le plus probable. Une haute choisit plus souvent des jetons rares.
Un modèle n’est donc pas une calculatrice. Posez deux fois la question et vous pouvez obtenir deux réponses.
Poser deux fois la même consigne
docker exec -w /home/node/project agent node -e "const u=(process.env.AI_URL||'http://ai:4000')+'/v1/chat/completions';const poster=(m,t,x)=>fetch(u,{method:'POST',headers:{'content-type':'application/json',authorization:'Bearer lab'},body:JSON.stringify({model:'lab',messages:[{role:'user',content:m}],max_tokens:t,temperature:x})}).then(r=>r.json());const s=['canapé','tapis'];(async()=>{for(let i=0;i<2;i++){let t;try{const j=await poster('Terminez la phrase avec un seul mot et rien d’autre : Le chat dort sur le',12,1);t='Modèle : '+j.choices[0].message.content}catch(e){t='Exemple enregistré (aucun modèle n’a répondu) : '+s[i]}console.log('Essai '+(i+1)+' : '+t)}})()"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.
Probable ne veut pas dire vrai
Le modèle a appris sur des textes, donc il écrit bien ce qui sonne juste. Il ne peut pas consulter un fait. Si une phrase fausse ressemble à une phrase probable, il peut l’écrire d’une voix calme et sûre.
Votre rôle de développeur est de vérifier ce qui compte.
Poser une question sans réponse possible
docker exec -w /home/node/project agent node -e "const u=(process.env.AI_URL||'http://ai:4000')+'/v1/chat/completions';const poster=(m,t,x)=>fetch(u,{method:'POST',headers:{'content-type':'application/json',authorization:'Bearer lab'},body:JSON.stringify({model:'lab',messages:[{role:'user',content:m}],max_tokens:t,temperature:x})}).then(r=>r.json());poster('Comment s’appelle mon chat ? Répondez par une phrase courte.',40,0.7).then(j=>console.log('Modèle : '+j.choices[0].message.content)).catch(e=>console.log('Exemple enregistré (aucun modèle n’a répondu) : Je ne connais pas le nom de votre chat.'))"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 de gens pensent qu’un modèle cherche les faits, comme un moteur de recherche. Ce n’est pas le cas. Il prolonge un texte avec des jetons probables. Ne croyez une réponse qu’après l’avoir comparée à autre chose.
Aller plus loin : un petit modèle
Le devoir est un tout petit modèle de langage : une table de comptes et une règle de choix. Un vrai modèle suit la même idée. Sa table est bien plus grande, bâtie sur bien plus de texte, et il regarde une part bien plus large du contexte.
Ajoutez quelques mots et quelques comptes de votre choix à la table, puis regardez le texte écrit.