[PYTHON] Natürliche Sprache: Maschinelle Übersetzung Teil 2 - Neuronaler maschineller Übersetzungstransformator

Ziel

Dies ist eine Fortsetzung der maschinellen Übersetzung mit dem Microsoft Cognitive Toolkit (CNTK).

In Teil 2 werden wir das maschinelle Übersetzungsmodell von Transformer unter Verwendung des in Teil 1 erstellten zweisprachigen japanisch-englischen Datensatzes trainieren. Es wird davon ausgegangen, dass CNTK und NVIDIA GPU CUDA installiert sind.

Einführung

In Natürliche Sprache: Maschinelle Übersetzung Teil 1 - Japanisch-Englischer Untertitelkorpus übersetzt der japanisch-englische Untertitelkorpus [1] ins Japanische und Englische. Ich habe vorbereitet.

In Teil 2 erstellen und trainieren Sie ein maschinelles Übersetzungsmodell mit Transformer.

Transformer Transformer [2] wurde als Ersatz für RNN [3] und CNN [4] vorgeschlagen, die zuvor in der Verarbeitung natürlicher Sprache Mainstream waren.

In RNN wurde die Leistung durch die Gate-Struktur und den Aufmerksamkeitsmechanismus verbessert. Da RNN jedoch das nächste Mal nicht berechnen kann, bis die Berechnung der aktuellen Zeit abgeschlossen ist, ist es nicht möglich, die parallele Berechnung der GPU zu verwenden, und das Trainieren dauert einige Zeit. Es gibt ein Problem.

Der Transformator kann während des Trainings eine parallele Berechnung durch die GPU durchführen, hat eine einfachere Struktur als RNN und eine Funktion, mit der er ein breiteres Empfangsfeld als CNN realisieren kann.

transformer.png

Der Teil, der auf der linken Seite von Blau umgeben ist, ist Encoder, und der Teil, der auf der rechten Seite von Grün umgeben ist, ist Decoder, von denen jeder 6 Schichten hat.

Als Technik zur Verbesserung der Genauigkeit und zur Reduzierung von Parametern verwenden die eingebettete Schicht und die vollständig verbundene Schicht des Decoders die Gewichtsverteilung [5].

Einstellungen im Training

