Dies ist eine Fortsetzung von Word2Vec mit dem Microsoft Cognitive Toolkit (CNTK).
In Teil 2 wird Word2Vec von CNTK unter Verwendung des in Teil 1 erstellten japanischen Korpus durchgeführt. Es wird davon ausgegangen, dass CNTK und NVIDIA GPU CUDA installiert sind.
Natürliche Sprache: Word2Vec Part1 - Japanischer Korpus hat einen japanischen Korpus vorbereitet.
In Teil 2 werden wir ein Skip-Gramm-Modell erstellen und trainieren, das als neuronales Sprachmodell bekannt ist.
Word2Vec Word2Vec [1] schlägt zwei Modelle vor: Continuous Bag-of-Words (CBOW) und Skip-Gramm.
Das CBOW-Modell sagt das zentrale Wort mit den umgebenden Wörtern als Eingabe voraus. Das Skip-Gramm-Modell sagt dagegen die Wörter voraus, die um ein Wort herum erscheinen. Die Anzahl der Wörter davor und danach wird als Fenstergröße bezeichnet, und 2 bis 5 werden übernommen.
Die Dimension der eingebetteten Schicht beträgt 100, und der Vorspannungsterm der Ausgangsschicht wird nicht übernommen.
Dieses Mal möchte ich ein Skip-Gramm-Modell mit einer Fenstergröße von 5 trainieren, um eine verteilte Darstellung von Wörtern zu erhalten.
Der Anfangswert jedes Parameters verwendet die Standardeinstellung von CNTK. In den meisten Fällen hat es eine gleichmäßige Verteilung von Glorot [2].
Da Word2Vec als Klassifizierungsproblem betrachtet werden kann, das vorhersagt, welches Wort für ein Eingabewort erscheinen wird, müssen Sie zunächst die Softmax-Funktion auf die Ausgabeschicht und den Cross-Entropy-Fehler für die Verlustfunktion anwenden. .. Wenn jedoch die Anzahl der Wörter sehr groß ist, dauert die Berechnung der Softmax-Funktion einige Zeit. Daher wurden verschiedene Methoden [3] entwickelt, die sich der Softmax-Funktion annähern, um die Ausgabeschicht zu beschleunigen. Dieses Mal haben wir Sampled Softmax [4] verwendet.
Adam [5] wurde als Optimierungsalgorithmus verwendet. Adams Lernrate beträgt 0,01, der Hyperparameter $ β_1 $ ist 0,9 und $ β_2 $ ist der Standardwert für CNTK.
Das Modelltraining führte 100 Epochen mit Mini-Batch-Training mit einer Mini-Batch-Größe von 128 durch.
・ CPU Intel (R) Core (TM) i7-6700K 4,00 GHz ・ GPU NVIDIA GeForce GTX 1060 6 GB
・ Windows 10 Pro 1909 ・ CUDA 10.0 ・ CuDNN 7.6 ・ Python 3.6.6 ・ Cntk-gpu 2.7 ・ Pandas 0.25.0
Das Schulungsprogramm ist auf [GitHub] verfügbar (https://github.com/sho-watari/NaturalLanguage/tree/master/Word2Vec).
word2vec_training.py
Ich habe verschiedene Überprüfungen unter Verwendung der verteilten Ausdrücke der Wörter versucht, die im Skip-Gramm-Training erworben wurden.
[similarity]Magie
Yu:0.80
Verstecken:0.79
Produziert:0.77
vorteilhaft:0.77
Neu:0.76
Die fünf, die "Magie" am ähnlichsten sind, werden angezeigt. Das Wort "Magie" ist hier ein Ausdruck innerhalb des Werkes, hat also eine andere Bedeutung als das allgemeine.
[analogy]Hazuki-Lotus+Jin= ?
unter der Regie von:0.27
Zusammenfluss:0.25
Rolle:0.25
Gebäude:0.24
Du:0.23
Dies ist das Ergebnis des Erraten von Wörtern aus den Beziehungen der Charaktere. Wenn Sie den Lotus von Hazuki, der Hauptfigur, ziehen und Jin hinzufügen, der ihnen feindlich gesinnt ist, werden Sie Regisseur. Dies ergab vernünftige Ergebnisse.
Die vom Skip-Gramm-Modell erfasste Worteinbettungsschicht besteht aus hochdimensionalen Daten und ist intuitiv schwer zu erfassen. Daher ist die t-Verteilung der stochastischen Nachbareinbettung (t-SNE) [6] als Methode bekannt, um hochdimensionale Daten in einen 2- oder 3-dimensionalen Raum umzuwandeln und zu visualisieren.
Dieses Mal habe ich Perplexity, einen der t-SNE-Parameter, der angibt, wie viel Nähe berücksichtigt wird, in 5, 10, 20, 30, 50 geändert und in einem zweidimensionalen Raum visualisiert.
Dieses Mal habe ich Sampled Softmax als Annäherung an die Softmax-Funktion verwendet. Die Anzahl der Wörter in dem in Teil 1 vorbereiteten Korpus betrug 3.369, aber ich versuchte zu sehen, wie viel schneller es wäre, wenn die Anzahl der Wörter größer wäre.
Das Folgende zeigt die durchschnittliche Ausführungsgeschwindigkeit ohne Anfang und Ende, wenn 10 Epochen für einen Korpus mit 500.000 Wörtern ausgeführt werden. Sampled Softmax hat 5 Samples.
mean speed per epoch | |
---|---|
full softmax | 17.5s |
sampled softmax | 8.3s |
Sampled Softmax scheint etwa doppelt so schnell zu sein.
CNTK 207: Sampled Softmax Deep learning library that builds on and extends Microsoft CNTK
Natural Language : Word2Vec Part1 - Japanese Corpus
Recommended Posts