[PYTHON] Langage naturel: GPT - Transformateur de pré-formation génératif japonais

Cible

J'ai essayé GPT en utilisant Microsoft Cognitive Toolkit (CNTK).

Préparez un corpus japonais pour la formation. On suppose que NVIDIA GPU CUDA est installé.

introduction

Cette fois, j'ai préparé un corpus japonais et formé un modèle de génération de phrases japonais. Pour la division des mots, créez un modèle de sous-mots à l'aide de la phrase [1].

GPT Generative Pretraining Transformer (GPT) [2] utilise uniquement la partie Decoder de Transformer [3]. Les transformateurs sont introduits dans Natural Language: Machine Translation Part2-Neural Machine Translation Transformer.

De plus, cette fois-ci, comme dans le cas de Natural Language: BERT Part2 - Pré-formation non supervisée ALBERT, Pre-Layer Normalization Transformer [4] Je l'ai configuré. Les détails de la structure des couches sont illustrés dans la figure ci-dessous.

Nous avons également utilisé le paramétrage de l'intégration factorisée et le partage des paramètres entre couches pour réduire le poids du modèle.

gpt.png

L'attention multi-têtes de GPT utilise l'auto-attention masquée pour un apprentissage supervisé par retour automatique.

Paramètres en formation

La valeur initiale de chaque paramètre a été fixée à une distribution normale avec une variance de 0,02.

La fonction de perte utilise l'erreur d'entropie croisée.

Adam [5] a été utilisé comme algorithme d'optimisation. L'hyperparamètre d'Adam $ β_1 $ est défini sur 0,9 et $ β_2 $ sur la valeur par défaut de CNTK.

Pour le taux d'apprentissage, utilisez le taux d'apprentissage cyclique (CLR) [6], le taux d'apprentissage maximal est de 1e-4, le taux d'apprentissage de base est de 1e-8, la taille du pas est 10 fois le nombre d'époques et la politique est Réglez sur triangular2.

La formation du modèle a effectué 1 000 000 itérations par formation en mini-lots.

la mise en oeuvre

Environnement d'exécution

Matériel

・ Processeur Intel (R) Core (TM) i7-5820K 3,30 GHz ・ GPU NVIDIA Quadro RTX 6000 24 Go

Logiciel

・ Windows 10 Professionnel 1909 ・ CUDA 10.0 ・ CuDNN 7.6 ・ Python 3.6.6 ・ Cntk-gpu 2.7 ・ Cntkx 0.1.53 ・ Pandas 1.1.2 ・ Pièce sentencielle 0.1.91

Programme à exécuter

Le programme de formation est disponible sur GitHub.

jgpt_training.py


Commentaire

Je compléterai le contenu requis pour cette implémentation.

OpenAI GPT GPT a été proposé comme modèle de pré-apprentissage dans le traitement du langage naturel. Un modèle de langage à renvoi automatique qui prédit le mot $ w_ {t + 1} $ à partir du mot d'entrée $ w_1, w_2, ..., w_ {t} $ jusqu'au temps $ t $ au temps suivant $ t + 1 $. ..

p(w) = \prod^T_{t=1} p(w_{t+1} | w_1, w_2, ..., w_t)

Comme BERT, GPT effectue une pré-formation non supervisée, puis ajuste avec un ensemble de données de plusieurs tâches. Dans BERT, l'apprentissage non supervisé a été réalisé en utilisant un jeton [MASK] spécial, mais dans GPT, le pré-apprentissage non supervisé est effectué en utilisant l'auto-retour comme indiqué dans la figure ci-dessous.

autoregression.png

La figure ci-dessous montre l'attention multi-têtes de BERT et GPT. BERT autorise les informations bidirectionnelles, passées et futures, mais GPT masque les informations futures et n'utilise que des informations unidirectionnelles.

bert_gpt.png

GPT-2 GPT-2 [7] se compose de la normalisation de pré-couche, et Transformer Decoder a jusqu'à 48 couches et 1,5 milliard de paramètres.

GPT-2 a bien fonctionné sur plusieurs tâches dans Zero-shot en pré-entraînement avec un énorme ensemble de données de 40 Go appelé WebText, qui contient 8 millions de phrases.

GPT-3 GPT-3 [8] a acquis un modèle de langage plus précis en maximisant la taille du réseau et de l'ensemble de données de GPT-2.

