Le chemin, étape par étape, appris en pratiquant sur notre dataset (160 000 critiques Allociné). Chaque étape est entraînée sur ce projet, à coût zéro, et manipulable ci-dessous.
Le modèle compte les mots (TF-IDF) et apprend un poids par mot : « magnifique » pousse vers positif, « navet » vers négatif. Sortie : scores → softmax → probabilités, entraîné à la log-loss. 93,67 % de bonnes réponses sur le test — mais aucune notion du sens ni de l'ordre des mots.
Chaque mot reçoit un vecteur de 100 nombres, initialisé au hasard. Puis un jeu tout bête : depuis chaque mot, prédire ses voisins dans la phrase (word2vec skip-gram). À chaque erreur, on ajuste les vecteurs par descente de gradient. Après 5 passages sur nos 14 millions de mots (92 s de CPU), les mots utilisés dans les mêmes contextes ont convergé vers les mêmes régions de l'espace : la distance est devenue du sens — sans qu'on ait jamais défini un seul mot.
Problème de l'étape 1 : « avocat » a un seul vecteur, qu'on parle du fruit ou du métier. L'attention corrige ça : chaque mot recalcule son vecteur en regardant tous les autres mots de la phrase. Concrètement, chaque mot fabrique trois choses à partir de son vecteur :
🔬 Tutoriel pas à pas : suis ta propre phrase à travers chaque étape du Transformer — tokenisation, vecteurs, scores, softmax, verdict, avec les vrais nombres du modèle.
run-003 : on a écrit ce bloc à la main (training/mini_transformer.py, ~50 lignes) et on l'a entraîné sur nos 160 000 critiques, en initialisant les embeddings avec les vecteurs de run-002. Le classement se fait via un token spécial [CLS] ajouté en tête de phrase : son attention nous montre quels mots le modèle a regardés pour décider.
On change la question : non plus « positif ou négatif ? » (2 classes) mais « que vient-il ensuite ? ». On ajoute la prédiction à la séquence, on recommence — et le modèle crée. Même softmax, même log-loss que l'étape 0, plus un masque causal (interdiction de regarder la suite).
run-004 → 004b : on l'a fait sur des dessins plutôt que des mots — notre bloc Transformer empilé 6 fois (4,9 M params), entraîné sur notre premier GPU gratuit Kaggle avec 178 000 dessins humains (QuickDraw) à prédire le coup de crayon suivant. La version CPU (run-004 : 3 blocs, 43 000 dessins) gribouillait ; la version GPU dessine — la preuve par l'image que données × taille × époques, ça compte.
🎨 Regarde le robot dessiner un chat, une maison ou un vélo — trait par trait, avec ses candidats et leurs probabilités à chaque coup de crayon, en pas à pas si tu veux.
Un modèle qui prédit le mot suivant continue le texte ; pour qu'il réponde, on le ré-entraîne sur des exemples de dialogues (fine-tuning QLoRA — prévu sur GPU Kaggle gratuit).