[PYTHON] Natürliche Sprache: GPT - Japanischer generativer Pretraining-Transformator

Ziel

Ich habe GPT mit Microsoft Cognitive Toolkit (CNTK) ausprobiert.

Halten Sie einen japanischen Korpus für das Training bereit. Es wird davon ausgegangen, dass NVIDIA GPU CUDA installiert ist.

Einführung

Dieses Mal habe ich einen japanischen Korpus vorbereitet und ein japanisches Modell zur Satzgenerierung trainiert. Erstellen Sie für die Wortteilung ein Unterwortmodell mit dem Satzstück [1].

GPT Generative Pretraining Transformer (GPT) [2] verwendet nur den Decoder-Teil von Transformer [3]. Transformatoren werden in Natürliche Sprache: Maschinelle Übersetzung Teil 2 - Neuronale maschinelle Übersetzungstransformator eingeführt.

Auch diesmal, wie im Fall von Natural Language: BERT Part2 - Unbeaufsichtigtes Pretraining ALBERT, Pre-Layer Normalization Transformer [4] Ich habe es konfiguriert. Die Details der Schichtstruktur sind in der folgenden Abbildung dargestellt.

Wir haben auch die faktorisierte Einbettungsparametrisierung und die schichtübergreifende Parameterfreigabe verwendet, um das Gewicht des Modells zu reduzieren.

gpt.png

GPTs Multi-Head Attention verwendet Masked Self-Attention für das selbstüberwachte, überwachte Lernen.

Einstellungen im Training

Der Anfangswert jedes Parameters wurde auf eine Normalverteilung mit einer Varianz von 0,02 eingestellt.

Die Verlustfunktion verwendet den Cross Entropy Error.

Adam [5] wurde als Optimierungsalgorithmus verwendet. Adams Hyperparameter $ β_1 $ wird auf 0,9 und $ β_2 $ auf den Standardwert von CNTK gesetzt.

Die Lernrate ist die zyklische Lernrate (CLR) [6], die maximale Lernrate beträgt 1e-4, die Basislernrate beträgt 1e-8, die Schrittgröße beträgt das 10-fache der Anzahl der Epochen und die Richtlinie ist Auf triangular2 setzen.

Das Modelltraining führte eine Iteration von 1.000.000 durch Mini-Batch-Training durch.

Implementierung

Ausführungsumgebung

Hardware-

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

Software

・ Windows 10 Pro 1909 ・ CUDA 10.0 ・ CuDNN 7.6 ・ Python 3.6.6 ・ Cntk-gpu 2.7 ・ Cntkx 0.1.53 ・ Pandas 1.1.2 ・ Satzstück 0.1.91

Programm zum Ausführen

Das Schulungsprogramm ist auf [GitHub] verfügbar (https://github.com/sho-watari/NaturalLanguage/tree/master/JGPT).

jgpt_training.py


Kommentar

Ich werde die für diese Implementierung erforderlichen Inhalte ergänzen.

OpenAI GPT GPT wurde als Vorlernmodell für die Verarbeitung natürlicher Sprache vorgeschlagen. Ein selbstrückkehrendes Sprachmodell, das das Wort $ w_ {t + 1} $ vom Eingabewort $ w_1, w_2, ..., w_ {t} $ bis zum Zeitpunkt $ t $ bis zum nächsten Mal $ t + 1 $ vorhersagt. ..

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

Wie BERT führt GPT unbeaufsichtigtes Pre-Training durch und optimiert dann die Feinabstimmung mit einem Datensatz mit mehreren Aufgaben. In BERT wurde unbeaufsichtigtes Lernen mithilfe eines speziellen [MASK] -Tokens realisiert. In GPT wird unbeaufsichtigtes Vorlernen mithilfe der Selbstrückgabe durchgeführt, wie in der folgenden Abbildung dargestellt.

autoregression.png

Die folgende Abbildung zeigt die Multi-Head-Aufmerksamkeit von BERT und GPT. BERT kann sowohl vergangene als auch zukünftige Informationen verwenden, GPT maskiert jedoch zukünftige Informationen und verwendet nur unidirektionale Informationen.

bert_gpt.png

GPT-2 GPT-2 [7] besteht aus Pre-Layer-Normalisierung, und Transformer Decoder verfügt über bis zu 48 Layer und 1,5 Milliarden Parameter.

GPT-2 hat bei mehreren Aufgaben in Zero-shot durch das Pre-Training mit einem riesigen 40-GB-Datensatz namens WebText, der 8 Millionen Sätze enthält, gute Ergebnisse erzielt.

GPT-3 GPT-3 [8] hat ein genaueres Sprachmodell erhalten, indem die Größe des Netzwerks und des Datensatzes von GPT-2 maximiert wurde.

Das Modell von GPT-3 hat die gleiche Konfiguration wie GPT-2, führt jedoch Sparse Transformer [[9]](# reference) in Transformer Decoder ein und verfügt über 175 Billionen Parameter in bis zu 96 Schichten. Es scheint, dass das Erlernen von GPT-3 ungefähr 490 Millionen Yen kostet, und wenn das Training mit einer GPU durchgeführt wird, wird es ungefähr 355 Jahre dauern.

GPT-3 soll in der Lage sein, Sätze auf einer Ebene zu generieren, die es nicht unangenehm macht, Sätze mit Menschen auszutauschen, hat jedoch die Schwäche, dass es dem BERT-Modell bei Aufgaben, die bidirektionale Informationen erfordern, unterlegen ist. Scheint offenkundig zu sein.

Training Loss

gpt_logging.png

>

>Die folgende Abbildung zeigt das Protokoll der Verlustfunktion während des Trainings. Die horizontale Achse repräsentiert die Anzahl der Wiederholungen und die vertikale Achse repräsentiert den Wert der Verlustfunktion. Beispiel für die Erzeugung japanischer Sätze Ein Beispiel für die Erzeugung durch ein trainiertes Modell ist unten dargestellt. Geben Sie ein Wort ein, das mit> beginnt, und generieren Sie die Fortsetzung. Die Menschheit ändert den Preis für das Erlernen dieses rekonstruierten Uterus der Biotechnik zum ersten Mal in der Wirtschaft nicht. Magie
Magie ist derjenige, der großen Erfolg hat.
>Erde
Die Bedeutung des letzteren wird auf der Erde betont.
>Aoi Hazuki ist
Aoi Hazuki duckte sich, sei nicht so friedlich.

Es sieht so aus, als wäre ein japanischer Satz erzeugt worden, aber es ist ein bedeutungsloser Satz geworden. Sie werden feststellen, dass Sie ein größeres Modell, ein Trainingsdatensatz und genügend Hardware benötigen, um es auszuführen und eine komfortable Textstufe zu generieren.

Referenz

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

Natürliche Sprache: GPT - Japanischer generativer Pretraining-Transformator
[Verarbeitung natürlicher Sprache] Vorverarbeitung mit Japanisch
Natürliche Sprache: Word2Vec Part1 - Japanischer Korpus
Natürliche Sprache: BERT Part1 - Japanischer Wikipedia Corpus
Natürliche Sprache: Maschinelle Übersetzung Teil 2 - Neuronaler maschineller Übersetzungstransformator
Natürliche Sprache: BERT Part2 - Unüberwachte Vorschulung ALBERT
Wie auch immer, klassifizieren Sie die natürliche Sprache sofort [einfacher Transformator, Transformator]
Python: Verarbeitung natürlicher Sprache
RNN_LSTM2 Verarbeitung natürlicher Sprache