[PYTHON] Natürliche Sprache: Word2Vec Part2 - Skip-Gramm-Modell

Ziel

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.

Einführung

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.

word2vec.png

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.

Einstellungen im Training

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.

Implementierung

Ausführungsumgebung

Hardware-

・ CPU Intel (R) Core (TM) i7-6700K 4,00 GHz ・ GPU NVIDIA GeForce GTX 1060 6 GB

Software

・ Windows 10 Pro 1909 ・ CUDA 10.0 ・ CuDNN 7.6 ・ Python 3.6.6 ・ Cntk-gpu 2.7 ・ Pandas 0.25.0

Programm zum Ausführen

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

word2vec_training.py


Ergebnis

Ich habe verschiedene Überprüfungen unter Verwendung der verteilten Ausdrücke der Wörter versucht, die im Skip-Gramm-Training erworben wurden.

Wortähnlichkeit und Wortanalogie

[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.

Visualisierung der eingebetteten Schicht durch t-SNE

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.

skipgram_tSNE.png

Geschwindigkeitsvergleich

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.

Referenz

CNTK 207: Sampled Softmax Deep learning library that builds on and extends Microsoft CNTK

Natural Language : Word2Vec Part1 - Japanese Corpus

  1. Tomas Mikolov, Kai Chen, Greg Corrado, and Jeffrey Dean. "Efficient Estimation of Word Representations in Vector Space", arXiv preprint arXiv:1301.3781 (2013).
  2. 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, pp 249-256.
  3. Tomas Mikolovm Ilya Sutskever, Kai Chen, Greg Corrado, and Jeffrey Dean. "Distribution Representations of Words and Phrases and their Compositionality", In Advances in Neural Information Processing Systems (NIPS). 2013, pp 3111-3119.
  4. Sebastien Jean, Kyunghyun Cho, Roland Memisevic, and Yoshua Bengio. "On Using Very Large Target Vocabulary for Neural Machine Translation", arXiv preprint arXiv:1412.2007 (2014).
  5. Diederik P. Kingma and Jimmy Lei Ba. "Adam: A method for stochastic optimization", arXiv preprint arXiv:1412.6980 (2014).
  6. Laurens van der Maaten and Geoffrey Hinton. "Visualizing Data using t-SNE", Journal of Machine Learning Research. 2008, 9 Nov: 2579-2605.

Recommended Posts

Natürliche Sprache: Word2Vec Part2 - Skip-Gramm-Modell
Natürliche Sprache: Word2Vec Part3 - CBOW-Modell
Natürliche Sprache: Word2Vec Part1 - Japanischer Korpus
Natürliche Sprache: Doc2Vec Part2 --Dokumentklassifizierung
Natürliche Sprache: BERT Part1 - Japanischer Wikipedia Corpus
Natürliche Sprache: Maschinelle Übersetzung Teil 2 - Neuronaler maschineller Übersetzungstransformator
Natürliche Sprache: Doc2Vec Part1 --livedoor NEWS Corpus
Natürliche Sprache: BERT Part2 - Unüberwachte Vorschulung ALBERT
Natürliche Sprache: Maschinelle Übersetzung Teil 1 - Japanisch-Englisch Untertitel Corpus
Python: Verarbeitung natürlicher Sprache
RNN_LSTM2 Verarbeitung natürlicher Sprache
Sprachvorhersagemodell von TensorFlow
Verarbeitung natürlicher Sprache 1 Morphologische Analyse
Verarbeitung natürlicher Sprache 3 Wortkontinuität
Python: Vektordarstellung in natürlicher Sprache
Verarbeitung natürlicher Sprache 2 Wortähnlichkeit
Erstellen Sie mit BERT + LightGBM + optuna ganz einfach ein Modell für die Verarbeitung natürlicher Sprache
[Word2vec] Lassen Sie uns das Ergebnis der Verarbeitung von Unternehmensbewertungen in natürlicher Sprache visualisieren