Ceci est une traduction automatique ; la version originale en anglais fait foi. Lire l'original

Pourquoi un modèle de langage peine à compter les lettres d'un mot

A white paneled robot counts on its fingers while blank glowing jigsaw pieces float in front of it, fusing into fewer and larger pieces.

Le mot « strawberry » parvient à GPT-4 sous la forme de trois morceaux : str, aw, berry. Les lettres ont disparu avant qu'il n'ait lu quoi que ce soit.

WHAT YOU TYPEstrawberry3 × rWHAT THE MODEL RECEIVESstrawberry3 OPAQUE IDs
Vous envoyez des lettres. Le modèle reçoit trois identifiants opaques. Les « r » ne figuraient pas dans l'entrée qu'il a vue.

Demandez à un modèle de langage combien de fois la lettre « r » apparaît dans « strawberry », et il se peut bien qu'il vous réponde deux. On y voit souvent la preuve d'une lacune profonde. C'est en réalité plus proche de demander à quelqu'un de compter les coups de pinceau d'un mot qu'il n'a jamais fait qu'entendre prononcer.

Ce que le modèle reçoit réellement

Avant qu'un modèle ne voie du texte, celui-ci est découpé en tokens. Ni des lettres, ni des mots : des segments choisis par un algorithme qui a analysé un vaste corpus et fusionné, de manière itérative, les paires adjacentes les plus fréquentes, jusqu'à obtenir un vocabulaire de quelques dizaines de milliers d'éléments.

Les mots courants constituent un seul token. Les mots plus rares sont fractionnés, et l'endroit où s'opèrent les coupures dépend des statistiques du corpus plutôt que du sens ou de l'orthographe. « strawberry » peut ainsi arriver sous la forme de deux ou trois morceaux, et la perception qu'en a le modèle se limite à ces morceaux vus comme des symboles atomiques, chacun étant un indice arbitraire dans un vocabulaire, sans plus de structure interne accessible au modèle qu'un numéro de rue.

Les lettres n'y sont donc véritablement pas. Un modèle peut apprendre des faits sur l'orthographe — savoir que certains tokens tendent à coapparaître avec certaines affirmations relatives aux lettres —, mais il raisonne alors à partir de ouï-dire sur sa propre entrée plutôt qu'à partir de l'entrée elle-même. Vous pouvez observer ce découpage à l'œuvre dans le Tokenizer. Son vocabulaire a été constitué à partir des textes de ce site plutôt que d'une collecte du Web, de sorte qu'il découpe « strawberry » en quatre morceaux là où celui de GPT en fait trois.

Ce que cela explique d'autre

L'arithmétique sur de grands nombres. Les nombres sont eux aussi découpés en tokens, et pas toujours chiffre par chiffre. Un nombre peut être scindé en blocs qui traversent la notation positionnelle ; un modèle effectuant une opération en colonnes travaille dès lors avec des éléments qui ne s'alignent pas sur les colonnes. Une performance qui se dégrade fortement avec le nombre de chiffres indique que le problème est d'ordre représentationnel.

Rimes, anagrammes, acrostiches. Toute tâche définie sur les lettres plutôt que sur le sens se heurte au même obstacle.

Coûts et limites de contexte dans les langues autres que l'anglais. Les outils de tokenisation sont entraînés sur des corpus très majoritairement anglophones ; l'anglais bénéficie donc de tokens efficaces, tandis que les autres langues sont fragmentées en un plus grand nombre de morceaux par mot. Une même phrase dans une langue moins représentée peut consommer plusieurs fois plus de tokens, ce qui signifie qu'elle coûte plus cher à traiter et s'impute davantage sur une fenêtre de contexte fixe. Il s'agit là d'un problème d'équité logé au cœur d'une étape de prétraitement.

Les tokens ne sont pas la seule source de surprise

Le sens est géométrique. Les mots deviennent des vecteurs, et la proximité dans cet espace s'apprend par la cooccurrence : ce qui apparaît à proximité de quoi. C'est pourquoi les modèles saisissent si bien les associations et héritent des biais des textes sur lesquels ils ont été entraînés : si un mot apparaît près de certains autres dans le corpus, il se situera près d'eux dans l'espace géométrique, et rien dans le mécanisme ne distingue un fait d'un stéréotype. L'outil Token Embeddings construit une version réduite de cet espace pour donner à voir la nature de cette géométrie.

