Il s'agit du record de la 87e «similitude de mots» de Language Processing 100 Knock 2015. Enfin, utilisez le mot vecteur pour trouver la similitude entre les mots. On a l'impression que le prétraitement est enfin terminé et que c'est le sujet principal. Je voudrais trouver la similitude entre les mots en utilisant mon email ou le procès-verbal d'une réunion. Utilisez la similitude cosinus pour la similitude. Quand j'apprenais les fonctions triangulaires au lycée, il était vraiment utile de ressentir "à quoi cela sert-il?" Par programmation, ce n'est pas difficile.
Lien | Remarques |
---|---|
087.Similitude des mots.ipynb | Lien GitHub du programme de réponse |
100 coups de traitement du langage amateur:87 | Je vous suis toujours redevable de 100 coups de traitement linguistique |
type | version | Contenu |
---|---|---|
OS | Ubuntu18.04.01 LTS | Il fonctionne virtuellement |
pyenv | 1.2.15 | J'utilise pyenv car j'utilise parfois plusieurs environnements Python |
Python | 3.6.9 | python3 sur pyenv.6.J'utilise 9 3.7 ou 3.Il n'y a aucune raison profonde de ne pas utiliser la série 8 Les packages sont gérés à l'aide de venv |
Dans l'environnement ci-dessus, j'utilise les packages Python supplémentaires suivants. Installez simplement avec pip ordinaire.
type | version |
---|---|
numpy | 1.17.4 |
pandas | 0.25.3 |
enwiki-20150112-400-r10-105752.txt.bz2 Le texte de 105 752 articles est-il échantillonné au hasard au 1/10 des articles composés d'environ 400 mots ou plus parmi les articles de Wikipédia en anglais au 12 janvier 2015, compressé au format bzip2. y a-t-il. En utilisant ce texte comme un corpus, je souhaite apprendre un vecteur (expression distribuée) qui exprime le sens d'un mot. Dans la première moitié du chapitre 9, le processus d'apprentissage du vecteur de mot est mis en œuvre en le divisant en plusieurs processus en appliquant l'analyse en composantes principales à la matrice de cooccurrence de contexte de mot créée à partir du corpus. Dans la seconde moitié du chapitre 9, le vecteur de mots (300 dimensions) obtenu par apprentissage est utilisé pour calculer la similitude des mots et analyser (analogique).
Notez que si le problème 83 est implémenté de manière obéissante, une grande quantité (environ 7 Go) de stockage principal sera nécessaire. Si vous manquez de mémoire, créez un processus ou un corpus d'échantillonnage 1/100 enwiki-20150112-400-r100-10576.txt.bz2 Utilisez /nlp100/data/enwiki-20150112-400-r100-10576.txt.bz2).
Cette fois * "Corpus d'échantillonnage 1/100 [enwiki-20150112-400-r100-10576.txt.bz2](http://www.cl.ecei.tohoku.ac.jp/nlp100/data/enwiki-20150112-" 400-r100-10576.txt.bz2) ”* est utilisé.
Lisez le mot signifiant vecteur obtenu en> 85 et calculez la similitude cosinus entre «États-Unis» et «États-Unis». Cependant, notez que «États-Unis» est exprimé en interne par «États-Unis».
La similitude cosinus est la formule suivante obtenue en divisant le produit interne des vecteurs par le produit des normes. Pour plus d'informations, rendez-vous sur Google et vous en trouverez beaucoup.
\frac{\boldsymbol{A}\cdot\boldsymbol{B}}{|\boldsymbol{A}|\,|\boldsymbol{B}|}
import numpy as np
import pandas as pd
#Je n'ai spécifié aucun argument lors de l'enregistrement'arr_0'Stocké dans
matrix_x300 = np.load('085.matrix_x300.npz')['arr_0']
print('matrix_x300 Shape:', matrix_x300.shape)
# 'United States'Quand'U.S'Affichage de vecteur de mot
v1 = matrix_x300[group_t.index.get_loc('United_States')]
v2 = matrix_x300[group_t.index.get_loc('U.S')]
print(np.dot(v1, v2) / (np.linalg.norm(v1) * np.linalg.norm(v2)))
La première mi-temps est le même programme que le coup précédent. Chaque vecteur de mot est extrait sous forme de variables «v1» et «v2».
# 'United States'Quand'U.S'Affichage de vecteur de mot
v1 = matrix_x300[group_t.index.get_loc('United_States')]
v2 = matrix_x300[group_t.index.get_loc('U.S')]
Tout ce que vous avez à faire est de calculer. Le produit interne est calculé avec "dot" et la norme est calculée avec "norm".
print(np.dot(v1, v2) / (np.linalg.norm(v1) * np.linalg.norm(v2)))
Puisque la valeur maximale est 1 (1 est le même), 0,83 serait assez similaire.
0.837516976284694
Recommended Posts