[PYTHON] Langage naturel: BERT Part2 - Préentraînement non supervisé ALBERT

Cible

Ceci est une continuation de BERT utilisant le Microsoft Cognitive Toolkit (CNTK).

Dans la partie 2, ALBERT sera pré-appris en utilisant le Wikipedia japonais préparé dans la partie 1. On suppose que NVIDIA GPU CUDA est installé.

introduction

Natural Language: BERT Part1 --Japanese Wikipedia Corpus a préparé un corpus de pré-apprentissage en utilisant Wikipedia japonais.

Dans la partie 2, nous créerons et formerons un modèle de pré-apprentissage non supervisé.

BERT Représentations d'encodeur bidirectionnel à partir de transformateurs (BERT) [1] utilise uniquement la partie Encoder de Transformer [2]. Les transformateurs sont introduits dans Natural Language: Machine Translation Part2-Neural Machine Translation Transformer.

Cette fois, nous avons implémenté le modèle de base de ALBERT [3], qui est une version allégée de BERT, et l'avons configuré avec Pre-Layer Normalization Transformer [4]. Les détails de la structure des couches sont illustrés dans la figure ci-dessous.

bert.png

L'attention multi-têtes de BERT utilise l'auto-attention, qui permet un apprentissage interactif.

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 pour la prédiction de mots masqués dans LM masqué et l'entropie croisée binaire pour l'identification dans la prédiction de phrases.

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 1e-4, le taux d'apprentissage de base est 1e-8, la taille du pas est 10 fois le nombre d'époques et la stratégie est triangulaire2. Je l'ai mis à.

La formation du modèle a effectué 3 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.33 ・ MeCab 0.996 ・ Numpy 1.17.3 ・ Pandas 0.25.0

Programme à exécuter

Le programme de formation est disponible sur GitHub.

bert_pretraining.py


Commentaire

Je compléterai le contenu principal de cette implémentation.

Masked LM and Sentence Prediction Dans le pré-apprentissage BERT, la phrase d'entrée commence par le mot spécial [CLS] et se compose de deux phrases, comme le montre la figure ci-dessous. Un mot spécial [SEP] est inséré à la fin de chaque phrase. Il effectue ensuite deux types d'apprentissage appelés LM masqué et prédiction de phrases.

pretraining.png

Masked LM Dans Masked LM, 15% de la phrase d'entrée est remplacée par le mot spécial [MASK] comme phrase d'entrée, et le mot à la même position dans la phrase d'entrée d'origine est la réponse correcte.

Pour prédire le mot masqué, utilisez le processus suivant pour prédire le mot correct. À ce stade, le gradient de la position masquée uniquement est utilisé pour mettre à jour les paramètres.

bert_masked_lm


def bert_masked_lm(encode):
    """ Masked Language Model """
    h = Dense(num_hidden, activation=Cx.gelu_fast, init=C.normal(0.02))(encode)
    h = LayerNormalization()(h)
    return Dense(num_word, activation=None, init=C.normal(0.02))(h)

Cependant, [MASK] est un mot spécial utilisé uniquement dans le pré-apprentissage BERT, ce qui contribue à la non-naturalité du modèle de langage lors du réglage fin. Par conséquent, BERT utilise les stratégies suivantes pour réduire la non-nature.

・ 80% de chances de remplacer par [MASQUE]. ・ 10% de chances de remplacer par un mot aléatoire. ・ Il y a 10% de chances de le laisser tel quel sans le remplacer. Cela a le sens de se rapprocher de l'expression réelle du mot.

Next Sentence Prediction La prédiction de la phrase suivante vise à acquérir une compréhension contextuelle en résolvant le problème de classification binaire de savoir si deux phrases contenues dans la phrase d'entrée sont connectées ou non.

Pour cette classification, la couche masquée (pooler) à la position [CLS] de l'instruction d'entrée est extraite en tant que quantité d'entités, et la jointure complète et la fonction sigmoïde sont appliquées.

bert_sentence_prediction


def bert_sentence_prediction(pooler):
    """ Sentence Prediction """
    h = C.sequence.unpack(pooler, padding_value=0, no_mask_output=True)[0, :]
    return Dense(1, activation=C.sigmoid, init=C.normal(0.02))(h)