La sortie est échantillonnée, non choisie. Un modèle produit une distribution de probabilité sur le token suivant, et un processus doit en sélectionner un. Baissez la température, et il retient systématiquement l'option la plus probable, devenant répétitif et prévisible. Augmentez-la, et il choisit plus souvent des options de faible probabilité, devenant inventif et peu fiable. Une grande part de ce que l'on qualifie de « créativité » chez un modèle n'est qu'un paramètre d'échantillonnage. L'hallucination ne l'est pas : à température zéro, un modèle continue d'inventer des éléments, et l'échantillonneur n'en modifie que la fréquence. Temperature Sampling rend visibles côte à côte la distribution et la sélection effectuée.

Identifier la couche à l'origine d'un comportement

Cela transforme un mystère en spécification technique. « Le modèle n'est pas fiable » n'offre aucune prise directe. « Le modèle ne voit pas les lettres, il convient donc de confier les tâches d'orthographe et de comptage de caractères à du code » en offre une. Il en va de même pour « cette langue consomme trois fois plus de tokens, prévoyez le budget en conséquence », ou « cette sortie a été échantillonnée à une température qui ne permettra pas d'obtenir des résultats reproductibles ».

Presque toute décision pratique relative au bon usage de ces systèmes repose sur la capacité à identifier la couche d'où provient un comportement : le tokeniseur, la géométrie des plongements ou l'échantillonneur. Aucune de ces trois couches ne relève de l'intelligence, et toutes trois sont inspectables.

Comment se construit le vocabulaire

La méthode usuelle est le codage par paires d'octets (byte pair encoding), et son principe est plus simple que sa réputation. On commence avec chaque caractère comme token individuel. On compte toutes les paires adjacentes sur l'ensemble du corpus, on repère la plus fréquente, puis on la fusionne en un nouveau token unique. On répète l'opération quelques dizaines de milliers de fois.

Ce qui en émerge n'est pas une analyse linguistique. C'est un classement par fréquence. Les mots anglais courants subsistent intacts parce qu'ils étaient fréquents dans le corpus ; la morphologie n'est restituée que là où elle coïncide fortuitement avec la fréquence. Le tokeniseur n'a aucune conscience du fait que « running » contient « run » ; il ne le représentera ainsi que si ce découpage précis l'a emporté lors du comptage.

Le vocabulaire est le fossile d'un corpus particulier à un moment précis. Modifiez le texte d'entraînement, et les coupures changent de place. Deux modèles pourvus de tokeniseurs distincts ne divergent pas seulement sur ce qu'ils produisent en sortie : ils divergent sur ce qu'est l'entrée.

Pourquoi le problème n'est pas simple à résoudre

La réponse immédiate consisterait à fournir directement des caractères au modèle. Certains modèles le font, mais ce compromis a un coût.

Les tokens existent pour raccourcir la séquence. Une page d'anglais représente environ 250 tokens ou 1 200 caractères, et le coût du mécanisme d'attention croît avec le carré de la longueur de la séquence ; travailler directement au niveau des caractères exige donc environ vingt fois plus de calcul pour un même passage. La tokenisation est une étape de compression, soumise exactement au compromis exposé dans l'article sur la compression : on obtient des séquences plus courtes en renonçant à l'accès à la structure sous-jacente au token.

Il s'agit donc d'un compromis délibéré entre la visibilité à l'échelle des caractères et la longueur de la séquence, opéré avant même que le modèle ne voie quoi que ce soit, et son coût se manifeste précisément là où le détail au niveau des caractères était essentiel.

Une astuce de compression issue de 1994

Cette approche du découpage a une histoire singulière. Le codage par paires d'octets a été publié par Philip Gage en 1994 comme algorithme de compression de données, dans une revue d'informatique, pour réduire la taille des fichiers. Sa règle consistait à trouver la paire d'octets adjacents la plus fréquente et à la remplacer par un octet inutilisé, puis à répéter l'opération.

En 2016, Sennrich, Haddow et Birch l'ont reprise pour la traduction automatique, non pour compresser quoi que ce soit, mais pour bâtir un vocabulaire capable de représenter les mots rares sous la forme de fragments plutôt que d'échouer à les traiter.

Ainsi, une astuce de compression vieille de trente ans, conçue à une époque où la préoccupation était l'espace disque, détermine ce que les plus grands modèles d'aujourd'hui sont en mesure de percevoir.