Der Anfangswert jedes Parameters ist der Anfangswert von Glorot [[6]](# Referenz).

Da es sich um ein Klassifizierungsproblem handelt, das das nächste Wort vorhersagt, haben wir die Verlustfunktion als Cross Entropy Error festgelegt und Adam [7] als Optimierungsalgorithmus übernommen. Adams Hyperparameter $ \ beta_1 $ werden auf 0,9 und $ \ beta_2 $ auf die CNTK-Standardwerte gesetzt.

Verwenden Sie für die Lernrate die zyklische Lernrate (CLR) [8], die maximale Lernrate beträgt 0,04, die Basislernrate beträgt 1e-8, die Schrittgröße beträgt das 10-fache der Anzahl der Epochen und die Strategie lautet exp_range. Ich habe $ \ gamma $ auf 0.99994 gesetzt.

Das Modelltraining lief 10 Epochen durch Mini-Batch-Training.

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 ・ Numpy 1.17.3 ・ Pandas 0.25.0 ・ Satzstück 0.1.86

Programm zum Ausführen

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

nmtt_training.py


Kommentar

Ich werde den Hauptinhalt dieser Implementierung ergänzen.

Scaled Dot-Product Attention Unter der Annahme, dass der Tensor, der zu jedem Zeitpunkt des Encoders aus dem verborgenen Zustand besteht, $ Source $ ist und der Tensor, der zu jedem Zeitpunkt des Decoders aus dem verborgenen Zustand besteht, $ Target $ ist, wird die Aufmerksamkeit des inneren Basisprodukts durch die folgende Formel ausgedrückt.

Attention(Target, Source) = Target \cdot Source^T

Kopieren Sie hier, wie in der folgenden Abbildung gezeigt, $ Source $, nehmen Sie $ Target $ als $ Query $, ein Wörterbuchobjekt, das aus $ Key $ und $ Value $ besteht, und normalisieren Sie das innere Produkt von $ Query $ und $ Key $ mit Softmax. Die Konvertierung berechnet das Aufmerksamkeitsgewicht und das innere Produkt aus Aufmerksamkeitsgewicht und $ Wert $.

Attention(Q, K, V) = Softmax \left( QK^T \right) V

Wenn Sie $ Source $ auf diese Weise nach $ Key $ und $ Value $ kopieren, erwarten wir eine nicht triviale Konvertierung zwischen $ Source $ und $ Target $.

source-target_attention.png

In diesem Fall wird jedoch das innere Produkt von $ Q $ und $ K $ zu groß, wenn die Dimension $ d_ {k} $ des Modells groß wird. Skalieren Sie also nach der Quadratwurzel von $ d_ {k} $.

Attention(Q, K, V) = Softmax \left( \frac{QK^T}{\sqrt {d_{k}}} \right) V

Der Aufmerksamkeitsmechanismus in der obigen Abbildung heißt ** Quelle-Ziel-Aufmerksamkeit **, und der Aufmerksamkeitsmechanismus in der folgenden Abbildung, bei dem $ Q, K, V $ alle Kopien von $ Quelle $ sind, heißt ** Selbstaufmerksamkeit **.

self_attention.png

Transformer verwendet Self-Attention in Encoder und Self-Attention und Source-Target Attention in Decoder. Die Selbstaufmerksamkeit von Decoder maskiert jedoch zukünftige Informationen während des Trainings.

Multi-Head Attention Anstatt eine einzelne skalierte Punktprodukt-Aufmerksamkeit auf das Ganze anzuwenden, verwendet Transformer einen Mehrfachkopf, der in mehrere Teile aufgeteilt wird und Schlüssel, Wert und Abfrage vollständig verbindet, bevor er in jeden Kopf eingegeben wird. Übernehmen, verketten Sie die Ausgaben von jedem Kopf und wenden Sie dann den vollständigen Join erneut an.

MultiHeadAttention(Q, K, V) = \left[ Attention_1(QW^Q_1, KQ^K_1, VW^V_1), ..., Attention_h(QW^Q_h, KQ^K_h, VW^V_h) \right] W

Wenn Sie Attention für jeden von mehreren Teilen auf diese Weise ausführen, erwarten wir, dass jeder Head eine andere subspatiale Darstellung erhält.

Position-wise Feed-Forward Network Das positionsbezogene Feed-Forward-Netzwerk wendet für jede Position in der Sequenzlänge eine zweistufige Vollbindung an. In der Originalarbeit [1] beträgt die äußere Dimension 512, die innere Dimension 2048, was dem Vierfachen entspricht, und die innere Aktivierungsfunktion ist ReLU.

FFN(x) = max(0, xW_{inner} + b_{inner})W_{outer} + b_{outer}

Positional Encoding Der Transformator hat keine rekursive Struktur wie RNN, daher kann er die Reihenfolge der Sequenzlänge nicht berücksichtigen. Fügen Sie daher die Positionsinformationen jedes Wortes unmittelbar nach der Einbettungsebene hinzu. [9]

Die folgende Formel wird bei der Positionscodierung verwendet.

PE_{(pos, 2i)} = \sin \left( \frac{pos}{10000^{\frac{2i}{d_{k}}}} \right) \\
PE_{(pos, 2i+1)} = \cos \left( \frac{pos}{10000^{\frac{2i}{d_{k}}}} \right)

Wobei $ d_ {k} $ die Dimension der eingebetteten Ebene darstellt, $ pos $ die Position des Wortes darstellt und $ 2i und 2i + 1 $ die geraden bzw. ungeraden Dimensionen der eingebetteten Ebene darstellen. Wenn die maximale Serienlänge 97 und die Abmessung der eingebetteten Ebene 512 beträgt, wird die Positionscodierung wie in der folgenden Abbildung dargestellt dargestellt.

positional_encoding.png

Transformer verwendet diese Formel, da $ PE_ {pos + \ tau} $ als lineare Funktion von $ PE_ {pos} $ dargestellt werden kann.

Hier,

u_i = \frac{1}{10000^{\frac{2i}{d_{k}}}} 

Dann ist der Ausdruck der Positionscodierung wie folgt.

PE_{(pos, 2i)} = \sin (pos \cdot u_i) \\
PE_{(pos, 2i+1)} = \cos (pos \cdot u_i)

Dann ist $ PE_ {pos + \ tau} $

\begin{align}
PE_{pos+\tau} &= \sin ((pos+\tau) \cdot u_i) \\
&= \sin (pos \cdot u_i) \cos (\tau u_i) + \cos (pos \cdot u_i) \sin (\tau u_i) \\
&= PE_{(pos, 2i)} \cos(\tau u_i) + PE_{(pos, 2i+1)} \sin (\tau u_i)
\end{align}

Es kann ausgedrückt werden als die lineare Summe von $ PE_ {(pos, 2i)}, PE_ {(pos, 2i + 1)} $.

Ergebnis

Training loss and perplexity Die folgende Abbildung zeigt die Verlustfunktion und die Protokolle mit falsch positiven Raten während des Trainings. Das Diagramm links zeigt die Verlustfunktion, das Diagramm rechts zeigt die Ratlosigkeit, die horizontale Achse zeigt die Anzahl der Epochen und die vertikale Achse zeigt den Wert bzw. die Ratlosigkeit der Verlustfunktion.

jesc_logging.png

Validation BLEU score Nachdem das japanisch-englische Übersetzungsmodell trainiert wurde, habe ich versucht, die Leistung anhand der Verifizierungsdaten zu bewerten. Wir haben die gierige Methode zur Verifizierung übernommen.

Für diese Leistungsbewertung wurde die zweisprachige Evaluierungsstudie (BLEU) [10] berechnet. BLEU wurde mit nltk berechnet und mit NIST geglättet. Die Verwendung von dev als Validierungsdaten führte zu folgenden Ergebnissen: Die Zahl nach dem Bindestrich steht für n-Gramm.

BLEU-4 Score 1.84
BLEU-1 Score 12.22

Visualisierung der Selbstaufmerksamkeit

Transformer kann Aufmerksamkeitskarten visualisieren. Die folgende Abbildung zeigt eine Visualisierung der Aufmerksamkeitskarte für jeden Kopf der 5. und 6. Ebene der Selbstaufmerksamkeit des Encoders. Die Farbkarte wird als heiß angezeigt.

Encoder 5 enc5.png

Encoder 6 enc6.png

In der 5. Schicht scheint jeder Kopf auf ein bestimmtes Wort zu achten, aber der mittlere Kopf in der 6. Schicht scheint nicht gut zu funktionieren.

Referenz

JESC Deep learning library that builds on and extends Microsoft CNTK

Natural Language : Machine Translation Part1 - Japanese-English Subtitle Corpus

  1. Reid Pryzant, Youngjoo Chung, Dan Jurafsky, and Denny Britz. "JESC: Japanese-English Subtitle Corpus", arXiv preprint arXiv:1710.10639 (2017).
  2. Ashish Vaswani, Noam Shazeer, Niki Parmar, Jakob Uszkoreit, Llion Jones, Aidan N. Gomez, Lukasz Kaiser, and Illia Polosukhin. "Attention Is All You Need", Advances in neural information processing systems. 2017. p. 5998-6008.
  3. Yougnhui Wu, Mike Schuster, Zhifen Chen, Quoc V. Le, Mohammad Norouzi, et. al. "Google's Neural Machine Translation System: Bridging the Gap between Human and Machine Translation", arXiv preprint arXiv:1609.08144, 2016.
  4. Jonas Gehring, Michael Auli, David Grangier, Denis Tarats, and Tann N. Dauphin, "Convolutional Sequence to Sequence Learning", arXiv preprint arXiv:1705.03122 (2017).
  5. Ofir Press and Lior Wolf. "Using the Output Embedding to Improve Language Models.", arXiv preprint arXiv:1608.05859 (2016).
  6. Xaiver Glorot and Yoshua Bengio. "Understanding the difficulty of training deep feedforward neural networks", Proceedings of the Thirteenth International Conference on Artificial Intelligence and Statistics. 2010, p. 249-256.
  7. Diederik P. Kingma and Jimmy Lei Ba. "Adam: A method for stochastic optimization", arXiv preprint arXiv:1412.6980 (2014).
  8. Leslie N. Smith. "Cyclical Learning Rates for Training Neural Networks", 2017 IEEE Winter Conference on Applications of Computer Vision. 2017, p. 464-472.
  9. Sainbayer Sukhbaatar, Arthur Szlam, Jason Weston, and Rob Fergus, "End-To-End Memory Networks", Advances in Neural Information Processing Systems. 2015. p. 2440-2448.
  10. Kishore Papineni, Salim Roukos, Todd Ward, and Wei-Jing Zhu. "BLEU: a Method for Automatic Evaluation of Machine Translation", Proceedings of the 40-th Annual Meeting of the Association for Computational Linguistics (ACL). 2002, p. 311-318.

Recommended Posts

Natürliche Sprache: Maschinelle Übersetzung Teil 2 - Neuronaler maschineller Übersetzungstransformator
Versuchen wir die neuronale maschinelle Übersetzung mit Transformer
Natürliche Sprache: Word2Vec Part3 - CBOW-Modell
Natürliche Sprache: Word2Vec Part1 - Japanischer Korpus
100 Sprachverarbeitung Knock 2020 Kapitel 10: Maschinelle Übersetzung (90-98)
Natürliche Sprache: Doc2Vec Part2 --Dokumentklassifizierung
Natürliche Sprache: Word2Vec Part2 - Skip-Gramm-Modell
Natürliche Sprache: BERT Part1 - Japanischer Wikipedia Corpus
Natürliche Sprache: Doc2Vec Part1 --livedoor NEWS Corpus
Natürliche Sprache: BERT Part2 - Unüberwachte Vorschulung ALBERT
Wie auch immer, klassifizieren Sie die natürliche Sprache sofort [einfacher Transformator, Transformator]
[Verarbeitung natürlicher Sprache / NLP] Einfache Rückübersetzung durch maschinelle Übersetzung mit Python
[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
Eine grobe Einführung in die neuronale maschinelle Übersetzungsbibliothek
Modell unter Verwendung eines Faltungsnetzwerks in der Verarbeitung natürlicher Sprache
Python: Verarbeitung natürlicher Sprache
RNN_LSTM2 Verarbeitung natürlicher Sprache