BERT n’est qu’une étape de diffusion textuelle
(nathan.rs)- Les modèles de langage masqué comme BERT et RoBERTa peuvent aussi être interprétés comme des modèles de diffusion textuelle.
- Contrairement aux auto-régressifs (p. ex. GPT), la génération par blocs et une approche de restauration progressive sont possibles.
- En entraînant avec un taux de masquage ajusté par étape, il a été vérifié expérimentalement que RoBERTa peut aussi générer un texte naturel.
- Même sans changer la structure existante, il est possible d’obtenir des capacités de génération en ne modifiant que l’objectif d’entraînement.
- En comparaison avec GPT-2, le modèle de diffusion basé sur RoBERTa produit aussi des résultats de génération de texte cohérents jusqu’à un certain niveau.
Aperçu
Le Gemini Diffusion publié par Google DeepMind est un modèle de langage basé sur la diffusion qui génère le texte en blocs en une seule passe, contrairement aux modèles de la famille GPT. Cette méthode approche la génération en affinant progressivement un bruit aléatoire. Selon l’examen de l’article Large Language Diffusion Models, la diffusion de langage discrète est une généralisation du Masked Language Modeling (MLM). Concrètement, cette idée a été explorée expérimentalement pour vérifier si les modèles de type BERT pouvaient également générer du texte.
Remarque : le papier DiffusionBERT valide ensuite ce même type d’idée de manière plus stricte.
Brève histoire du Transformer
Le Transformer, proposé initialement en 2017, avait une architecture encodeur-décodreur. En 2018, en séparant encodeur (BERT : bidirectionnel, centré sur la restauration masquée) et décodeur (GPT : auto-régressif, centré sur la prédiction séquentielle), deux familles de modèles spécialisées ont émergé.
- Encodeur seul (famille BERT)
- Reçoit le contexte global et masque certaines parties avec
<MASK>pour les reconstruire à partir du reste - Forte performance pour les représentations de phrase, la classification, etc.
- Reçoit le contexte global et masque certaines parties avec
- Décodeur seul (famille GPT)
- Prédit le token suivant à partir d’un ordre donné
- Marque ses performances en génération, résumé, traduction, etc.
BERT a été utilisé directement pour la classification, mais la famille GPT a fini par couvrir des usages plus variés grâce à de meilleures capacités de génération.
Modèles de diffusion de langage discret
Les modèles de diffusion ont été popularisés à l’origine pour la génération d’images.
Dans le cas des images :
- Processus direct : ajout progressif d’un bruit gaussien à une image propre jusqu’à un état de bruit pur
- Processus inverse : répéter le débruitage progressivement avec un modèle de deep learning pour restaurer les données d’origine
Pour les appliquer au texte, la méthode la plus simple est le processus de bruitage basé sur le masquage.
- Direct (masquage)
- À t=0, texte d’origine ; le nombre d’étapes augmente et certains tokens sont remplacés aléatoirement par
<MASK> - À l’étape finale, tous les tokens sont remplacés par
<MASK>
- À t=0, texte d’origine ; le nombre d’étapes augmente et certains tokens sont remplacés aléatoirement par
- Inverse (débruitage)
- L’encodeur Transformer apprend à restaurer les tokens d’origine sous une configuration de masquage donnée
- La reconstruction est facile quand le taux de masquage est faible, et devient plus difficile à mesure que ce taux augmente
- En répétant du taux de masquage élevé vers un taux faible, on peut générer une séquence complète
Dans ce cadre de diffusion, le modèle apprend en sommant les pertes de débruitage sur plusieurs étapes et différents taux de masquage. L’objectif de reconstruction masquée de BERT est en réalité un sous-ensemble de la diffusion textuelle. En combinant un planning de taux de masquage avec un débruitage itératif, l’objectif de BERT peut être étendu à une procédure de génération en langage naturel.
Expérience RoBERTa Diffusion
RoBERTa, publiée en 2019, se caractérise par des hyperparamètres et des données étendus par rapport à BERT, ainsi qu’un objectif d’entraînement plus simple (MLM Only).
Dans les expériences, les poids de base de RoBERTa, le tokenizer et Trainer ont été utilisés avec les bibliothèques Hugging Face transformers et datasets.
Le fine-tuning sur le jeu de données WikiText s’est déroulé selon le processus suivant :
- Pour chaque batch, un des 10 niveaux de l’échelle de diffusion (
mask_probs: 1.0~0.1) est échantillonné puis utilisé pour le masquage - Avec un
diffusion_collatorpersonnalisé, le taux de masquage est choisi puis appliqué de manière probabiliste token par token - Pour conserver le contexte du prompt, les 16 premiers tokens sont toujours conservés
Masquage des données (collator personnalisé) :
- Après padding de chaque lot de tokens d’un exemple, le taux de masquage est choisi aléatoirement
<MASK>est appliqué de manière probabiliste à tous les tokens sauf les 16 premiers- Les données masquées et l’ensemble des labels de vérité terrain sont renvoyés
Inférence (génération) :
- Séquence d’entrée de longueur 256 tokens : 16 premiers tokens comme prompt, le reste en
<MASK> - À chaque étape, les tokens prédis par le modèle sont échantillonnés puis remplis, puis une certaine proportion est à nouveau remasquée
- Répéter en diminuant progressivement le taux de masquage, jusqu’à ce que la séquence entière soit restaurée à la fin
Résultats de génération d’exemple :
- Le texte généré est en réalité assez cohérent, avec un contexte de continuation naturel après le prompt
- Certaines particularités semblent dues au format de prétraitement des données WikiText (p. ex. le tiret
@-@)
Comparaison avec GPT-2
- GPT-2 est un peu plus rapide et légèrement plus cohérent, mais RoBERTa Diffusion montre déjà des performances inattendues (avec un fort potentiel d’amélioration incrémentale)
- De nouvelles méthodes comme AR-Diffusion, Skip-Step Diffusion et des optimisations supplémentaires pourraient améliorer qualité et vitesse
Conclusion
- Un modèle de langage masqué conçu comme RoBERTa, entraîné avec des taux de masquage ajustés étape par étape, peut devenir un moteur de génération de texte naturel
- La méthode d’entraînement basée uniquement sur la dégradation/restauration progressive du texte via les tokens
<MASK>permet de confirmer la possibilité de le transformer en modèle totalement génératif - En modifiant uniquement l’objectif d’entraînement sans changer l’architecture elle-même, on peut obtenir des capacités de génération
- En fin de compte, les modèles de la famille BERT coïncident essentiellement avec un modèle de diffusion textuelle
1 commentaires
Avis Hacker News
Quand BERT est apparu pour la première fois, tout le monde a essayé de faire de la génération de texte, mais cela ne marchait généralement pas très bien ; un article de référence à ce sujet est ici. Savinov et al. chez DeepMind ont montré qu’en n’appliquant que deux étapes pendant l’entraînement et en randomisant la probabilité de masquage, cela pouvait fonctionner de manière assez exploitable
Après plusieurs tentatives la semaine dernière pour faire discuter BERT, j’ai appris cela grâce à ce billet. J’ai encore des idées que j’aimerais tester, donc je continue à expérimenter avec plaisir blog associé
Je faisais partie du grand groupe de personnes qui considéraient que BERT ne pouvait servir que d’encodeur pur, par exemple pour mesurer la similarité sémantique et pour la classification, et non pour la génération de texte
À ma connaissance, c’est cet article de 2021 (page 5) qui a signalé ce lien pour la première fois. Ils ont tenté, en diffusion textuelle, de corrompre les mots par d’autres mots sémantiquement proches, mais il s’est avéré plus simple de faire retrouver au modèle les mots masqués. L’histoire de cette approche remonte bien plus loin, jusqu’à cet article, qui avait déjà produit un MLM génératif sans le décrire avec les mathématiques de la diffusion
C’est encore plus ancien que ça. En 2014, Li Yao et al. ont montré dans cet article l’équivalence entre les modèles autorégressifs (prédiction du token suivant) et les réseaux stochastiques génératifs (autoencodeurs de débruitage, précurseurs des modèles de diffusion). Ils soutenaient que l’échantillonnage parallèle approxime bien l’échantillonnage séquentiel, et dans mes travaux de 2016 (Counterpoint by Convolution, lien), j’ai appliqué cette méthode en expliquant qu’elle donnait même de meilleures performances. Malheureusement, comme c’était un article applicatif, il n’a pas reçu beaucoup de citations côté diffusion. Je pense qu’il existe des racines encore plus anciennes
Moi aussi, je me souviens de cet article comme de la première référence l’ayant traité formellement (après avoir vu BERT, on s’attend à ce que les chercheurs NLP pensent au concept de diffusion). Une collection de premières références sur la diffusion textuelle que j’avais rassemblée il y a 3 ans est ici
À titre de référence, l’article pertinent est aussi disponible ici
Les approches fondées sur la diffusion donnent l’impression d’être plus proches de ce qui se passe dans le cerveau animal. Quand je parle, je n’ai pas l’impression de produire les mots un par un à partir du mot précédent ; j’ai plutôt le sentiment qu’une idée générale un peu floue se forme d’abord dans ma tête, puis qu’une grande partie du processus consiste à la mettre en langage
Les LLM autorégressifs non plus ne se contentent pas vraiment de prédire bêtement le mot suivant. Même si un token sort à la fois à chaque forward pass, on voit clairement apparaître dans l’espace latent de la planification à long terme et du raisonnement. Et quand nous parlons réellement, nous construisons aussi une vue d’ensemble dans notre tête avant de parler séquentiellement ; on ne peut donc pas dire que l’approche par diffusion nous ressemble davantage
Personnellement, j’ai bien aimé ce billet de blog qui décrit la diffusion comme une forme d’« autorégression spectrale ». La diffusion a tendance à prédire d’abord les caractéristiques de basse fréquence, puis celles de haute fréquence
À chaque fois que je modifie un message cinq fois sur Slack, j’ai souvent l’impression d’être moi-même un modèle de diffusion
Quand on parle ou qu’on écrit, on émet effectivement les mots de façon séquentielle. Mais avant même de commencer une phrase, on a déjà en tête l’idée générale. C’est similaire au fait qu’un LLM planifie d’abord la direction globale dans l’espace latent avant d’émettre les tokens
Des travaux d’interprétabilité ont montré que les LLM autorégressifs planifient aussi en interne à l’avance ce qu’ils vont dire
Personnellement, j’ai l’impression qu’il serait plus naturel de prendre en charge des éditions par insertion/suppression à la Levenshtein plutôt que de n’autoriser que le masquage et le remplissage. Par exemple, si, à la dernière étape, on veut remplacer un mot par un synonyme plus long, on ne peut pas décaler vers la droite, ce qui n’est pas facile dans cette structure de diffusion
Ce genre d’expériences simples est intéressant car il permet de saisir rapidement les principes. Ce qui est frustrant avec les modèles diffuseurs de texte, c’est que les tokens doivent être traités comme des valeurs discrètes et non continues. Dans le cas des images, les pixels sont continus, donc on peut leur ajouter du bruit naturellement, mais les tokens textuels ne le sont pas. On finit généralement par faire du remplacement complet ; il existe bien plusieurs approches qui ajoutent du bruit dans l’espace des embeddings ou apprennent directement les embeddings, mais elles sont toutes plus complexes que la diffusion d’images
Personnellement, j’attends davantage d’approches comme cet article. Il combine une diffusion latente continue avec une génération de texte basée sur un transformer autorégressif. L’autoencodeur et le transformer peuvent être entraînés simultanément (ou indépendamment)
La première fois que j’ai vu un modèle de diffusion textuelle, je me suis dit : « Mais ce n’est pas simplement du MLM ? » Ce qui avait retenu mon attention, c’était MaskGIT. Cette méthode ne mériterait vraiment le nom de diffusion, à mon avis, que si le modèle était entraîné à remplacer des tokens incorrects par les bons, car la force de la diffusion continue est sa robustesse au bruit. Mais, en pratique, l’idée de générer de mauvais tokens n’est pas si simple à mettre en œuvre, donc j’ai l’impression que cela n’a pas encore été beaucoup exploré
J’ai expérimenté le MLM au niveau des octets UTF8 en essayant un modèle de traduction non structuré. J’utilisais du curriculum learning et une corruption aléatoire progressive. Si l’objectif est simplement d’ajouter du bruit, il suffit de remplacer des index aléatoires par des valeurs d’octet aléatoires. Par exemple, on donne en entrée le motif suivant
On réévalue itérativement toute la séquence cible, afin qu’il n’y ait pas de changement discontinu dans le domaine d’apprentissage quand le niveau de difficulté augmente. Au final, j’ai cessé de me soucier de la terminologie ou de la classification ; ce qui m’importait n’était pas de savoir si « c’est de la diffusion », mais simplement « est-ce que ça marche bien ? »
Je serais aussi curieux de voir la comparaison avec electra
J’avais envie d’essayer de fine-tuner un modèle de complétion de code inline pour voir s’il pouvait atteindre un niveau proche de Cursor (en pratique ce serait sans doute difficile, mais amusant). Mais il n’existe pas encore vraiment de modèle de diffusion open source utilisable comme base, donc j’attends ça avec intérêt
Ce qui rendait les modèles de diffusion d’images séduisants, c’était le fait qu’ils créent des images à partir de bruit aléatoire. Du coup, je me demande pourquoi les modèles de diffusion textuelle démarrent à partir de tokens vides entièrement masqués plutôt qu’à partir de tokens aléatoires
Cela dépend de la tâche visée. Pour une simple complétion de texte, on peut fournir la phrase d’entrée sans masquage, puis laisser le modèle remplir les tokens masqués qui suivent. Si l’on veut faire de l’édition de code, etc., on peut ne masquer que les parties à modifier et les faire remplir séquentiellement. La force des modèles de diffusion textuelle réside dans leur capacité à effectuer de vraies éditions, comme l’édition de code (les LLM autorégressifs ont besoin d’un système séparé qui édite à partir d’instructions). Si l’on entraîne le modèle avec une tête d’édition de code vraiment adaptée, on pourrait améliorer la vitesse et l’efficacité de nombreuses tâches de programmation. J’ai l’impression qu’à l’avenir, ce genre de fonctionnalité sera intégré naturellement dans des produits comme GPT Codex
Tout le monde n’utilise pas uniquement une approche qui démarre avec des tokens vides. Certains essais partent de tokens aléatoires, d’autres de masques, d’autres encore de vecteurs d’embedding