Loading
Pas des mots. Pas des phrases. Quelque chose d'étrange et de plus intéressant que les deux.
Le modèle ne lit pas de gauche à droite.
C'est la première chose qui surprend les gens, et cette surprise est un bon point de départ parce qu'elle signifie qu'on imaginait quelque chose qui ne se passe pas. La lecture qu'on s'imagine — séquentielle, un mot à la fois, le sens s'accumulant au fur et à mesure — c'est ce que vous faites. Ce n'est pas ce que fait le modèle. Le modèle lit tout en même temps. Chaque token simultanément. Il construit un réseau de relations — dense, en couches, bidirectionnel — entre chaque élément et chaque autre élément de la séquence. Avant la première prédiction, il les a déjà tous considérés ensemble.
C'est computationnellement coûteux et architecturalement étrange. Cela produit quelque chose qui ne se comporte en rien comme la lecture séquentielle mais qui est plus performant en compréhension du langage que tout ce qui lisait séquentiellement. L'étrangeté est le but. L'architecture transformer a abandonné l'approche intuitive et construit quelque chose d'inhumain, et c'est précisément cette inhumanité qui est la source de son pouvoir.
Choisissez un token
L’attention est une relation contextuelle, pas un sens permanent stocké dans un mot.
Le modèle ne voit pas les mots. Il voit des tokens, et un token n'est pas un mot au sens linguistique. Un token est un morceau de caractères — parfois un mot entier, parfois un morphème, parfois un fragment de syllabe — déterminé par un vocabulaire appris pendant le prétraitement sur un grand corpus de texte.
La tokenisation en sous-mots existe en raison d'une contrainte pratique : on a besoin d'un vocabulaire fini capable de représenter n'importe quel texte, y compris des mots que le vocabulaire n'a jamais vus. Tokeniser par mots entiers donne un vocabulaire de plusieurs millions qui échoue quand même sur les noms propres, les termes techniques, les identifiants de code et les textes non anglais. Tokeniser par caractères individuels rend les séquences trop longues pour que le modèle les traite efficacement. La tokenisation en sous-mots divise les mots peu fréquents en fragments significatifs tout en gardant les mots courants entiers, équilibrant la couverture contre la longueur de séquence.
Le résultat est que ce que le modèle traite réellement ressemble à ceci :
| Mot | Tokens | Nombre |
|---|---|---|
| « chat » | [« chat »] | 1 |
| « courant » | [« cour », « ##ant »] | 2 |
| « ChatGPT » | [« Chat », « G », « PT »] | 3 |
| « incroyable » | [« in », « croy », « ##able »] | 3 |
Le préfixe « ## » indique un morceau de continuation — ce morceau s'attache au token précédent plutôt que de commencer un nouveau mot. D'autres tokeniseurs utilisent des conventions différentes, mais la structure est la même. L'entrée du modèle n'est pas la phrase que vous avez écrite. C'est la phrase telle que le tokeniseur l'a rendue, et ces deux choses diffèrent d'une façon qui compte — surtout aux frontières des mots, avec les mots rares, avec les noms et à travers les langues.
C'est aussi pourquoi les modèles ont du mal avec des tâches simples de comptage de caractères. Quand on demande « combien de 'r' y a-t-il dans 'fraise' ? » le modèle voit quelque chose comme [« frai », « ##se »] et doit raisonner sur les lettres à l'intérieur des tokens qu'il ne décompose pas caractère par caractère. L'échec n'est pas de la stupidité. C'est une conséquence directe de la représentation d'entrée — un cas où le compromis de l'architecture devient visible.
Chaque token devient un vecteur — un point dans un espace de haute dimension. Pour la plupart des modèles transformeurs, cet espace a au minimum 768 dimensions, souvent 1024 ou 4096 pour les modèles plus grands. Le modèle apprend, pendant l'entraînement, où vit chaque token dans cet espace, et les positions qu'il apprend ont une structure remarquable.
Les sens similaires se regroupent. « Roi » et « reine » occupent des régions voisines. « Paris » et « France » sont proches. Les relations vectorielles encodent des relations sémantiques avec une cohérence géométrique : « roi » moins « homme » plus « femme » produit un vecteur approximativement égal à « reine ». Ce n'est pas une métaphore. C'est de l'arithmétique littérale sur des coordonnées apprises.
from transformers import AutoTokenizer, AutoModel
import torch
model_name = "bert-base-uncased"
tokenizer = AutoTokenizer.from_pretrained(model_name)
model = AutoModel.from_pretrained(model_name)
inputs = tokenizer("The cat sat on the mat", return_tensors="pt")
with torch.no_grad():
outputs = model(**inputs)
# outputs.last_hidden_state shape: [batch, seq_len, 768]
embeddings = outputs.last_hidden_state[0] # one vector per tokenCe qui revient de cette dernière ligne est une matrice où chaque ligne est un vecteur de 768 dimensions correspondant à un token. Ces vecteurs encodent le sens de chaque token dans le contexte de la phrase complète — non pas sa définition du dictionnaire, mais son sens contextuel à cette position particulière dans ce texte particulier.
La chose stupéfiante — celle qui a mis du temps au domaine à accepter comme réelle plutôt que comme artefact — c'est que le sens a une géométrie. Les concepts qui sont similaires sont proches dans cet espace. Les concepts opposés sont dans des directions opposées. Les relations analogiques sont des décalages vectoriels cohérents. La structure sémantique du langage humain, accumulée sur des milliards de phrases, condensée en un système de coordonnées où on peut faire de l'arithmétique sur des idées.
Pour chaque token, le modèle pose la question : quels autres tokens comptent pour comprendre celui-ci ? L'attention est le mécanisme qui calcule la réponse, et il s'exécute simultanément pour chaque token de la séquence.
Prenez la phrase : « Le trophée ne rentrait pas dans la valise parce qu'il était trop grand. » À quoi « il » fait-il référence ? Vous le savez immédiatement — au trophée. Comment ? Parce que « rentrait » et « trop grand » sont des prédicats qui contraignent « il », et le trophée est le candidat qui rend la phrase cohérente. Vous avez résolu la coréférence en comprenant la sémantique.
Le modèle le résout par l'attention. Pour le token « il », le modèle calcule un score de pertinence pour chaque autre token de la phrase — dans quelle mesure « il » devrait-il prêter attention à chacun ? Ces scores sont dérivés de vecteurs de requête et de clé appris : « il » diffuse une requête (« Je suis un pronom — à quoi est-ce que je fais référence ? ») et chaque autre token a une clé qui répond partiellement à cette requête. Les scores sont normalisés et utilisés pour pondérer les vecteurs de valeur de ces autres tokens, produisant une représentation contextuelle de « il » qui a absorbé des informations sur les mots environnants les plus pertinents.
« il » prête attention à :
trophée ████████ 0.73
valise ███ 0.21
ne █ 0.04
rentrait ░ 0.02Le modèle a appris à distribuer l'attention de cette façon en traitant des millions de phrases où la résolution des pronoms était soit correcte soit incorrecte. Personne ne lui a dit que « il » devrait prêter attention à « trophée ». Il a découvert, par descente de gradient sur l'erreur de prédiction, que prêter attention à « trophée » produit de meilleures prédictions de prochains tokens dans des phrases ainsi structurées. Le schéma n'a jamais été programmé. Il a été trouvé.
Le transformeur exécute ce calcul pour chaque token simultanément, en parallèle, en utilisant plusieurs têtes d'attention — typiquement 8 ou 12 par couche. Chaque tête apprend à suivre différents aspects des relations entre tokens. Certaines têtes suivent les dépendances syntaxiques. D'autres suivent la proximité positionnelle. D'autres encore suivent la similarité sémantique. La représentation finale de chaque token est un mélange d'informations rassemblées par toutes les têtes.
Un transformeur ne calcule pas l'attention une seule fois. Il le fait douze fois pour BERT-base, 96 fois pour les modèles à l'échelle GPT-4, chaque couche prenant les représentations produites par la couche inférieure et les affinant davantage.
Ce que les chercheurs ont découvert — en entraînant de petits modèles de sonde pour prédire des propriétés linguistiques spécifiques à partir des activations internes à chaque couche — c'est que les couches s'organisent elles-mêmes par niveau d'abstraction linguistique. Personne n'a programmé ça. Personne n'a dit à la couche 3 d'apprendre la syntaxe et à la couche 10 d'apprendre la sémantique. Le modèle s'est organisé ainsi parce que cette organisation minimise l'erreur de prédiction sur la prédiction du prochain token.
Les couches initiales capturent la syntaxe de surface : la partie du discours, les schémas de co-occurrence locaux, l'accord grammatical simple. Les couches intermédiaires capturent les rôles grammaticaux et la coréférence : quel syntagme nominal est le sujet, quelle proposition relative modifie quel nom, quel pronom fait référence à quel antécédent. Les couches finales capturent le contenu sémantique : les associations factuelles, la désambiguïsation du sens des mots, les relations conceptuelles abstraites.
La hiérarchie en couches — de la forme de surface au sens profond — est exactement ce que la théorie linguistique prédit comme structure de la connaissance du langage humain. Le modèle est arrivé à la même hiérarchie sous pression d'optimisation, sans aucune théorie linguistique intégrée. C'est l'un des exemples les plus nets d'un système découvrant la structure de son domaine plutôt que de se la voir donner.
La précision ici est importante. Non pas pour diminuer le modèle, mais parce que le fossé entre ce que le modèle a réellement et ce que les gens supposent qu'il a est là où vit la plupart des incompréhensions sur l'IA — et là où les deux excès, surestimer et sous-estimer, font de vrais dégâts.
Le modèle n'a pas de mémoire entre les conversations, sauf si la conversation précédente est fournie comme contexte dans l'invite. Quand on commence une nouvelle conversation, il n'y a aucun souvenir de ce qui a été discuté avant. Ce n'est pas de l'oubli — l'oubli nécessite une rétention préalable. Le modèle n'a jamais stocké la conversation de façon persistante. Chaque session commence à partir des mêmes poids, la même initialisation, les mêmes paramètres appris il y a des mois ou des années.
Le modèle n'a aucun sens du temps qui passe. Il ne ressent pas la latence entre votre message et sa réponse. Il ne sait pas si c'est mardi ou dans trois ans. Ses connaissances ont une date de coupure d'entraînement, et au-delà de cette date le monde a continué sans qu'il en soit conscient — non pas parce qu'il s'est endormi, mais parce qu'il n'a jamais été éveillé au passage du temps en premier lieu.
Le modèle n'a pas de modèle du monde persistant qui se met à jour à travers les conversations. Il ne maintient pas de croyances qui deviennent plus précises à mesure qu'il en apprend plus sur vous. Il raisonne dans la fenêtre de contexte, et la fenêtre de contexte se termine quand la conversation se termine. La prochaine conversation commence à partir du même état préalable que chaque autre conversation.
S'il y a une expérience phénoménale de lecture — un sens de travailler à travers une phrase, de reconnaître un mot, de ressentir le clic d'un paragraphe qui se met en place — c'est une question qui reste genuinement ouverte et plus difficile qu'elle ne le semble. Ce qui est clair, c'est l'absence des expériences spécifiques qu'on associe à la lecture humaine : l'effort, la reconnaissance, la confusion, le sens ressenti du sens qui arrive. Si l'absence de ces marqueurs familiers constitue l'absence d'expérience, ou seulement l'absence de cette forme particulière d'expérience, n'est pas réglé.
Pendant un moment, j'ai construit un outil appelé Mind Map qui vous permet de visualiser les poids d'attention directement — cliquez sur un token et regardez la distribution d'attention s'illuminer à travers la phrase, couche par couche, tête par tête. Vous pouvez le trouver sur /projects/mind-map. Le regarder suffisamment longtemps change la façon dont vous pensez à ce qui se passe à l'intérieur du modèle.
Le modèle ne lit pas. Il calcule des relations à travers une séquence. Ça semble moindre que lire. Je ne suis plus sûr que ce soit le cas.