Le modèle de GPT-3 a la même configuration que GPT-2, mais introduit Sparse Transformer [[9]](# reference) dans Transformer Decoder, et dispose de 175 billions de paramètres dans jusqu'à 96 couches. Il semble que l'apprentissage de GPT-3 coûte environ 490 millions de yens, et si la formation avec un seul GPU est effectuée, cela prendra environ 355 ans.

On dit que GPT-3 est capable de générer des phrases à un niveau qui ne vous met pas mal à l'aise lors de l'échange de phrases avec des humains, mais il a la faiblesse d'être inférieur au modèle BERT dans les tâches qui nécessitent des informations bidirectionnelles. Semble être manifeste.

résultat

Training Loss La figure ci-dessous est une visualisation du journal de la fonction de perte pendant l'entraînement. L'axe horizontal représente le nombre de répétitions et l'axe vertical représente la valeur de la fonction de perte.

gpt_logging.png

Exemple de génération de phrases japonaises

Voici un exemple de génération avec un modèle entraîné. Entrez un mot commençant par> et générez la suite.

>Humanité
L'humanité apprend cet utérus de bio-ingénierie reconstruit pour la première fois en économie et n'en change pas le prix.
>la magie
La magie est celle qui a un grand succès.
>Terre
L'importance de ce dernier est soulignée sur la terre.
>Aoi Hazuki est
Aoi Hazuki s'accroupit, ne sois pas si paisible.

On dirait qu'une phrase de type japonais a été générée, mais elle est devenue une phrase sans signification. Vous pouvez réaliser que vous avez besoin d'un modèle plus grand, d'un ensemble de données d'entraînement et de suffisamment de matériel pour l'exécuter afin de générer un niveau de texte confortable.

référence

Natural Language : Machine Translation Part2 - Neural Machine Translation Transformer Natural Language : BERT Part2 - Unsupervised pretraining ALBERT

  1. Taku Kudo and John Richardson. "SentencePiece: A simple and language independent subword tokenizer and detokenizer for Neural Text Processing", arXiv preprint arXiv:1808.06226, (2018).
  2. Alec Radford, Karthik Narasimhan, Tim Salimans, and Ilya Sutskever. "Improving Language Understanding by Generative Pre-Training", (2018): 12.
  3. Ashish Vaswani, et. al. "Attention Is All You Need", Advances in neural information processing systems. 2017. p. 5998-6008.
  4. Ruibin Xiong, Yunchang Yang, Di He, Kai Zheng, Shuxin Zheng, Chen Xing, Huishuai Zhang, Yanyan Lan, Liwei Wang, and Tie-Yan Liu . "On Layer Normalization in the Transformer Architecture", arXiv preprint arXiv:2002.04745 (2020).
  5. Diederik P. Kingma and Jimmy Lei Ba. "Adam: A method for stochastic optimization", arXiv preprint arXiv:1412.6980 (2014).
  6. Leslie N. Smith. "Cyclical Learning Rates for Training Neural Networks", 2017 IEEE Winter Conference on Applications of Computer Vision. 2017, p. 464-472.
  7. Alex Radford, Jeffrey Wu, Rewon Child, David Luan, Dario Amodei, and Ilya Sutskever. "Language Models are Unsupervised Multitask Learners", OpenAI blog 1.8 (2019): 9.
  8. Tom B. Brown, et al. "Language Models are Few-Shot Learners", arXiv preprint arXiv:2005.14165 (2020).
  9. Rewon Child, Scott Gray, Alec Radford, and Ilya Sutckever. "Generating Long Sequences with Sparse Transformers", arXiv preprint arXiv:1904.10509 (2019).

Recommended Posts

Langage naturel: GPT - Transformateur de pré-formation génératif japonais
[Traitement du langage naturel] Prétraitement avec le japonais
Langage naturel: Word2Vec Part1 - Corpus japonais
Langage naturel: BERT Part1 - Corpus Wikipedia japonais
Natural Language: Machine Translation Part2 - Transformateur de traduction automatique neurale
Langage naturel: BERT Part2 - Préentraînement non supervisé ALBERT
Quoi qu'il en soit, classez immédiatement le langage naturel [simple transformateur, transformateur]
Python: traitement du langage naturel
RNN_LSTM2 Traitement du langage naturel