50% des données d'apprentissage sont deux phrases consécutives, et les 50% restants sont un exemple négatif discontinu en reliant des phrases au hasard.

A Lite BERT Un Lite BERT (ALBERT) améliore la réduction de poids et la compréhension contextuelle des problèmes de BERT.

Factorized embedding parameterization Le nombre de paramètres de la couche incorporée est réduit par la décomposition factorielle.

En supposant que le nombre de mots est $ V $, la dimension du calque caché est $ H $ et la dimension incorporée de la dimension inférieure est $ E $, le nombre de paramètres passe de $ V \ fois H $ à $ V \ fois E + E . Il peut être réduit aux fois H $.

Si le nombre réel de mots est $ E = 32 000 $, la dimension du calque masqué est $ H = 768 $, et la dimension incorporée inférieure est $ E = 128 $,

V \times H = 24,576,000 \\
V \times E + E \times H = 4,096,000 + 98,304 = 4,194,304

On voit que le nombre de paramètres peut être réduit d'environ 83% dans la couche intégrée.

Cross-layer parameter sharing ALBERT partage les paramètres de réseau Feedfoward Position -wise avec chaque tête d'auto-attention de Transformer Encoder dans les 12 couches.

Cela peut réduire considérablement le nombre de paramètres.

Sentence-Order Prediction Puisque la prédiction de la phrase suivante est un problème simple pour comprendre le contexte, son utilité est remise en question par RoBERTa [7] et ainsi de suite.

Par conséquent, ALBERT entraîne la compréhension du contexte avec la prédiction de l'ordre des phrases au lieu de la prédiction de la phrase suivante.

C'est très facile à mettre en œuvre, préparez simplement un exemple négatif de connexion aléatoire d'instructions, mais un exemple négatif d'échange de deux instructions.

GELU Unités linéaires d'erreur gaussienne (GELU) [8] est proposée comme une fonction d'activation qui combine Dropout [9], Zoneout [10] et ReLU. Par conséquent, il devrait avoir pour effet de régulariser de manière probabiliste l'entrée avec une fonction divisible et lisse. GELU ressemble à la figure ci-dessous.

gelu.png

GELU est exprimé par la formule suivante.

GELU(x) = x \Phi(x)

Ici, $ \ Phi $ représente la fonction de densité de probabilité cumulative de la distribution normale, et en supposant que l'entrée $ x $ est plus proche de la moyenne 0 et de la variance 1 par la normalisation par lots et la normalisation des couches, la distribution normale standard Utilisez la densité de probabilité cumulative.

\Phi(x) = \frac{1}{2} \left( 1 + erf \left( \frac{x - \mu}{\sqrt{\sigma^2}} \right) \right) \\
erf(x) = \frac{2}{\sqrt{\pi}} \int^x_0 e^{-u^2} du

Où $ erf $ représente la fonction d'erreur. L'implémentation utilise la formule suivante, qui est une approximation de la formule ci-dessus.

GELU(x) \approx 0.5x \left( 1 + \tanh \left[ \sqrt{\frac{2}{\pi}}(x + 0.044715x^3) \right] \right)

Cependant, la formule d'approximation ci-dessus prend beaucoup de temps à calculer, donc dans cette implémentation, nous avons utilisé la formule suivante, qui est une autre approximation de la formule ci-dessus.

GELU(x) \approx x\sigma(1.702x)

Où $ \ sigma $ représente une fonction sigmoïde.

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.

bert_logging.png

Prédiction LM masquée

J'ai demandé à ALBERT formé de résoudre le problème de remplissage des phrases. Ici, la réponse est la phrase originale, masquée est la phrase originale avec une partie de la phrase remplacée par [MASK], et Albert prédit le mot à la position [MASK].

answer :L'humanité doit évoluer en utilisant correctement l'intelligence.
masked :Humanité[MASK]Doit être utilisé correctement pour évoluer.
albert :L'humanité doit évoluer en utilisant correctement les êtres vivants.

Visualisation de l'auto-attention

La figure ci-dessous montre une visualisation de la carte Attention pour chaque tête de l'auto-attention sur les 11e et 12e couches de l'encodeur, et la carte des couleurs est affichée comme chaude.

Encoder 11

