Regardez la vidéo!
Les grands modèles de langage sont très différents les uns des autres. De leur façon de comprendre le monde à la façon dont vous les utilisez, ils réagiront différemment. Cela signifie que les mêmes prompts n’auront pas le même effet sur chaque modèle. Découvrons les différences entre ces modèles et de meilleures façons de leur écrire des prompts grâce à une nouvelle approche très intéressante publiée il y a quelques jours!


(à gauche) La réponse de Llama-2 et (à droite) celle de ChatGPT au même prompt.
Pourquoi des modèles comme GPT-4, Llama-2 ou Claude réagissent-ils différemment selon le prompt envoyé? C’est parce qu’ils comprennent le monde différemment en utilisant des tokeniseurs et des données distincts. C’est un peu comme la différence entre mon ami Omar et moi. Pour moi, un chat est soit « a cat » en anglais, soit « un chat » en français. Pour lui, ce peut aussi être « gato » en espagnol. Nos différentes langues jouent essentiellement le rôle de nos tokeniseurs. Elles enregistrent les sujets, les concepts, les mots et les phrases dans un format précis dans notre cerveau afin que nous puissions comprendre, comparer et retrouver l’information. C’est la même chose pour les grands modèles de langage. Les jetons sont leur propre langue. Nous devons traduire notre langue humaine, comme le français ou l’anglais, dans une forme qu’ils comprennent, soit essentiellement des vecteurs remplis de nombres qu’ils peuvent ensuite interpréter et comparer.
Voici comment un modèle voit habituellement une phrase… Il sépare les mots et attribue un nombre à chacun d’eux. Ce nombre correspond simplement à leur position dans un grand dictionnaire de mots anglais.

