Basé sur le transformateur, comment améliorer les résultats de la génération de texte ?

Aug 19 2020

Si je ne pré-entraîne pas le modèle de génération de texte comme BART, comment améliorer le résultat basé sur un transformateur comme tensor2tensor ?

Quelles sont les idées d'amélioration pour le transformateur dans la tâche de génération de texte ?

Réponses

1 noe Aug 19 2020 at 14:41

Si vous avez beaucoup de données disponibles pour vous entraîner, vous devez appliquer les techniques utilisées dans les grands modèles de transformateurs, comme GPT-2 : modèles très profonds (48 couches pour les paramètres 1,5 B), initialisation modifiée, pré-normalisation et tokénisation réversible. . Vous pouvez également appliquer les modèles d'attention clairsemés localement groupés de GPT-3 .

Si vous avez de très petites données d'entraînement, vous pouvez appliquer les techniques agressives "non écrites" décrites dans ce tweet , à savoir l'augmentation des données, l'abandon discret par intégration, l'abandon normal et la perte de poids, et beaucoup de temps d'entraînement pour les patients.

Mise à jour : J'ai l'impression que le fil de tweet auquel j'ai fait référence est important, alors voici les tweets les plus pertinents :

  • Comment pouvez-vous entraîner avec succès des transformateurs sur de petits ensembles de données comme PTB et WikiText-2 ? Les LSTM sont-ils meilleurs sur de petits ensembles de données ? J'ai exécuté 339 expériences d'une valeur de 568 heures GPU et j'ai trouvé quelques réponses. Je n'ai pas le temps d'écrire un article de blog, alors voici un fil Twitter à la place.

  • Pour donner un peu de contexte : tout cela est dû à ma frustration passée de répliquer les résultats de Transformer-XL sur PTB et d'avoir de très mauvais résultats sur WikiText-2 (WT2). Sur WT2, mon meilleur modèle après plus de 200 expériences était de 90 personnes, ce qui est loin des lignes de base LSTM standard (65,8 personnes).

  • ...

  • L'idée clé est la suivante : dans le régime des petits ensembles de données, tout est question d'augmentation des ensembles de données. L'analogue de la vision par ordinateur est que vous obtenez de bien meilleurs résultats, en particulier sur de petits ensembles de données, si vous effectuez certaines augmentations d'ensembles de données. Cela régularise également le modèle.

  • Le gain de performances le plus spectaculaire provient de l'abandon de l'intégration discrète : vous intégrez comme d'habitude, mais maintenant, avec une probabilité p, vous mettez à zéro le vecteur de mots entier. Cela s'apparente à la modélisation du langage masqué, mais le but n'est pas de prédire le masque - juste un LM normal avec un contexte incertain.

  • Le deuxième facteur le plus important est l'abandon d'entrée régulier : vous prenez les éléments d'intégration et d'abandon avec une probabilité p. Cela a également un effet d'augmentation des données très similaire à la suppression de pixels aléatoires pour les images. Qu'est-ce qu'une bonne façon d'y penser ? 1/2

  • Rappelez-vous que nous pouvons faire King-man+woman=Queen ? Imaginez maintenant que l'abandon d'entrée supprime le composant "man" de "King". Cela oblige le modèle à répartir des informations spécifiques (le sexe dans ce cas) en plusieurs dimensions pour améliorer la généralisation, ce qui le rend plus robuste. 2/2

  • Sinon, c'est un jeu de régularisation supplémentaire (plus d'abandon + perte de poids) et de patience. Je peux former un bon modèle sans ces astuces en 15 minutes et obtenir 97 personnes. Si j'applique tous ces abandons, le modèle passe après 7h d'entraînement à 63,4 personnes (mieux que LSTM).

  • Vous pouvez également appliquer ces recettes d'augmentation de données à de grands ensembles de données, mais personne ne souhaite s'entraîner pendant des mois sur WT-103 pour quelques points. À mon avis, les techniques qui nécessitent autant de calculs supplémentaires sont plus nuisibles qu'utiles pour la communauté. 1/2

  • Ici, le code passe au dépôt public Transformer-XL sur lequel mes résultats sont basés :https://github.com/TimDettmers/transformer-xl/tree/wikitext2

  • Avec mes modifications apportées au référentiel public Transformer-XL, vous pouvez exécuter ce script pour descendre à 63,4 personnes sur WT2 :https://github.com/TimDettmers/transformer-xl/blob/wikitext2/pytorch/replicate_wt2.sh