- Génération IA
- Posts
- ChatGPT décortiqué : du token à l'escargot, les secrets dévoilés
ChatGPT décortiqué : du token à l'escargot, les secrets dévoilés
Raisonnements, apprentissages, température : explorez les concepts clés derrière le phénomène conversationnel ChatGPT
Ah, les modèles de langage et leurs jargons : "tokens", "prédiction autorégressive", "prompts"... Entre escargots farfelus, exemples concrets et éclaircissements techniques, je vous invite (tranquillement à votre rythme 🐌) à découvrir ou approfondir quelques concepts clés derrière les grands modèles de langage (appelés LLM en anglais, pour “Large Langage Model”) comme ChatGPT, Gemini ou Claude.
C’est quoi un modèle de langage ?
Alors, pour faire simple : un modèle de langage, c’est un modèle qui prédit le mot suivant d’une phrase ou qui remplit les mots manquants d’une phrase.
On distingue deux grandes familles de modèles de langage. D’abord, les autorégressifs, tels que GPT. Ils prédisent le mot suivant en s'appuyant sur ceux qui viennent avant, ce qui les rend particulièrement adapté à la génération de texte :
Le Mont Saint-Michel est en _______
Ensuite, il y a les modèles dits bidirectionnels, comme BERT. Ils analysent la phrase entière, de gauche à droite et vice versa, pour remplir les “trous” :
Le Mont Saint _____ est en Normandie.
Remarque: On va surtout parler des premiers nommés.
Prenons un exemple concret et allons jouer dans le bac à sable d’OpenAI, créateur de ChatGPT (basé sur les modèles de langage “GPT”). Pour y accéder il faut te créer un compte sur le site d’OpenAi et aller sur le playground d’OpenAI avec le modèle text-davinci-003. Demandons-lui la suite de “Le Mont Saint-Michel est en...”
Ouf, il a bien placé le mont en Normandie (Je suis Normand, je précise…).
Ce qui est rigolo (il faut se mettre dans le mode “complete” du Playground), c'est qu'on peut voir les probabilités associées à chaque suggestion de mot. Le token (un terme plus technique pour désigner un mot ou une partie de mot) Norm se démarque nettement avec une probabilité de 60,64%. France arrive en deuxième avec 16,62%..
Essayons, pour voir, de mettre le mont en Bretagne : “Le Mont Saint-Michel est en bre...”
Et non, perdu ! Le débat est clos, Da Vinci (le nom du modèle utilisé ici) a définitivement tranché en faveur de la Normandie.
Remarquez la teinte de fond derrière chaque mot. Cette couleur nous donne un indice sur la probabilité du mot : le vert signale une haute probabilité, tandis que le rouge indique une faible probabilité. Les 2 tests que je viens de vous montrer ont été obtenus en utilisant un paramètre de température à 0. Ce choix fait en sorte que text-davinci-003 opte systématiquement pour la suggestion la plus probable, d'où la prédominance verte.
Mais, en ajustant la température à 1.15 par exemple, le paysage change. Les suggestions deviennent moins prévisibles, plus "rouges". Par exemple, le mot "construct" a été choisi alors qu'il avait seulement 0.59% de chances de l’être :
La température est un paramètre utilisé lors de la génération de texte par les modèles de langage. Elle régule le degré d'incertitude ou de variabilité des prédictions. À une température proche de 0, le modèle tend à choisir les mots les plus probables. Cela donne des résultats plus déterministes et souvent plus cohérents. À l'inverse, une température élevée pousse le modèle à prendre des libertés, explorant des choix de mots plus inattendus, introduisant plus de variété dans les résultats.
Le caractère autorégressif de GPT, qui prédit le prochain mot en se basant sur les précédents, combiné à une haute température, peut créer des trajectoires pour le moins surprenantes. C'est donc essentiel de bien calibrer la température selon l'effet recherché.
Intéressons-nous aux tokens. Je vous invite à explorer le tokenizer d'OpenAI. Testez-le avec la phrase “Le Mont Saint-Michel est en Normandie”.
Vous remarquerez que la phrase est segmentée en unités distinctes, appelées “tokens”. Un token représente une unité de texte. Cela peut être un mot entier, une partie d'un mot, de la ponctuation, des chiffres ...
Lors de l'entraînement d'un modèle de langage, une étape importante est la création d'un vocabulaire. Ce vocabulaire, de taille fixe (quelques dizaines de milliers pour les LLM), englobe tous les tokens que le modèle est capable de reconnaître et d'utiliser. Chaque token de ce vocabulaire possède un identifiant unique, facilitant ainsi son traitement distinct par le modèle. Dans notre exemple, avec le tokenizer de GPT-3, le token “ Mont” a l’ID 5575 :
Pourquoi privilégier les tokens plutôt que les mots ?
D’abord, pour des raisons techniques : plus vous augmentez la taille du vocabulaire, plus le modèle de langage aura de paramètres, ce qui le rend plus lourd et gourmand en ressources. En utilisant un ensemble limité de tokens, le modèle maintient un équilibre entre précision et performance.
Ensuite, les tokens permettent également de gérer finement certaines nuances linguistiques. Un mot peut avoir plusieurs formes ou être composé de multiples éléments. Prenons le mot "anticonstitutionnellement". Plutôt que d'avoir un token unique pour ce mot, il pourrait être décomposé en tokens plus petits comme "anti-", "constitution", "nel", et "ment". De cette manière, le modèle a l'opportunité d'apprendre séparément la signification et l'utilisation d’éléments comme "anti" et "constitution". Cela permet de gérer de nombreux mots et leurs variations sans avoir besoin d'un vocabulaire immense.
Enfin, face à un mot inconnu, un modèle basé sur les tokens ne sera pas complètement perdu. Il peut décomposer ce mot en tokens plus petits, qu'il connaît, pour en déduire une signification ou, au moins, le traiter de manière cohérente. Illustrons cela avec "génialissiiiiime” : il peut décomposer ce mot en tokens familiers tels que "génial" et "issime" et pourra comprendre le caractère positif et enthousiaste du mot, même s'il ne l’avait jamais vu auparavant.
Dois-je vraiment connaître tous ces détails ?
Ok, mais vous allez me dire :”Dois-je vraiment connaître tous ces détails ?” Heuuu, la réponse est non, peut-être pas, mais le suivant est essentiel ! Quand vous échangez avec ChatGPT ou Gemini, gardez à l'esprit la taille de leur "fenêtre contextuelle". C’est le nombre total de tokens que le modèle est capable de traiter, incluant à la fois la question posée ET la réponse générée.
Avec le modèle GPT-4 (8k), doté d'une capacité de 8 192 tokens, si votre question consomme 8 000 tokens, seulement 192 seront disponibles pour la réponse. Soyez conscient que ChatGPT a une 'mémoire' limitée et peut perdre des éléments des conversations précédentes. N'hésitez donc pas à lui rafraîchir la mémoire si nécessaire.
Bon, résumons : les modèles autorégressifs comme GPT prédisent le prochain token d’une séquence et ils ont une capacité limitée quant au nombre total de tokens qu'ils peuvent traiter à la fois.
Super, un modèle qui devine le prochain mot. Ouahhhhh ! C’est trop biennnn. Mais est-ce vraiment utile ?
DALL·E 3 qui n’a pas voulu écrire correctement la phrase “Tu sers à rien toi en fait ?“
Pas vraiment effectivement si on en reste là. Ce qui est important n'est pas tant la prédiction elle-même, mais ce que les modèles ont appris pour y parvenir.
Les modèles de langage, comme GPT, sont des réseaux de neurones profonds (des transformeurs pour être plus précis) avec des milliards de paramètres. Lors de leur entraînement, ils apprennent énormément de choses. Pas seulement sur le langage et sa structure. Non, ils comprennent qu'il existe des objets, que ces objets interagissent entre eux. Ils découvrent l'existence de pays, que ceux-ci ont des capitales, que Paris est la capitale de la France, que celle du Japon est Tokyo.. Et ils ne font pas que mémoriser : ils créent également une riche hiérarchie d'abstractions. C'est cette capacité à hiérarchiser et à abstraire qui leur permet de traiter des concepts plus complexes, d'aller au-delà du simple fait et d'entrer dans des domaines comme la résolution de problèmes ou l’analyse littéraire.
Pour atteindre ce niveau d'apprentissage, ces modèles sont formés sur d'énormes quantités de textes : des livres, des articles de Wikipédia, des forums, du code et bien d'autres sources. En absorbant tout cela, ils explorent et découvrent des structures linguistiques, des relations entre concepts et même des réalités sous-jacentes du monde qui nous entoure.. Cette accumulation d'informations est stockée dans le modèle, lui permettant d'avoir une vision étendue sur de nombreux sujets. Ceci-dit, il est important de souligner que cette "connaissance" est basée sur des motifs récurrents, des patterns dans les données d’entraînement et non sur une véritable compréhension.
Hm, hmmm … ok, c’est bien joli tout ça.
Mais, comment exploiter la connaissance des modèles de langage pour créer des applications comme ChatGPT, Gemini ou Claude ?
C'est lors de la phase dite de '“fine-tuning” (“réglage fin” en français) que la magie opère. Bien que pré-entraînés sur d'immenses corpus de textes, ces modèles nécessitent un affinement pour des tâches plus ciblées, allant de la classification à la reconnaissance d’entités nommées. ChatGPT et ses semblables, eux, sont fine-tunés pour suivre des instructions : répondre à des questions, résoudre des problèmes, traduire, résumer .... On pourrait parler d'instruction-tuning. L'objectif est d’aligner le modèle aux besoins concrets de l'utilisateur.
Pour vous faire une idée précise, je vous invite à consulter le dataset (“jeu de données” en français) d’OpenOrca :
Vous y trouverez plusieurs millions de lignes composées de questions ou d'instructions variées (traductions, génération de texte, résumés, raisonnement ...), accompagnées de leur réponse respective. C'est sur de tels datasets que se basent les modèles OpenSource concurrents de ChatGPT lors de leur phase de fine-tuning. Et comme on dit, "Garbage In, Garbage Out", améliorez la qualité des datasets et les modèles s’amélioreront aussi.
Bien que pas obligatoirement nécessaires, certains modèles, comme ChatGPT, utilisent une approche basée sur l'apprentissage par renforcement à partir de retours humains, aussi connu sous le sigle RLHF (Reinforcement Learning from Human Feedback). En simplifiant, cette technique entraîne conjointement un modèle de récompense. Ce dernier s'appuie sur les retours des annotateurs humains pour ajuster les réponses du modèle.
Bon, je sais, ça fait déjà beaucoup de choses à digérer. Et si je me mets à écrire des textes plus longs que Benoît… Allez un dernier effort, c’est bientôt fini. Pour conclure, on va essayer de retirer quelques connaissances pratiques de tout ça.
Vous l’avez sans doute constaté, ChatGPT ne donne pas toujours la réponse exacte. Et pourquoi le ferait-il d’ailleurs ? Il n’a pas la science infuse. Rappelez-vous, par nature, il est autorégressif. Autrement dit, il prédit le prochain mot sur la base de ceux qui le précèdent. Il devine les mots les plus probables, pas nécessairement les plus exacts. Étant donné la vaste étendue d'informations disponibles en ligne : contenus fictifs, humoristiques ou tout simplement erronés; on comprend aisément pourquoi ChatGPT se trompe parfois. La phase d’instruction tuning (du fine-tuning pour que modèle suive des instructions), couplée au RLHF, essaye de corriger le tir. Mais les annotateurs humains chargés de donner des retours au modèle ont pu valoriser des réponses exprimées avec style, sans offense sans pour autant que celles-ci soient correctes.
Ceux qui ont suivi notre formation ont pu appréhender des techniques de prompt comme la chaîne de pensée (appelée “Chain of Thoughts” ou CoT). Cette technique, si vous prenez le temps d’y réfléchir 2 minutes, exploite en quelque sorte le caractère autorégressif de ChatGPT. Elle le force à écrire, à expliquer le raisonnement et l’amène donc vers des réponses plus exactes. Sa capacité de raisonnement est intrinsèquement lié à ce qu’il génère mot après mot. L’astuce constitue donc à lui faire écrire ce qu’il faut pour le guider vers les réponses exactes ou souhaitées.
Mouais, c’est bien théorique tout ça
Passons à un peu de pratique alors. Vous connaissez le problème de l’escargot qui veut sortir de son puits ? ChatGPT lui le connaît :
On va faire quelques tests avec notre ami l’escargot (ami, faut le dire vite, parce que lui et ses congénères m’ont bouffé tous les petits plants de salade que j’avais repiqués ce week-end) et observer comment ChatGPT se comporte. Pour chaque test, je vais utiliser GPT4, le meilleur modèle au moment ou j’écris ces lignes, et je vais à chaque fois commencer un nouveau “Chat”. C’est parti.
Remarque: Il est possible que si vous rejouez les tests de votre côté, vous obteniez des résultats différents.
Un escargot est au fond d'un puits de 10 mètres. Chaque jour, il grimpe 3 mètres, mais chaque nuit, pendant qu'il dort, il glisse de 2 mètres vers le bas. La question est : combien de jours lui faudra-t-il pour sortir du puits ?
La réponse est exacte. On voit que par défaut, maintenant, ChatGPT détaille étape par étape (Ce n’était pas forcément le cas il y a quelques mois) le raisonnement qui l’amène à trouver la solution correcte. Très bien. Demandons lui maintenant de répondre directement.
Un escargot est au fond d'un puits de 10 mètres. Chaque jour, il grimpe 3 mètres, mais chaque nuit, pendant qu'il dort, il glisse de 2 mètres vers le bas. La question est : combien de jours lui faudra-t-il pour sortir du puits ? Réponds uniquement avec le nombre de jours
Ah, il est fort. Réponse exacte sans même expliquer le raisonnement. A moins que … supposons maintenant que le puit fasse 5 mètres et non 10 mètres.
Un escargot est au fond d'un puits de 5 mètres. Chaque jour, il grimpe 3 mètres, mais chaque nuit, pendant qu'il dort, il glisse de 2 mètres vers le bas. La question est : combien de jours lui faudra-t-il pour sortir du puits ? Réponds uniquement avec le nombre de jours
Ah ah, je l’ai eu. Il connaît tellement bien le problème de l’escargot que sans réfléchir, il a répondu 8. Ce problème étant un classique parmi les classiques, on peut supposer qu’il l’a vu passer de nombreuses fois dans ses données d’entraînement avec une hauteur de puits de 10 mètres, qui est la hauteur avec laquelle en général, on pose ce problème.
Même question, mais sans lui préciser de répondre uniquement avec le nombre de jours.
Un escargot est au fond d'un puits de 5 mètres. Chaque jour, il grimpe 3 mètres, mais chaque nuit, pendant qu'il dort, il glisse de 2 mètres vers le bas. La question est : combien de jours lui faudra-t-il pour sortir du puits ?
ChatGPT se remet à “réfléchir”, à écrire son raisonnement mot après mot (autorégressif), les probabilités du token “3” augmentent, augmentent... Et bingo ! Bravo. Avec un puits de 5 mètres, la réponse correcte est bien de 3 jours.
Ok, poussons-le dans ses retranchements. Et voyons voir ce qu’il se passe si on lui tend un piège. Mettons la hauteur du puits à 3 mètres, si bien que notre ami (c’est vite dit) l’escargot peut sortir du puits dès le premier jour.
Un escargot est au fond d'un puits de 3 mètres. Chaque jour, il grimpe 3 mètres, mais chaque nuit, pendant qu'il dort, il glisse de 2 mètres vers le bas. La question est : combien de jours lui faudra-t-il pour sortir du puits ?
Il est tombé dans le panneau. Il ne s’adapte pas à ces nouvelles données, essaye de dérouler le “raisonnement au problème de l’escargot” mais ça ne fonctionne pas. Il nous a même envoyé le pauvre escargot en lévitation à 1 mètre du sol (ce qui au passage me donne des idées). Il n’était pas attentif en cours de Maths au collège ChatGPT, sinon, il saurait qu’il faut bien lire l’énoncé d’un problème.
Un escargot est au fond d'un puits de 3 mètres. Chaque jour, il grimpe 3 mètres, mais chaque nuit, pendant qu'il dort, il glisse de 2 mètres vers le bas. La question est : combien de jours lui faudra-t-il pour sortir du puits ? Prends ton temps, analyse bien les données du problème avant de répondre.
Y a du mieux élève ChatGPT, mais désolé, 2 jours n’est toujours pas la bonne réponse. Il associe tellement le problème de l’escargot à un raisonnement en deux temps (premiers jours puis dernier jour avec un comportement différent) qu’il ne voit pas la réponse. Pourtant, si on lit attentivement, il dit texto “Jour 1 […] il sera à la surface du puits.” Intriguant.
A vous de jouer maintenant, aidez ChatGPT à trouver la bonne réponse. J’en ai ma claque, moi, des escargots!
Des tokens et de l'autorégression tu te serviras, sage dans ta communication tu deviendras.
Voilà, on touche à la fin de cet article. Pffff. Franchement, c'est plus simple d'écrire du code! J'espère que ces quelques lignes vous auront apporté de nouvelles connaissances. Et surtout, que vous repartez avec une meilleure intuition de comment discuter avec nos collaborateurs virtuels : ChatGPT, Mistral, Claude ..
Mise à jour: Une solution possible au problème présenté à ChatGPT avec le puits de 3 mètres est disponible ici.