[PYTHON] Comprendre Word2Vec

introduction

J'ai résumé ce que j'ai appris sur Word2Vec, qui est maintenant une méthode standard de traitement du langage naturel. Le contour de l'algorithme est organisé et le modèle est créé à l'aide de la bibliothèque.

référence

Pour comprendre Word2Vec, je me suis référé à ce qui suit.

Présentation de Word2Vec

Ce qui suit décrit le concept de traitement du langage naturel, qui est la prémisse de Word2Vec.

Expression distribuée des mots

La représentation d'un mot sous forme de vecteur de longueur fixe est appelée "représentation de mot distribuée". Si un mot peut être exprimé sous forme de vecteur, le sens du mot peut être saisi quantitativement, de sorte qu'il peut être appliqué à divers processus. ** Word2Vec est également une méthode visant à acquérir des expressions distribuées de mots **.

Hypothèse de distribution

Diverses méthodes de vectorisation sont à l'étude dans le monde du traitement du langage naturel, mais la méthode principale est basée sur l'idée que ** "les significations des mots sont formées par les mots environnants" ** ** hypothèse de distribution * On l'appelle *. ** Word2Vec présenté dans cet article est également basé sur l'hypothèse de distribution. ** **

Basé sur le nombre et basé sur l'inférence

Il existe deux méthodes principales pour acquérir des expressions distribuées de mots: ** méthode basée sur le nombre ** et ** méthode basée sur l'inférence **. La méthode basée sur le comptage est une méthode d'expression des mots par la fréquence des mots environnants, et obtient une expression distribuée de mots à partir de ** données statistiques de l'ensemble du corpus **. D'autre part, la méthode basée sur l'inférence est une méthode qui utilise un réseau de neurones pour mettre à jour à plusieurs reprises les poids ** tout en visualisant une petite quantité d'échantillon d'apprentissage. ** Word2Vec relève de ce dernier **.

Algorithme Word2vec

Ci-dessous, nous expliquerons le contenu de l'algorithme Word2Vec.

Modèle de réseau neuronal utilisé dans Word2vec

Word2vec utilise les deux modèles suivants.

J'expliquerai le mécanisme de chaque modèle.

Modèle CBOW

Aperçu

Le modèle CBOW est un réseau neuronal qui vise à ** déduire des cibles à partir du contexte **. Vous pouvez obtenir une représentation distribuée des mots en entraînant ce modèle CBOW pour rendre les inférences aussi précises que possible.

Dans quelle mesure utiliser le contexte avant et après est déterminé pour chaque création de modèle, mais si un mot avant et après est utilisé comme contexte, par exemple, dans le cas suivant, le mot «?» Est deviné à partir de «tous les matins» et «o». Je vais.

je Est Tous les matins À Boisson Masu

La structure du modèle de CBOW est illustrée ci-dessous. Il y a deux couches d'entrée et elle atteint la couche de sortie via la couche intermédiaire.

NN.png

La couche intermédiaire dans la figure ci-dessus est la valeur «moyenne» après conversion par connexion complète de chaque couche d'entrée. Si la première couche d'entrée est convertie en $ h_1 $ et la deuxième couche d'entrée est convertie en $ h_2 $, les neurones de la couche intermédiaire seront $ \ frac {1} {2} (h_1 + h_2) $.

La conversion de la couche d'entrée à la couche intermédiaire est effectuée par la couche entièrement connectée (pondérée par $ W_ {in} $). A ce moment, le poids $ W_ {en} $ de la couche entièrement connectée est une matrice de la forme de $ 8 × 3 $, mais ce ** poids est l'expression distribuée ** des mots créés en utilisant CBOW.

Apprendre le modèle CBOW

Le modèle CBOW produit le score de chaque mot dans la couche de sortie, et vous pouvez obtenir la «probabilité» en appliquant la fonction Softmax à ce score. Cette probabilité représente le mot qui apparaît au centre lorsque les mots précédents et suivants sont donnés.

nn3.png

Dans l'exemple ci-dessus, le contexte est «tous les matins» et «o», et le mot que le réseau neuronal veut prédire est «café». A ce moment, dans un réseau de neurones avec des poids appropriés, on peut s'attendre à ce que les neurones de réponse correcte soient plus élevés dans les neurones qui représentent la «probabilité». Dans l'apprentissage CBOW, l'erreur d'entropie d'intersection de l'étiquette de réponse correcte et la probabilité sortie par le réseau neuronal sont obtenues, et l'apprentissage se déroule dans le sens de la réduction de la perte en tant que perte.

La fonction de perte du modèle CBOW est exprimée comme suit. (Lorsque le contexte utilisé pour créer le modèle est un mot avant et après)


L = -\frac{1}{T}\sum_{t=1}^{T}logP(w_{t}|w_{t-1},w_{t+1})

En apprenant à rendre la fonction de perte ci-dessus aussi petite que possible, le poids à ce moment-là peut être acquis comme une expression distribuée de mots.

modèle skip-gram

Le modèle skip-gram est un modèle qui inverse le contexte et la cible gérés par CBOW. C'est un modèle qui prédit plusieurs contextes avant et après à partir du mot central comme indiqué ci-dessous.

je Est café Boisson Masu

L'image du modèle skip-Gram est la suivante.

nn4.png

Il n'y a qu'une seule couche d'entrée pour skip-gramme et il y a autant de couches de sortie que de contextes. La perte est calculée individuellement pour chaque couche de sortie et la somme de celles-ci est la perte finale.

