[PYTHON] Traitement du langage 100 knocks-88: 10 mots à haute similitude

Il s'agit du record du 88e "10 mots à haute similitude" de Traitement linguistique 100 knock 2015. Extrayez des types similaires de chaque mot. C'est également le processus que vous souhaitez effectuer à partir de votre boîte aux lettres ou de vos minutes. Techniquement, c'est presque le même que le contenu précédent.

Lien de référence

Lien Remarques
088.10 mots à forte similitude.ipynb Lien GitHub du programme de réponse
100 coups de traitement du langage amateur:88 Je vous suis toujours redevable de 100 coups de traitement linguistique

environnement

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

Tâche

Chapitre 9: Méthode de l'espace vectoriel (I)

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 Wikipedia anglais au 12 janvier 2015, compressé au format bzip2. y a-t-il. En utilisant ce texte comme 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, concevez 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é.

88. 10 mots avec une grande similitude

Lisez le vecteur de signification du mot obtenu en> 85, et sortez 10 mots avec une forte similitude cosinus avec "England" et leur similitude.

Répondre

Programme de réponse [088. 10 mots à haute similarité.ipynb](https://github.com/YoheiFukuhara/nlp100/blob/master/09.%E3%83%99%E3%82%AF%E3%83 % 88% E3% 83% AB% E7% A9% BA% E9% 96% 93% E6% B3% 95% 20 (I) / 088.% E9% A1% 9E% E4% BC% BC% E5% BA % A6% E3% 81% AE% E9% AB% 98% E3% 81% 84% E5% 8D% 98% E8% AA% 9E10% E4% BB% B6.ipynb)

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)

# 'Lisez le vecteur de mot anglais et calculez la norme
v1 = matrix_x300[group_t.index.get_loc('England')]
v1_norm = np.linalg.norm(v1)


#Calcul de similarité cosinus
def get_cos_similarity(v2):
    
    #Si le vecteur est tout zéro-Renvoie 1
    if np.count_nonzero(v2) == 0:
        return -1
    else:
        return np.dot(v1, v2) / (v1_norm * np.linalg.norm(v2))

cos_sim = [get_cos_similarity(matrix_x300[i]) for i in range(len(group_t))]
print('Cosign Similarity result length:', len(cos_sim))

#Trier en quittant l'index
cos_sim_sorted = np.argsort(cos_sim)

#De la toute fin du tableau triés par ordre croissant-11(-12)Sortie jusqu'à un par un(Le sommet est l'Angleterre lui-même)
for index in cos_sim_sorted[:-12:-1]:
    print('{}\t{}'.format(group_t.index[index], cos_sim[index]))

Répondre au commentaire

La partie de calcul de similarité cosinus est transformée en fonction. À en juger par la fonction count_nonzero, -1 est renvoyé lorsque tous les vecteurs sont à zéro.

#Calcul de similarité cosinus
def get_cos_similarity(v2):
    
    #Si le vecteur est tout zéro-Renvoie 1
    if np.count_nonzero(v2) == 0:
        return -1
    else:
        return np.dot(v1, v2) / (v1_norm * np.linalg.norm(v2))

Le résultat est obtenu à la fois avec la notation d'inclusion pour le tableau.

cos_sim = [get_cos_similarity(matrix_x300[i]) for i in range(len(group_t))]

Pour le calcul ci-dessus, j'ai pensé qu'il serait plus rapide d'utiliser cette ʻapply_along_axis` pour numpy, mais c'était plutôt lent, donc elle n'est pas adoptée.

cos_sim = np.apply_along_axis(get_cos_similarity, 1, matrix_x300)

Ceci est le résultat final. L'Écosse et l'Italie sont en tête. Il est surprenant qu'il y ait aussi le Japon. Est-ce parce que c'est un pays insulaire?

England	1.0000000000000002
Scotland	0.6364961613062289
Italy	0.6033905306935802
Wales	0.5961887337227456
Australia	0.5953277272306978
Spain	0.5752511915429617
Japan	0.5611603300967408
France	0.5547284075334182
Germany	0.5539239745925412
United_Kingdom	0.5225684232409136
Cheshire	0.5125286144779688