Tokenisation et plongements. Image tirée du blogue de Vaclav Kosar.
Le problème, c’est que les différents modèles de langage utilisent des tokeniseurs différents, ce qui change déjà leur compréhension de nos phrases.
Voici un exemple rapide qui illustre la différence entre les tokeniseurs utilisés par trois modèles de langage: Llama, BERT et GPT-2. J’ai saisi du texte, un peu de mathématiques simples, une binette, un émoji, des majuscules et quelques espaces pour montrer les différents comportements des tokeniseurs. J’affiche également les positions dans le dictionnaire de mots utilisé par chacun, et nous constatons que cette position change même pour un jeton identique. Regardez à quel point les résultats sont différents. Le caractère G spécial de GPT-2 et le soulignement de Llama représentent simplement les espaces. Vous voyez toutefois clairement que certains tokeniseurs tiennent compte des espaces et d’autres non. Ils découpent les mots différemment, conservent ou non la double égalité de la comparaison booléenne, reconnaissent les majuscules ou les ignorent, et ainsi de suite. Tous ces comportements affecteront certainement la compréhension du modèle. Imaginez que vous vouliez qu’il sache quand une personne est enthousiaste ou fâchée, mais qu’il soit incapable de voir les émojis ou les mots écrits entièrement en majuscules! C’est justement ainsi que nous exprimons nos émotions dans une conversation écrite!
Voici quelques exemples pour la phrase « If you are enjoying the video… », tirés de mon exemple de tokeniseur dans Google Colab:
Jetons GPT-2:
[‘If’, ‘Ġyou’, ‘Ġare’, ‘Ġenjoying’, ‘Ġthe’, ‘Ġvideo’, ’…’]
Identifiants des jetons GPT-2:
[1532, 345, 389, 13226, 262, 2008, 986]
Jetons BERT:
[‘if’, ‘you’, ‘are’, ‘enjoying’, ‘the’, ‘video’, ’.’, ’.’, ’.’]
Identifiants des jetons BERT:
[2065, 2017, 2024, 9107, 1996, 2678, 1012, 1012, 1012]
Jetons Llama:
[‘▁If’, ‘▁you’, ‘▁are’, ‘▁enjo’, ‘ying’, ‘▁the’, ‘▁video’, ’…’]
Identifiants des jetons Llama:
[960, 366, 526, 11418, 5414, 278, 4863, 856]
Un autre exemple avec la phrase et les espaces dans « , give it a thumbs up and SUBSCRIBE! »:
Jetons GPT-2:
[’,’, ‘Ġgive’, ‘Ġit’, ‘Ġa’, ‘Ġ’, ‘Ġ’, ‘Ġthumbs’, ‘Ġup’, ‘Ġand’, ‘Ġ’, ‘Ġ’, ‘Ġ’, ‘ĠSU’, ‘BS’, ‘C’, ‘RI’, ‘BE’, ’!’]
Identifiants des jetons GPT-2:
[11, 1577, 340, 257, 220, 220, 32766, 510, 290, 220, 220, 220, 13558, 4462, 34, 7112, 12473, 0]
Jetons BERT:
[’,’, ‘give’, ‘it’, ‘a’, ‘thumbs’, ‘up’, ‘and’, ‘sub’, ‘##scribe’, ’!’]
Identifiants des jetons BERT:
[1010, 2507, 2009, 1037, 16784, 2039, 1998, 4942, 29234, 999]
Jetons Llama:
[’▁,’, ‘▁give’, ‘▁it’, ‘▁a’, ’▁▁’, ‘▁thumb’, ‘s’, ‘▁up’, ‘▁and’, ’▁▁▁’, ‘▁SUB’, ‘SC’, ‘RI’, ‘BE’, ’!’]
Identifiants des jetons Llama:
[1919, 2367, 372, 263, 259, 28968, 29879, 701, 322, 1678, 27092, 7187, 3960, 15349, 29991]
Voici un dernier exemple avec cette chaîne de caractères:
"""2 + 2 == 2*2 \t :)
💃
"""
Jetons GPT-2:
[‘2’, ‘Ġ+’, ‘Ġ2’, ‘Ġ==’, ‘Ġ2’, ’*’, ‘2’, ‘Ġ’, ‘ĉ’, ‘Ġ’, ‘Ġ’, ‘Ġ’, ‘Ġ:)’, ‘Ċ’, ‘Ġ’, ‘Ġ’, ‘Ġ’, ‘Ġ’, ‘Ġ’, ‘ĠðŁ’, ‘Ĵ’, ‘ĥ’, ‘ĊĊ’]
Identifiants des jetons GPT-2:
[17, 1343, 362, 6624, 362, 9, 17, 220, 197, 220, 220, 220, 14373, 198, 220, 220, 220, 220, 220, 12520, 240, 225, 628]
Jetons BERT:
[‘2’, ’+’, ‘2’, ’=’, ’=’, ‘2’, ’*’, ‘2’, ’:’, ’)’, ‘[UNK]’]
Identifiants des jetons BERT:
[1016, 1009, 1016, 1027, 1027, 1016, 1008, 1016, 1024, 1007, 100]
Jetons Llama:
[’▁’, ‘2’, ’▁+’, ’▁’, ‘2’, ’▁==’, ’▁’, ‘2’, ’*’, ‘2’, ’▁’, ‘<0x09>’, ’▁▁▁’, ’▁:)’, ‘<0x0A>’, ’▁▁▁▁▁▁’, ‘<0xF0>’, ‘<0x9F>’, ‘<0x92>’, ‘<0x83>’, ‘<0x0A>’, ‘<0x0A>’]
Identifiants des jetons Llama:
[29871, 29906, 718, 29871, 29906, 1275, 29871, 29906, 29930, 29906, 29871, 12, 1678, 4248, 13, 539, 243, 162, 149, 134, 13, 13]
Il y a ensuite la façon dont le modèle traite ces jetons. Une fois tokenisé, chaque jeton est converti en vecteur à l’aide d’une couche de plongement. Chaque jeton devient donc un point dans un espace à très grandes dimensions. Ces vecteurs représentent le sens sémantique. C’est à cet endroit que votre modèle comprend la signification des mots, et surtout des structures plus complexes comme les phrases, dans lesquelles les mots entretiennent des relations entre eux.