enc11.png

Encoder 12

enc12.png

BERT fine-tuning Le motif original de BERT est l'apprentissage par transfert du modèle de pré-apprentissage. Par conséquent, en utilisant le modèle appris à l'avance cette fois-ci, l'apprentissage par transfert a été effectué avec la tâche de classification de document de livingoor NEWS Corpus utilisée dans Natural Language: Doc2Vec Part1 --livedoor NEWS Corpus. Je l'ai essayé.

Prétraitement et analyse morphologique des données textuelles À l'aide des dictionnaires MeCab et NEologd, nous n'avons extrait que la nomenclature, les verbes et les adjectifs, supprimé les mots vides, puis converti les mots en identifiants dans le modèle SentencePiece.

Cette fois, nous avons formé 5 Epoch en plus de 9 classifications de entièrement couplé à la sortie de Pooler.

Similaire à Natural Language: Doc2Vec Part2 --Document Classification, l'évaluation des performances utilisant les données de vérification a donné les résultats suivants. 10 Epoch de Doc2Vec a des performances inférieures à 90%.

Accuracy 75.56%

En raison de contraintes de temps, la pré-formation d'ALBERT n'a pu entraîner qu'une seule époque en pratique, et le modèle était trop complexe pour le problème, qui pouvait être à l'origine de la dégradation des performances.

référence

Natural Language : Doc2Vec Part1 - livedoor NEWS Corpus Natural Language : Doc2Vec Part2 - Document Classification Natural Language : BERT Part1 - Japanese Wikipedia Corpus

  1. Jacob Devlin, Ming-Wei Chang, Kenton Lee, Kristina Toutanova. "BERT: Pre-training of Deep Bidirectional Transformers for Language Understanding", arXiv preprint arXiv:1810.04805, 2018.
  2. Ashish Vaswani, et. al. "Attention Is All You Need", Advances in neural information processing systems. 2017. p. 5998-6008.
  3. Zhenzhong Lan, Mingda Chen, Sebastian Goodman, Kevin Gimpel, Piyush Sharma, and Radu Soricut. "ALBERT: A Lite BERT for self-supervised learning of language representations", arXiv preprint arXiv:1909.11942 (2019).
  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. Yinhan Liu, Myle Ott, Naman Goyal, Jingfei Du, Mandar Joshi, Danqi Chen, Omer Levy, Mike Lewis, Luke Zettlemoyer, and Veselin Stoyanov. "RoBERTa: A Robustly Optimized BERT Pretraining Approach." arXiv preprint arXiv:1907.11692 (2019).
  8. Dan Hendrycks and Kevin Gimpel. "Gaussian Error Linear Units(GELUs)", arXiv preprint arXiv:1606.08415, (2016).
  9. Nitish Srivastava, Geoffrey Hinton, Alex Krizhevshky, Ilya Sutskever, and Ruslan Salakhutdinov. "Dropout: A Simple Way to Prevent Neural Networks from Overfitting", The Journal of Machine Learning Research 15.1 (2014) p. 1929-1958.
  10. David Krueger, Tegan Maharaj, János Kramár, Mohammad Pezeshki, Nicolas Ballas, Nan Rosemary Ke, Anirudh Goyal, Yoshua Bengio, Aaron Courville, and Christopher Pal. "Zoneout: Regularizing RNNs by Randomly Preserving Hidden Activations", arXiv preprint arXiv:1606.01305 (2016).

Recommended Posts

Langage naturel: BERT Part2 - Préentraînement non supervisé ALBERT
Langage naturel: BERT Part1 - Corpus Wikipedia japonais
Langage naturel: Word2Vec Part3 - Modèle CBOW
Langage naturel: Word2Vec Part1 - Corpus japonais
Langage naturel: Doc2Vec Part2 - Classification des documents
Langage naturel: Word2Vec Part2 - Modèle de saut-gramme
Langage naturel: GPT - Transformateur de pré-formation génératif japonais
Natural Language: Machine Translation Part2 - Transformateur de traduction automatique neurale
Langage naturel: Doc2Vec Part1 --livedoor NEWS Corpus
Natural Language: Machine Translation Part1 - Corpus de sous-titres japonais-anglais
RNN_LSTM2 Traitement du langage naturel