Recommended Posts

Traitement du langage 100 knocks-88: 10 mots à haute similitude
100 coups de traitement du langage avec Python 2015
Traitement du langage 100 Knock-87: similitude des mots
100 traitement de langage knock-94 (en utilisant Gensim): calcul de similarité avec WordSimilarity-353
100 traitements de langage avec Python (chapitre 3)
100 coups de traitement linguistique (2020): 28
100 coups de traitement linguistique (2020): 38
100 traitement de la langue frapper 00 ~ 02
J'ai fait 100 traitements linguistiques Knock 2020 avec GiNZA v3.1 Chapitre 4
100 traitements de langage avec Python (chapitre 2, partie 1)
100 traitements linguistiques Knock 2020 [00 ~ 39 réponse]
100 langues de traitement knock 2020 [00-79 réponse]
100 traitements linguistiques Knock 2020 [00 ~ 69 réponse]
100 Language Processing Knock 2020 Chapitre 1
100 coups de traitement du langage amateur: 17
100 traitements linguistiques Knock 2020 [00 ~ 49 réponse]
100 Traitement du langage Knock-52: Stemming
100 coups de langue amateur: 07
100 Language Processing Knock 2020 Chapitre 3
100 Language Processing Knock 2020 Chapitre 2
100 coups de traitement du langage amateur: 09
100 coups en traitement du langage amateur: 47
Traitement 100 langues knock-53: Tokenisation
100 coups de traitement du langage amateur: 97
100 coups de traitement du langage amateur: 67
100 traitement du langage knock-95 (en utilisant des pandas): Note avec WordSimilarity-353
100 traitement du langage Knock-51: découpage de mots
100 Language Processing Knock-58: Extraction de Taple
100 Language Processing Knock-57: Analyse des dépendances
Traitement du langage 100 knock-80 (remplacé par une expression régulière): formatage du corpus
100 traitement linguistique knock-50: coupure de phrase
100 langage de traitement knock-81 (remplacement de lot): traitement des noms de pays composés de mots composés
100 Language Processing Knock Chapitre 1 (Python)
100 Language Processing Knock Chapitre 2 (Python)
100 Language Processing Knock-25: Extraction de modèles
J'ai essayé 100 traitements linguistiques Knock 2020
100 Language Processing Knock-56: analyse de co-référence
Résolution de 100 traitements linguistiques Knock 2020 (01. "Patatokukashi")
Apprenez facilement 100 traitements linguistiques Knock 2020 avec "Google Colaboratory"
Traitement du langage naturel 2 similitude de mots
100 coups de traitement du langage amateur: Résumé
Étudiez le traitement du langage naturel avec Kikagaku
100 Language Processing Knock 2020 Chapitre 2: Commandes UNIX
100 Language Processing Knock 2015 Chapitre 5 Analyse des dépendances (40-49)
100 Language Processing Knock Chapitre 1 en Python
100 Language Processing Knock 2020 Chapitre 4: Analyse morphologique
100 Language Processing Knock 2020 Chapitre 9: RNN, CNN
100 traitement du langage knock-76 (en utilisant scicit-learn): étiquetage
100 Language Processing Knock-55: extraction d'expressions uniques
[Traitement du langage naturel] Prétraitement avec le japonais
J'ai essayé 100 traitements linguistiques Knock 2020: Chapitre 3
100 Language Processing Knock-82 (mot de contexte): Extraction de contexte
100 Language Processing Knock: Chapitre 1 Mouvement préparatoire
100 Language Processing Knock 2020 Chapitre 6: Apprentissage automatique
100 Traitement du langage Knock Chapitre 4: Analyse morphologique
Traitement du langage 100 knock-86: affichage vectoriel Word
100 Language Processing Knock 2020 Chapitre 10: Traduction automatique (90-98)
100 Language Processing Knock 2020 Chapitre 5: Analyse des dépendances
100 Language Processing Knock-28: Suppression du balisage MediaWiki
100 Traitement du langage Knock 2020 Chapitre 7: Vecteur de mots