Comment ChatGPT apprend et génère du texte ?
Rergardez la vidéo (pour plus de visuels!):
Vous avez certainement entendu dire que l’IA est capable de choses incroyables, ou les avez même déjà expériment par vous-même, allant de discuter avec vous comme un humain à générer du code et même analyser des images. Mais comment fonctionnent réellement ces modèles ? Si vous avez une expérience limitée en programmation, pas d’inquiétude. Nous allons simplifier les choses tout en abordant les concepts essentiels.
Je suis Louis-François Bouchard, co-fondateur de Towards AI où nous créons des cours et formations personalisées autour de l’IA. À la fin de cet article, vous aurez une meilleure idée de la manière dont les grands modèles de langue (LLM) s'inscrivent dans le paysage général de l’IA, comment ils traitent le langage, pourquoi ils se trompent parfois, et pourquoi ils restent malgré tout des outils extrêmement puissants pour créer les applications de demain.
Commençons par une petite histoire. Imaginez que vous êtes en cours de langue. Vous voulez apprendre l’anglais, mais au lieu d’étudier toutes les règles grammaticales une par une, vous commencez à lire d’énormes quantités de textes en anglais—romans, articles de presse, publications diverses sur les réseaux sociaux—et vous tentez de prédire la suite des phrases en anglais en regardant seulement leurs premiers mots. Au début, vous ferez évidemment des erreurs et des suppositions aléatoires. Mais après beaucoup de pratique et de corrections, si nous vous indiquons dans votre langue quelle aurait été la bonne prédiction, vous commencerez à remarquer des régularités. Vous verrez que certains mots apparaissent souvent ensemble. Après avoir lu un million de phrases en anglais, vous deviendrez plutôt bon pour prédire les prochains mots. C’est à peu près ce que font les LLM à très grande échelle. Ils parcourent une quantité gigantesque de données tirées d’internet—pages web, livres, code informatique, tout ce que vous pouvez imaginer—et essaient de deviner quel sera le mot suivant dans une séquence. C’est ce qu’on appelle la prédiction du prochain token, mais vous n’avez pas besoin de retenir ce terme technique.
Lorsque nous parlons d’IA, nous faisons référence à tout un domaine de recherche et de technologie visant à concevoir des machines capables de réaliser des tâches qui nécessitent normalement une intelligence humaine, telles que reconnaître la parole, identifier des images ou prendre des décisions. À l’intérieur de l’IA, il existe un sous-domaine appelé apprentissage automatique (« machine learning »), qui consiste à enseigner aux ordinateurs comment apprendre à partir de données sans devoir programmer explicitement toutes les règles. Traditionnellement, on programmait chaque règle à la main pour qu’un ordinateur accomplisse une tâche, du genre « Si X, alors Y ; si A, alors B ». L’apprentissage automatique inverse cette logique en laissant des algorithmes absorber des données et identifier eux-mêmes ces régularités, ce qui permet d’aller beaucoup plus loin que quelques instructions du type « si, alors ».
Dans l'apprentissage automatique, il existe un concept appelé réseaux de neurones, qui sont vaguement inspirés du fonctionnement du cerveau humain. Imaginez un réseau composé d’un grand nombre de petites unités (que nous appelons des neurones) connectées les unes aux autres. Dans le cerveau humain, les neurones transmettent des signaux à travers des connexions appelées synapses. Dans un réseau neuronal artificiel, ces « neurones » échangent des nombres entre eux, alors que dans notre cerveau, ce sont plutôt des substances chimiques et des courants électriques. En ajustant ces connexions grâce à des milliards d’exemples, le réseau apprend à accomplir une tâche, exactement comme les bébés apprennent en observant et en interagissant avec leur environnement. De même, le « deep learning » (apprentissage profond), par rapport à l'apprentissage automatique classique, signifie simplement que l’on utilise de très grands réseaux composés de nombreuses couches de neurones, leur permettant ainsi de détecter des régularités beaucoup plus complexes.
Les grands modèles de langage (LLM) appartiennent justement à cette catégorie d'apprentissage profond et utilisent un type particulier de réseau neuronal appelé transformeur. Imaginez le transformeur comme une chaîne d’assemblage capable de traiter beaucoup de texte en parallèle, plutôt que mot par mot, comme on le faisait avec les anciens réseaux. Au lieu de lire une phrase mot après mot de gauche à droite, le modèle peut observer l'ensemble simultanément et décider quelles parties du texte sont les plus importantes. Ceci est rendu possible grâce à ce qu'on appelle le « mécanisme d’attention », qui indique au modèle à quels mots prêter particulièrement attention selon le contexte. Par exemple, si le texte dit : « Il s'est assis sur la banque et a regardé couler la rivière », le mécanisme d'attention aide le modèle à comprendre que « banque » désigne ici le bord d’une rivière, et non un établissement financier. Tout ceci est appris à force d’observer des exemples et d’apprendre de ceux-ci. Exactement comme notre exemple avec le français, ou encore comme lorsqu'on apprend des mouvements spécifiques dans certains sports : c’est à force de pratiquer qu’on devient bon. Il en va de même pour les LLM, ce qui explique pourquoi ces modèles ont besoin d'autant de données, essentiellement tirées de l’ensemble d’internet.
Mais avant de plonger dans ces concepts avancés, revenons un peu en arrière et intéressons-nous à la façon dont nous transformons du texte brut en quelque chose qu’un réseau neuronal peut comprendre. En effet, le modèle ne peut pas simplement lire les lettres comme le ferait un humain. Tout doit être traduit en chiffres. Nous découpons donc le texte en morceaux appelés « tokens ». Prenez la phrase : « Le chat est assis sur le tapis », vous pourriez la découper en tokens tels que « Le », « chat », « est », « assis », « sur », « le », « tapis ». Généralement, ces tokens sont des mots entiers, mais selon le tokenizer (c’est le programme qui divise le texte en tokens), ils peuvent aussi être des morceaux plus petits, comme des sous-mots ou même des caractères individuels. L’essentiel est que le modèle voit une séquence de tokens et non simplement des lettres brutes. Ils ne comprennent pas les lettres, juste des fragments.
Après la tokenisation, chaque token est associé à une liste de nombres, généralement appelée « embedding » (ou plongement ou encore encastrations en français, mais je n’aime pas trop ces termes un peu flou), afin que l’ordinateur puisse effectuer des opérations mathématiques dessus. Par exemple, le mot « chat » pourrait correspondre à [0,12, -0,99, 3,11, ...], tandis que « chien » correspondrait à [0,10, -1,02, 3,20, ...]. La différence entre ces nombres peut être petite ou grande, et c’est précisément cette différence qui représente à quel point les sens de ces mots sont proches. Des mots comme « chat » et « chaton » seront extrêmement proches dans cet espace vectoriel car leurs sens se chevauchent beaucoup. En revanche, des mots comme « chat » et « banane » seront beaucoup plus éloignés. Vous pouvez imaginer que chacun de ces nombres représente une caractéristique du mot, comme sa taille, sa couleur, sa forme, etc. Ainsi, nos chats et chiens seraient très proches dans cet espace, surtout si on pense à de petits chiens, tandis que la banane serait nettement différente. C’est d’ailleurs cette idée qui explique l’origine de ce meme où toutes ces images paraissent très similaires, même pour nous !
Ces correspondances sont essentielles pour tout ce que fait le modèle. Elles lui permettent de mesurer les similarités, les différences et les relations entre les mots. Bien qu'elles ne soient pas directement intuitives pour vous ou moi, elles le sont pour le réseau de neurones, qui peut gérer ces listes efficacement via de grandes multiplications matricielles.
Maintenant, le véritable tour de magie réside dans la façon dont ces modèles sont entraînés. Pendant l’entraînement, le LLM essaie de deviner le token suivant dans un ensemble de données gigantesque. Imaginez que vous lisiez un billion de mots provenant d'internet, et que chaque fois que vous cachez le mot suivant, vous essayez de le prédire. La différence entre la prédiction du modèle et le mot réel suivant est appelée l'erreur. Le processus d'entraînement ajuste alors les paramètres internes du modèle—ces milliards de valeurs qui relient les neurones entre eux—afin de réduire progressivement cette erreur. En passant plusieurs fois sur cette énorme quantité de données, le modèle affine ses paramètres jusqu’à devenir très performant dans la prédiction du prochain token. Vu ainsi, un LLM ressemble un peu à un immense système de compression qui essaie de retenir l'essentiel de tout ce qu'il a lu. Mais puisqu'il s'agit d'une compression, il ne mémorise pas parfaitement chaque ligne. Il capture surtout des régularités et des relations, ce qui lui permet ensuite de produire de nouveaux textes alignés avec ce qu'il a appris.
L'une des principales raisons pour lesquelles les LLM sont aussi puissants, c’est qu’ils peuvent générer des phrases cohérentes, voire des paragraphes entiers dans des styles variés. Ils peuvent imiter l’écriture formelle, une conversation informelle, ou même reproduire le style d’auteurs spécifiques, simplement en utilisant les régularités extraites de leurs données d’entraînement. C’est pour cette raison que vous pouvez demander à un LLM : « Écris-moi un poème sur une fusée solitaire », et qu'il peut produire quelque chose qui ressemble réellement à un poème.
À ce stade, vous vous demandez peut-être : « Si ces modèles ont appris toutes leurs connaissances sur internet, pourquoi se trompent-ils parfois ? » La raison tient à la méthode d’entraînement elle-même. Comme les modèles apprennent uniquement en prédisant le mot suivant, ils peuvent parfois générer des erreurs. Cela s’appelle une hallucination. Ainsi, un modèle pourrait affirmer avec conviction que la capitale de l’Argentine est Bogotá, ce qui est faux. Pourtant, le résultat peut sembler très convaincant simplement parce que le modèle produit du texte de manière fluide. C’est un peu comme quelqu’un qui parlerait très bien mais qui ne maîtriserait pas parfaitement la géographie. Il peut transmettre une information erronée avec une confiance totale, parce qu’il ne fait que « générer du texte ».
Pour améliorer les performances des modèles et limiter ces erreurs, les chercheurs utilisent deux techniques principales. Premièrement, l’entraînement à suivre des instructions (« instruction tuning »), où l’on montre au modèle des exemples d'instructions d'utilisateurs et des réponses correctes correspondantes. Le but est que le modèle apprenne à mieux respecter des consignes précises, au lieu de simplement continuer la séquence de mots comme il l’a appris auparavant sur internet. Encore une fois, tout se fait par apprentissage par l'exemple. Ensuite, de nombreux laboratoires appliquent ce qu’on appelle l’apprentissage par renforcement à partir de retours humains, ou RLHF (« reinforcement learning from human feedback »). Ici, des évaluateurs humains notent la qualité des réponses produites par le modèle, afin d’ajuster son comportement selon leurs préférences. C’est comme apprendre à partir des retours d’un professeur. Grâce à cette méthode, ChatGPT et d’autres modèles similaires arrivent à mieux répondre aux questions d’une façon qui plaît davantage aux utilisateurs.
Cependant, ces approches ne résolvent pas tous les problèmes. Même avec le RLHF et l'entraînement par instructions, le modèle peut encore produire des erreurs ou parfois refuser de répondre à des questions pourtant parfaitement valides. Il s’agit toujours d’un équilibre délicat entre la sécurité, l’alignement avec les valeurs humaines et la nécessité de fournir autant d’informations utiles que possible.
Ces modèles avancés utilisent une technique spécifique appelée « transformeur » qui exploite un concept nommé mécanisme d'attention. Parmi ces transformeurs, certains utrilisent aussi une approche plus poussée appelée mixture d’experts (« Mixture of Experts »). Ces modèles gagnent en efficacité en activant uniquement certaines parties du réseau (nos experts) selon la donnée d’entrée, au lieu de mobiliser l’ensemble du réseau. C’est comme avoir un groupe de personnes, chacune spécialisée dans un domaine précis : inutile que tout le monde travaille simultanément sur la même question. Cette approche réduit ainsi les coûts et accélère la vitesse d’inférence.
Mais qu’est-ce qu’on entend par « inférence » : c’est tout simplement le moment où le modèle reçoit une requéte et génère une réponse. Alors que l'entraînement du modèle a lieu une seule fois (ou ponctuellement), l’inférence se produit constamment, chaque fois qu’un utilisateur interagit avec lui. Une inférence efficace est très importante, car personne ne souhaite attendre éternellement une réponse ni dépenser une fortune en frais de serveurs. C’est pourquoi les laboratoires consacrent beaucoup d’efforts à optimiser ces modèles afin qu’ils fonctionnent le plus vite possible, au moindre coût possible, tout en maintenant une qualité satisfaisante.
Essayons de résumer tout cela clairement. On part d'une donnée brute (du texte), qu’on découpe en morceaux appelés tokens. Ces tokens sont ensuite convertis en listes de nombres (« embeddings » ou plongements). On envoie ensuite ces embeddings à travers plusieurs couches d'un réseau de type transformeur qui tente de deviner le prochain token. Chaque fois qu’il se trompe, il ajuste ses paramètres internes. Après avoir vu énormément d’exemples, le modèle devient suffisamment performant pour générer un texte semblable à celui qu’écrirait un humain. Ensuite, une fois entraîné, on affine encore le modèle grâce à des méthodes comme l’entraînement par instructions ou l’apprentissage par renforcement avec des retours humains (RLHF), afin d’améliorer ses réponses selon les préférences humaines.
Ainsi, lorsqu’un utilisateur interagit avec un modèle comme ChatGPT, celui-ci découpe le texte en tokens, les convertit en embeddings, puis traite ces embeddings pour prédire les mots suivants les plus probables. Enfin, le modèle envoie la réponse générée à l’utilisateur, token par token, donnant l’impression qu’il tape en temps réel.
À ce stade, vous pourriez vous demander pourquoi ces modèles se trompent s’ils ont appris autant de choses provenant d'internet. C'est parce que leur entraînement ne permet pas toujours d’intégrer toutes les connaissances. Ils peuvent éprouver des difficultés à répondre à des questions portant sur des sujets très récents ou sur des connaissances spécialisées absentes de leurs données d’entraînement. C’est là qu’interviennent des techniques comme le RAG (« Retrieval-Augmented Generation »), qui consistent à rechercher des informations externes (dans une base de données privée ou sur internet en temps réel) afin que le modèle puisse générer des réponses à jour. J’ai une vidéo complète sur le RAG si jamais ça vous intresse d’en apprendre plus sur cette amélioration de la génération des LLMs.
Après la tokenisation, chaque token est converti en embeddings (plongements), puis traité par des couches successives de transformeurs pour prédire les tokens suivants. Aujourd’hui, un modèle ne traite pas seulement du texte : un seul grand modèle peut effectuer plusieurs tâches, alors qu’auparavant il fallait un modèle différent spécialisé pour chaque tâche (par exemple la reconnaissance vocale, la vision par ordinateur, ou la reconnaissance d’image). Ces modèles capables de gérer différentes tâches à la fois suscitent énormément d'enthousiasme, expliquant en partie les progrès fulgurants de l'IA générative. Cette polyvalence contribue à effacer les frontières entre les sous-domaines de l’IA, tels que le traitement automatique du langage naturel, la vision par ordinateur et la reconnaissance vocale.
Bien entendu, ces modèles ne sont pas exempts de défauts. Même avec les techniques d'entraînement par renforcement à partir de retours humains (RLHF) et d’entraînement par instructions, ils peuvent toujours produire des inexactitudes ou refuser injustement de répondre à certaines questions parfaitement valides. On parle alors d’une quête permanente d’équilibre entre sécurité, efficacité, et alignement sur les valeurs humaines. C’est pourquoi les développeurs mettent en place des filtres de sécurité et d'éthique, en essayant d’empêcher les modèles de produire des réponses nuisibles ou inappropriées. Toutefois, cela reste une tâche complexe, ressemblant à un jeu du chat et de la souris permanent entre développeurs soucieux de renforcer la sécurité des modèles et utilisateurs tentant constamment d'en tester les limites. Ainsi, si vous décidez de créer votre propre application basée sur un LLM, il est recommandé d’intégrer vos propres mécanismes de filtrage afin d’assurer une utilisation responsable de votre produit.
Au bout du compte, l’idée fondamentale est que les grands modèles de langage (LLM) sont des réseaux de neurones artificiels qui ont appris une représentation compressée d’une énorme quantité de données. Ils prédisent simplement le prochain token (mot ou fragment), ce qui peut sembler peu, mais c’est suffisant pour générer du texte capable d’expliquer, de résumer, d’inventer des histoires, voire même d’écrire. Bien sûr, ils ne sont pas parfaits et peuvent encore produire des erreurs ou des incohérences lorsqu'ils tentent de répondre à des questions dont la réponse n’est pas évidente à partir de leurs données d'entraînement, ou lorsqu'ils tentent de réaliser certaines tâches qui demandent une grande précision ou une connaissance spécialisée. C’est pourquoi la technologie évolue constamment. Chaque mois apporte son lot de modèles plus grands, de méthodes d'entraînement améliorées, ou de techniques avancées comme l’apprentissage par instructions qui repoussent sans cesse les limites des capacités de ces modèles.
J’espère que cet article vous a aidé à mieux comprendre ce qui se passe sous le capot, et vous a donné une idée claire des raisons pour lesquelles tant de personnes sont enthousiastes face à ces modèles!
Sur ce, merci d’avoir pris le temps de lire l’article jusqu’au bout, et on se voit dans le prochain !