[PYTHON] Langage naturel: Word2Vec Part2 - Modèle de saut-gramme

Cible

Ceci est une continuation de Word2Vec utilisant le Microsoft Cognitive Toolkit (CNTK).

Dans la partie 2, Word2Vec par CNTK sera réalisé à l'aide du corpus japonais préparé dans la partie 1. On suppose que CNTK et NVIDIA GPU CUDA sont installés.

introduction

Natural Language: Word2Vec Part1 --Japanese Corpus a préparé un corpus japonais.

Dans la partie 2, nous créerons et formerons un modèle Skip-gram, célèbre comme modèle de langage neuronal.

Word2Vec Word2Vec [1] propose deux modèles, Continuous bag-of-words (CBOW) et Skip-gram.

word2vec.png

Le modèle CBOW prédit le mot central avec les mots environnants comme entrée. Le modèle Skip-gram, quant à lui, prédit les mots qui apparaissent autour d'un mot. Le nombre de mots avant et après s'appelle la taille de la fenêtre, et 2 à 5 sont adoptés.

La dimension de la couche incorporée est de 100 et le terme de polarisation de la couche de sortie n'est pas adopté.

Cette fois, je voudrais entraîner un modèle Skip-gram avec une taille de fenêtre de 5 pour obtenir une représentation distribuée des mots.

Paramètres en formation

La valeur initiale de chaque paramètre utilise le réglage par défaut de CNTK. Dans la plupart des cas, il a une distribution uniforme de Glorot [2].

Puisque Word2Vec peut être considéré comme un problème de classification qui prédit quel mot apparaîtra pour un mot d'entrée, la première chose qui vient à l'esprit est d'appliquer la fonction Softmax à la couche de sortie et l'erreur d'entropie croisée pour la fonction de perte. .. Cependant, si le nombre de mots est très grand, le calcul de la fonction Softmax prendra du temps. Par conséquent, diverses méthodes [3] qui se rapprochent de la fonction Softmax ont été conçues pour accélérer la couche de sortie. Cette fois, nous avons utilisé Sampled Softmax [4].

Adam [5] a été utilisé comme algorithme d'optimisation. Le taux d'apprentissage d'Adam est de 0,01, l'hyperparamètre $ β_1 $ est de 0,9 et $ β_2 $ est la valeur par défaut pour CNTK.

La formation du modèle a effectué 100 Epoch avec une formation en mini-lots avec une taille de mini-lot de 128.

la mise en oeuvre

Environnement d'exécution

Matériel

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

Logiciel

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

Programme à exécuter

Le programme de formation est disponible sur GitHub.

word2vec_training.py


résultat

J'ai essayé diverses vérifications en utilisant les expressions distribuées des mots acquis dans la formation Skip-gram.

Similitude des mots et analogie des mots

[similarity]la magie
Yu:0.80
Cache:0.79
Produit:0.77
bénéfique:0.77
Nouveau:0.76

Les 5 plus proches de «magie» sont affichés. Le mot «magie» est ici une expression dans l'œuvre, il a donc un sens différent du sens général.

[analogy]Hazuki-lotus+Jin= ?
réalisé par:0.27
Confluence:0.25
Rôle:0.25
bâtiment:0.24
Tu:0.23

C'est le résultat de deviner des mots à partir des relations des personnages. Si vous tirez le lotus de Hazuki, qui est le personnage principal, et ajoutez Jin, qui leur est hostile, vous deviendrez un réalisateur. Cela a donné des résultats raisonnables.

Visualisation de la couche embarquée par t-SNE

La couche d'inclusion de mots acquise par le modèle Skip-gram est des données de grande dimension et est difficile à saisir intuitivement. Par conséquent, l'inclusion stochastique de voisin de distribution t (t-SNE) [6] est célèbre comme méthode pour convertir des données de haute dimension dans un espace à 2 ou 3 dimensions et les visualiser.

Cette fois, j'ai changé la Perplexité, qui est l'un des paramètres t-SNE qui indiquent combien de proximité est considérée, en 5, 10, 20, 30, 50 et je l'ai visualisée dans un espace bidimensionnel.

skipgram_tSNE.png

Comparaison de vitesse

Cette fois, j'ai utilisé Sampled Softmax comme approximation de la fonction Softmax. Le nombre de mots dans le corpus préparé dans la partie 1 était de 3369, mais j'ai essayé de voir à quel point ce serait plus rapide si le nombre de mots était plus grand.

Le tableau suivant montre la vitesse d'exécution moyenne à l'exclusion du début et de la fin lorsque 10 époques sont exécutées pour un corpus de 500 000 mots. Le Softmax échantillonné a 5 échantillons.

mean speed per epoch
full softmax 17.5s
sampled softmax 8.3s

Le Softmax échantillonné semble être environ deux fois plus rapide.

référence

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

Langage naturel: Word2Vec Part2 - Modèle de saut-gramme
Langage naturel: Word2Vec Part3 - Modèle CBOW
Langage naturel: Word2Vec Part1 - Corpus japonais
Langage naturel: Doc2Vec Part2 - Classification des documents
Langage naturel: BERT Part1 - Corpus Wikipedia japonais
Natural Language: Machine Translation Part2 - Transformateur de traduction automatique neurale
Langage naturel: Doc2Vec Part1 --livedoor NEWS Corpus
Langage naturel: BERT Part2 - Préentraînement non supervisé ALBERT
Natural Language: Machine Translation Part1 - Corpus de sous-titres japonais-anglais
Python: traitement du langage naturel
RNN_LSTM2 Traitement du langage naturel
Modèle de prédiction de langage par TensorFlow
Traitement du langage naturel 1 Analyse morphologique
Traitement du langage naturel 3 Continuité des mots
Python: représentation vectorielle en langage naturel
Traitement du langage naturel 2 similitude de mots
Créez facilement un modèle de traitement du langage naturel avec BERT + LightGBM + optuna
[Word2vec] Visualisons le résultat du traitement en langage naturel des avis des entreprises