Un espace de plongement en 3 dimensions.
Cette partie d’encodage est entraînée avec le reste du modèle pendant l’étape autosupervisée. Nous lui donnons essentiellement des débuts de phrases provenant de l’ensemble d’Internet et lui demandons de deviner la suite. Le modèle peut s’entraîner lui-même, puisque nous avons déjà accès au reste de la phrase sur Internet. Il suffit donc d’attendre et de lui faire comprendre et digérer énormément de contenu de cette façon. Si l’entraînement dure assez longtemps, le modèle devrait construire sa propre compréhension de notre monde, comme GPT-4 l’a fait. Mais il s’agit bel et bien de sa propre compréhension, qui dépend du tokeniseur choisi et de la couche de plongement que nous entraînons pour ce modèle précis.
Voilà pourquoi chaque grand modèle de langage est unique et comprend nos requêtes différemment. Cela dépend aussi des données que nous lui avons fournies pendant l’entraînement. Ces données ressemblaient-elles davantage à des conversations, à des instructions ou à autre chose, selon le cas d’utilisation que nous avions en tête? Les modèles possèdent aussi des paramètres, comme la température ou les pénalités, avec lesquels vous pouvez jouer. Ils déterminent entre autres la fréquence à laquelle le modèle réutilise les mêmes jetons ou en choisit de nouveaux lorsqu’il génère des mots, ainsi que son niveau de créativité. Vous pouvez presque toujours modifier ces réglages dans les différents modèles. Toutes ces variables et toutes ces différences expliquent pourquoi le secret pour devenir meilleur en ingénierie de prompts est… de pratiquer directement avec les modèles! Vous ne pouvez pas généraliser une technique d’un modèle à l’autre. Certaines techniques demeurent toutefois assez générales et peuvent améliorer vos résultats. En voici quelques-unes…
Commencez par jouer avec ces paramètres afin de découvrir ce qui fonctionne le mieux pour votre tâche. Avez-vous besoin que le modèle simplifie un peu son explication et utilise des mots plus courants? Voulez-vous qu’il soit créatif, ou préférez-vous qu’il produise un texte plus grammaticalement correct, mais peut-être moins créatif? Une fois les besoins de votre tâche définis, gardez-les en tête et ajustez les paramètres en conséquence. Vous trouverez la meilleure combinaison par essais et erreurs.

