[PYTHON] Natürliche Sprache: BERT Part2 - Unüberwachte Vorschulung ALBERT

Ziel

Dies ist eine Fortsetzung von BERT mit dem Microsoft Cognitive Toolkit (CNTK).

In Teil 2 lernen wir ALBERT anhand der in Teil 1 erstellten japanischen Wikipedia vor. Es wird davon ausgegangen, dass NVIDIA GPU CUDA installiert ist.

Einführung

Natürliche Sprache: BERT Teil 1 - Japanischer Wikipedia-Korpus erstellte einen Vorlernkorpus unter Verwendung der japanischen Wikipedia.

In Teil 2 werden wir ein unbeaufsichtigtes Vorlernmodell erstellen und trainieren.

BERT Bidirektionale Encoder-Darstellungen von Transformatoren (BERT) [1] verwenden nur den Encoder-Teil von Transformer [2]. Transformatoren werden in Natürliche Sprache: Maschinelle Übersetzung Teil 2 - Neuronale maschinelle Übersetzungstransformator eingeführt.

Außerdem haben wir dieses Mal das Basismodell von ALBERT [[3]](# reference) implementiert, eine leichtere Version von BERT, und es mit Pre-Layer Normalization Transformer [[4]](# reference) konfiguriert. Die Details der Schichtstruktur sind in der folgenden Abbildung dargestellt.

bert.png

Die Multi-Head Attention von BERT verwendet Self-Attention, die interaktives Lernen ermöglicht.

Einstellungen im Training

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

Die Verlustfunktion verwendet den Kreuzentropiefehler für die Vorhersage maskierter Wörter in Masked LM und die binäre Kreuzentropie zur Identifizierung in der Satzvorhersage.

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

Verwenden Sie für die Lernrate die zyklische Lernrate (CLR) [6]. Die maximale Lernrate beträgt 1e-4, die Basislernrate 1e-8, die Schrittgröße das 10-fache der Anzahl der Epochen und die Strategie ist dreieckig2. Ich habe es eingestellt.

Das Modelltraining führte 3.000.000 Iterationen 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.33 ・ MeCab 0.996 ・ Numpy 1.17.3 ・ Pandas 0.25.0

Programm zum Ausführen

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

bert_pretraining.py


Kommentar

Ich werde den Hauptinhalt dieser Implementierung ergänzen.

Masked LM and Sentence Prediction Beim BERT-Vorlernen beginnt der Eingabesatz mit dem speziellen Wort [CLS] und besteht aus zwei Sätzen, wie in der folgenden Abbildung gezeigt. Am Ende jedes Satzes wird ein spezielles Wort [SEP] eingefügt. Anschließend werden zwei Arten des Lernens durchgeführt, Masked LM und Satzvorhersage.

pretraining.png

Masked LM In Masked LM werden 15% des Eingabesatzes durch das spezielle Wort [MASK] als Eingabesatz ersetzt, und das Wort an derselben Position im ursprünglichen Eingabesatz sind die richtigen Antwortdaten.

Verwenden Sie den folgenden Prozess, um das maskierte Wort vorherzusagen und das richtige Wort vorherzusagen. Zu diesem Zeitpunkt wird nur der Gradient der maskierten Position verwendet, um die Parameter zu aktualisieren.

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)

[MASK] ist jedoch ein spezielles Wort, das nur beim BERT-Vorlernen verwendet wird und zur Unnatürlichkeit des Sprachmodells bei der Feinabstimmung beiträgt. Daher verwendet BERT die folgenden Strategien, um die Unnatürlichkeit zu reduzieren.

・ 80% Chance, durch [MASKE] zu ersetzen. ・ 10% Chance, durch ein zufälliges Wort zu ersetzen. ・ Es besteht eine 10% ige Chance, dass es nicht ersetzt wird und so bleibt, wie es ist. Dies hat die Bedeutung, dem tatsächlichen Wortausdruck näher zu kommen.

Next Sentence Prediction Die Vorhersage des nächsten Satzes zielt darauf ab, ein kontextuelles Verständnis zu erlangen, indem das binäre Klassifizierungsproblem gelöst wird, ob zwei im Eingabesatz enthaltene Sätze verbunden sind oder nicht.

Für diese Klassifizierung wird die verborgene Schicht (Pooler) an der Position [CLS] der Eingabeanweisung als Merkmalsgröße extrahiert und die vollständige Verknüpfungs- und Sigmoidfunktion angewendet.

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% der Trainingsdaten sind zwei aufeinanderfolgende Sätze, und die restlichen 50% sind ein diskontinuierliches negatives Beispiel, indem Sätze zufällig verbunden werden.

A Lite BERT Ein Lite BERT (ALBERT) verbessert die Gewichtsreduzierung und das kontextbezogene Verständnis der Probleme von BERT.

Factorized embedding parameterization Die Anzahl der Parameter der eingebetteten Schicht wird durch Faktorzerlegung verringert.

Unter der Annahme, dass die Anzahl der Wörter $ V $ ist, die Dimension der verborgenen Ebene $ H $ ist und die eingebettete Dimension der unteren Dimension $ E $ ist, wird die Anzahl der Parameter von $ V \ mal H $ in $ V \ mal E + E \ geändert. Es kann auf mal H $ reduziert werden.

Wenn die tatsächliche Anzahl der Wörter $ E = 32.000 $ beträgt, beträgt die Dimension der verborgenen Ebene $ H = 768 $ und die untere eingebettete Dimension $ E = 128 $.

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

Es ist ersichtlich, dass die Anzahl der Parameter in der eingebetteten Schicht um etwa 83% reduziert werden kann.

