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.
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.
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].
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.
・ CPU Intel (R) Core (TM) i7-5820K 3,30 GHz ・ GPU NVIDIA Quadro RTX 6000 24 GB
・ 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
Das Schulungsprogramm ist auf [GitHub] verfügbar (https://github.com/sho-watari/NaturalLanguage/tree/master/NMTT).
nmtt_training.py
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 $.
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 **.
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.
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)} $.
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.
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
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
Encoder 6
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.
JESC Deep learning library that builds on and extends Microsoft CNTK
Natural Language : Machine Translation Part1 - Japanese-English Subtitle Corpus
Recommended Posts