La fonction de perte du modèle skip-gramme est exprimée par la formule suivante. (Lorsque le contexte utilisé pour créer le modèle est un mot avant et après)


L = -\frac{1}{T}\sum_{t=1}^{T}(logP(w_{t-1}|w_{t}) + logP(w_{t+1}|w_{t}))

Puisque le modèle skip-gramme déduit le nombre de contextes, sa fonction de perte doit trouver la somme des pertes trouvées dans chaque contexte.

CBOW et skip-gramme

En CBOW et skip-gramme, le modèle skip-gram donne de meilleurs résultats, et plus le corpus est grand, meilleures sont les performances des mots fréquemment utilisés et des problèmes d'analogie. C'est. D'un autre côté, le skip-gramme a un coût d'apprentissage élevé car il est nécessaire de calculer la perte pour le nombre de contextes, et CBOW est plus rapide dans l'apprentissage.

Création d'un modèle Word2vec à l'aide de la bibliothèque

Dans ce qui suit, nous allons créer un modèle Word2Vec en utilisant la bibliothèque.

base de données

Il est possible de créer facilement un modèle Word2Vec à l'aide de gensim, qui est une bibliothèque python. Cette fois, nous utiliserons le "corpus d'actualités de livingoor" pour l'ensemble de données. Pour plus de détails sur l'ensemble de données et la méthode d'analyse morphologique, veuillez consulter Publié dans l'article précédemment publié. Je vais.

Dans le cas du japonais, un prétraitement qui décompose les phrases en éléments morphologiques est nécessaire à l'avance, donc après avoir décomposé toutes les phrases en éléments morphologiques, elles sont déposées dans la trame de données suivante.

スクリーンショット 2020-01-13 21.07.38.png

La colonne la plus à droite est l'analyse morphologique de toutes les phrases et séparées par des espaces de demi-largeur. Utilisez ceci pour créer un modèle Word2Vec.

Apprentissage de modèle

Créez un modèle Word2vec à l'aide de gensim. Voici les principaux paramètres de création d'un modèle.

Le nom du paramètre Signification des paramètres
sg 1 est sauter-Si c'est 0 sur gramme, apprenez avec CBOW
size Spécifiez le nombre de dimensions de la représentation distribuée à acquérir
window Spécifiez le nombre de mots avant et après la reconnaissance comme contexte
min_count Ignorer les mots qui apparaissent moins que le nombre spécifié

Voici le code pour créer un modèle Word2Vec. Tant que vous pouvez créer le texte à saisir, vous pouvez créer un modèle sur une seule ligne.


sentences = []
for text in df[3]:
    text_list = text.split(' ')
    sentences.append(text_list)

from gensim.models import Word2Vec
model = Word2Vec(sentences,  sg=1, size=100, window=5, min_count=1)

Ce que vous pouvez faire avec Word2Vec

J'ai pu obtenir une représentation distribuée des mots avec le modèle Word2Vec. En utilisant l'expression distribuée des mots, il est possible d'exprimer quantitativement la distance sémantique entre les mots, et d'ajouter ou de soustraire des significations entre les mots.

Vérifions les mots proches de "famille" en utilisant le modèle créé précédemment.

for i in model.most_similar('famille'):
    print(i)
('Parent et enfant', 0.7739133834838867)
('Amoureux', 0.7615703344345093)
('obligations', 0.7321233749389648)
('ami', 0.7270181179046631)
('Danran', 0.724891185760498)
('ami', 0.7237613201141357)
('Deux personnes', 0.7198089361190796)
('couple', 0.6997368931770325)
('L'un à l'autre', 0.6886075735092163)
('approfondir', 0.6761922240257263)

Des mots tels que «parent et enfant» et «amant» qui semblent avoir une signification similaire à «famille» sont montés au sommet. Ensuite, faisons des calculs arithmétiques entre les mots. Ce qui suit est le calcul de la «vie» - «bonheur».

for i in model.most_similar(positive='la vie',negative='bonheur'):
    print(i)
('en espèces', 0.31968846917152405)
('Ora', 0.29543358087539673)
('réparation', 0.29313164949417114)
('Collecte de fonds', 0.2858077883720398)
('utilisateur', 0.2797638177871704)
('la fréquence', 0.27897265553474426)
('Approprié', 0.2780274450778961)
('impôt', 0.27565300464630127)
('De', 0.273759663105011)
('budget', 0.2734326720237732)

Cette fois-ci, le corpus que j'ai appris n'est pas si gros, donc cela semble subtil, mais le mot «cash» vient en tête. Puisque l'expression distribuée des mots dépend du corpus à saisir, je pense qu'il est nécessaire de réfléchir au type de corpus à saisir en fonction de la situation dans laquelle vous souhaitez utiliser Word2Vec.

Next J'ai pu avoir un aperçu approximatif de Word2Vec. Je voudrais résumer Doc2vec, qui est le développement de Word2Vec, à partir de la prochaine fois. Merci d'avoir regardé jusqu'à la fin.

Recommended Posts

Comprendre Word2Vec
word2vec
Python2 + mot2vec
Comprendre k-means ++
Comprenez base64.
Comprendre la méthode k-means
Comprendre l'axe de numpy
Construction de l'environnement de word2vec
Introduction à Word2Vec que même les chats peuvent comprendre