Cross-layer parameter sharing ALBERT teilt die positionsbezogenen Feedfoward-Netzwerkparameter mit jedem Transformer Encoder Self-Attention-Kopf in allen 12 Schichten.

Dies kann die Anzahl der Parameter erheblich reduzieren.

Sentence-Order Prediction Da die Vorhersage des nächsten Satzes ein einfaches Problem für das Verständnis des Kontexts ist, wird seine Nützlichkeit von RoBERTa [7] usw. in Frage gestellt.

Daher trainiert ALBERT das Kontextverständnis mit der Vorhersage der Satzreihenfolge anstelle der Vorhersage des nächsten Satzes.

Es ist sehr einfach zu implementieren. Bereiten Sie einfach ein negatives Beispiel für das zufällige Verbinden von Anweisungen vor, aber ein negatives Beispiel für das Austauschen von zwei Anweisungen.

GELU Gaußsche Fehlerlineareinheiten (GELU) [8] wird als Aktivierungsfunktion vorgeschlagen, die Dropout [9], Zoneout [10] und ReLU kombiniert. Daher wird erwartet, dass es den Effekt hat, die Eingabe mit einer teilbaren und glatten Funktion probabilistisch zu regulieren. GELU sieht aus wie in der Abbildung unten.

gelu.png

GELU wird durch die folgende Formel ausgedrückt.

GELU(x) = x \Phi(x)

Hier repräsentiert $ \ Phi $ die kumulative Wahrscheinlichkeitsdichtefunktion der Normalverteilung und unter der Annahme, dass die Eingabe $ x $ näher am Mittelwert 0 und der Varianz 1 liegt, durch Batch-Normalisierung und Layer-Normalisierung, der Standardnormalverteilung Verwenden Sie die kumulative Wahrscheinlichkeitsdichte.

\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

Wobei $ erf $ die Fehlerfunktion darstellt. Die Implementierung verwendet die folgende Formel, die eine Annäherung an die obige Formel darstellt.

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

Die Berechnung der obigen Näherungsformel dauert jedoch lange. Daher haben wir in dieser Implementierung die folgende Formel verwendet, die eine weitere Annäherung an die obige Formel darstellt.

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

Wobei $ \ sigma $ eine Sigmoidfunktion darstellt.

Ergebnis

Training loss 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.

bert_logging.png

Maskierte LM-Vorhersage

Ich bat den ausgebildeten ALBERT, das Problem der Satzfüllung zu lösen. Hier ist die Antwort der ursprüngliche Satz, maskiert ist der ursprüngliche Satz, wobei ein Teil des Satzes durch [MASK] ersetzt wird, und Albert sagt das Wort in der Position [MASK] voraus.

answer :Die Menschheit muss sich mit der richtigen Intelligenz entwickeln.
masked :Menschheit[MASK]Muss richtig verwendet werden, um sich zu entwickeln.
albert :Die Menschheit muss sich entwickeln, indem sie Lebewesen richtig einsetzt.

Visualisierung der Selbstaufmerksamkeit

Die folgende Abbildung zeigt eine Visualisierung der Aufmerksamkeitskarte für jeden Kopf der Selbstaufmerksamkeit auf der 11. und 12. Ebene des Encoders. Die Farbkarte wird als heiß angezeigt.

Encoder 11

enc11.png

Encoder 12

enc12.png

BERT fine-tuning Das ursprüngliche Motiv von BERT ist das Transferlernen des Vorlernmodells. Daher wurde unter Verwendung des diesmal im Voraus erlernten Modells das Transferlernen mit der Dokumentklassifizierungsaufgabe des Livedoor NEWS Corpus durchgeführt, die in Natural Language: Doc2Vec Part1 - Livedoor NEWS Corpus verwendet wurde. Ich versuchte es.

Vorverarbeitung und morphologische Analyse von Textdaten Mit den Wörterbüchern MeCab und NEologd haben wir nur Nomenklaturen, Verben und Adjektive extrahiert, das Entfernen von Stoppwörtern durchgeführt und die Wörter dann im SentencePiece-Modell in IDs konvertiert.

Dieses Mal haben wir 5 Epochen zusätzlich zu 9 Klassifikationen trainiert, die vollständig an die Ausgabe von Pooler gekoppelt sind.

Ähnlich wie bei Natürliche Sprache: Doc2Vec Part2 - Dokumentklassifizierung führte die Leistungsbewertung unter Verwendung von Verifizierungsdaten zu den folgenden Ergebnissen. Doc2Vecs 10 Epoch hat eine geringere Leistung als 90%.

Accuracy 75.56%

Aus zeitlichen Gründen konnte das ALBERT-Pre-Training nur 1 Epoche in der Praxis trainieren, und das Modell war zu komplex für das Problem, das die Ursache für den Leistungsabfall sein könnte.

Referenz

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

Natürliche Sprache: BERT Part2 - Unüberwachte Vorschulung ALBERT
Natürliche Sprache: BERT Part1 - Japanischer Wikipedia Corpus
Natürliche Sprache: Word2Vec Part3 - CBOW-Modell
Natürliche Sprache: Word2Vec Part1 - Japanischer Korpus
Natürliche Sprache: Doc2Vec Part2 --Dokumentklassifizierung
Natürliche Sprache: Word2Vec Part2 - Skip-Gramm-Modell
Natürliche Sprache: GPT - Japanischer generativer Pretraining-Transformator
Natürliche Sprache: Maschinelle Übersetzung Teil 2 - Neuronaler maschineller Übersetzungstransformator
Natürliche Sprache: Doc2Vec Part1 --livedoor NEWS Corpus
Natürliche Sprache: Maschinelle Übersetzung Teil 1 - Japanisch-Englisch Untertitel Corpus
RNN_LSTM2 Verarbeitung natürlicher Sprache