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.
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.
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.
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.
・ Processeur Intel (R) Core (TM) i7-6700K 4,00 GHz ・ GPU NVIDIA GeForce GTX 1060 6 Go
・ Windows 10 Professionnel 1909 ・ CUDA 10.0 ・ CuDNN 7.6 ・ Python 3.6.6 ・ Cntk-gpu 2.7 ・ Pandas 0.25.0
Le programme de formation est disponible sur GitHub.
word2vec_training.py
J'ai essayé diverses vérifications en utilisant les expressions distribuées des mots acquis dans la formation Skip-gram.
[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.
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.
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.
CNTK 207: Sampled Softmax Deep learning library that builds on and extends Microsoft CNTK
Natural Language : Word2Vec Part1 - Japanese Corpus
Recommended Posts