Paramètres offerts avec les modèles GPT.
Vous devriez ensuite commencer à écrire vos prompts, tout en adaptant aussi les paramètres si vous les modifiez radicalement.
La première chose à faire est de définir un bon prompt système. Dans l’exemple du début de la vidéo, nous lui demandions d’agir comme un enseignant de troisième année et de rendre l’explication extrêmement facile à comprendre. Ce prompt système, qui donne essentiellement un rôle et une tâche à accomplir à votre grand modèle de langage, est la partie la plus importante de tout le processus. C’est un peu comme réentraîner votre modèle pour une tâche précise sans vraiment le réentraîner, ce qui permet d’économiser énormément de temps et d’argent!
Réfléchissez ensuite à ce que vous souhaitez accomplir et explorez des techniques de prompting plus avancées. Je vais énumérer ici mes techniques préférées, qui fonctionnent dans presque tous les cas. Je vous invite toutefois fortement à consulter des ressources en ligne comme learnprompting.org, qui répertorie et explique les meilleures techniques pour mieux contrôler les sorties des grands modèles de langage.
[
The What’s AI Weekly par Louis-François Bouchard | Substack
La meilleure technique que je puisse vous recommander est le prompting avec quelques exemples, ou few-shot prompting. Vous fournissez au modèle un exemple de ce que vous recherchez et lui demandez de faire la même chose. Cette méthode est extrêmement puissante si vous développez une application pour un cas d’utilisation précis, comme la création de résumés destinés à des élèves de troisième année! Et ce qui est intéressant, c’est qu’elle fonctionne très bien même avec un seul exemple!

Exemple de prompting avec un seul exemple dans ChatGPT.
Une nouvelle méthode très intéressante appelée prompting par chaîne de densité, ou CoD, est elle aussi assez puissante, particulièrement pour les tâches de résumé. Cette méthode demande à un modèle comme GPT-4 de produire un premier résumé de base, puis d’y ajouter plusieurs fois des détails précis sans l’allonger. Le modèle répète simplement deux étapes à quelques reprises en suivant le prompt fourni, ou un prompt semblable. Il repère d’abord des détails précis de l’article, appelés ici des entités, qui ne figurent pas dans le résumé actuel. Il réécrit ensuite le résumé en conservant exactement la même longueur, tous les détails déjà présents et les nouvelles entités qui viennent d’être trouvées. Le modèle doit donc intégrer ces détails supplémentaires. Il améliore graduellement le résumé en ne modifiant que certaines parties, sans ajouter toujours plus de mots. Le résumé devient ainsi de plus en plus dense et compact en information, ce qui en améliore la qualité! Si cette approche vous intéresse, j’ai ajouté plus bas le lien vers l’article d’Adams et coll. qui la présente. Vous y trouverez beaucoup plus de détails ainsi qu’une vaste étude sur les résumés. C’est une lecture très intéressante!

Les résumés créés avec la chaîne de densité (CoD) deviennent de plus en plus denses en entités. Ils ressemblent d’abord aux résumés ordinaires de GPT-4, puis finissent par surpasser ceux rédigés par des humains. Image tirée de Adams et coll..

Prompt et exemple de sortie de la chaîne de densité (CoD). À chaque étape, 1 à 3 détails supplémentaires, ou entités, sont ajoutés au résumé précédent sans augmenter sa longueur. Pour faire de la place aux nouvelles entités, le contenu existant est réécrit, par exemple par compression ou par fusion. La moitié des évaluateurs, soit 2 sur 4, préfèrent l’avant-dernier résumé, tandis que les autres choisissent le dernier. Légende et image tirées de Adams et coll..

Image tirée de learnprompting.org.
Une autre excellente technique, si votre application est plus complexe et exige un certain raisonnement, s’appelle la chaîne de pensée sans exemple, ou zero-shot chain of thought. Vous demandez au modèle de diviser une requête complexe en requêtes plus simples en lui disant une phrase aussi simple que « réfléchissez étape par étape ». Cette méthode aide surtout à répondre aux questions de mathématiques ou de logique et peut améliorer énormément les résultats dans ces situations!
J’espère que cet article vous a aidé à mieux comprendre l’importance du choix du modèle, des paramètres et des prompts. Ces décisions demandent aussi beaucoup de travail et de patience, et j’espère que vous comprenez maintenant un peu mieux pourquoi.
Je vous retrouve la prochaine fois avec un article très intéressant sur les grands modèles de langage dans le monde réel. Vous ne voulez pas le manquer!
Références
- Excellente ressource sur le prompting: learnprompting.org
- Article d’Adams et coll. sur le prompting par chaîne de densité: https://arxiv.org/pdf/2309.04269.pdf
- Carnet Colab de l’exemple sur les tokeniseurs: https://colab.research.google.com/drive/1IVQyGmj1t9R12oajT4OMjMWzwZk3jWgm?usp=sharing
- Tokenization in Machine Learning Explained
FAQ
Pourquoi différents grands modèles de langage répondent-ils différemment au même prompt?
Leurs tokeniseurs, leurs données d'entraînement, leur ajustement, leur taille et leurs instructions système produisent des comportements appris différents.
Quels paramètres de génération devriez-vous tester?
La température, les limites de jetons, les paramètres d'échantillonnage et les réglages propres au modèle peuvent modifier la créativité, la cohérence et la longueur.
Comment demander un langage plus simple dans un prompt?
Précisez le public, définissez le niveau de lecture, demandez des mots courants et fournissez un court exemple du style recherché.
À quoi servent les instructions de sortie structurée?
Un schéma clair rend les réponses plus faciles à valider et à utiliser de façon cohérente, autant pour les humains que pour les logiciels.
Faut-il réutiliser le même prompt sans le modifier pour chaque modèle?
Non. Gardez la tâche identique pour les comparer, puis adaptez les instructions selon le comportement mesuré du modèle choisi.
Pourquoi la tokenisation influence-t-elle la façon dont un modèle lit un prompt?
Chaque tokeniseur divise le même texte en unités différentes. Les modèles construisent donc des représentations numériques distinctes avant de produire leur réponse.

