[PYTHON] Traitement du langage naturel (données originales) avec Word2Vec développé par des chercheurs Google américains

w2v.png w2v_logo.png

"Word2Vec" est une méthode proposée par le chercheur de Google Thomas Mikolov et d'autres, et est une méthode de traitement du langage naturel qui a permis d'améliorer considérablement la précision de certains problèmes par rapport aux algorithmes conventionnels.

Word2Vec, comme son nom l'indique, est une méthode de quantification qui vectorise et exprime les mots. Par exemple, le nombre de vocabulaire que les Japonais utilisent quotidiennement serait de dizaines de milliers à des centaines de milliers, mais Word2Vec exprime chaque mot sous forme de vecteur dans un espace d'environ 200 dimensions.

En conséquence, il est devenu possible de saisir le «sens» des mots, comme le degré de similitude entre des mots qui étaient auparavant inconnus ou difficiles à améliorer l'exactitude, et l'addition et la soustraction entre les mots.

Cela ne semble donc pas très intéressant, je vais donc le mettre en pratique tout de suite.

1. Construction de l'environnement

Découvrez le code source de Word2Vec à l'aide de subversion.

mkdir ~/word2vec_test
cd ~/word2vec_test
svn checkout http://word2vec.googlecode.com/svn/trunk/
cd trunk
make

L'installation de # word2vec est terminée

2. Essayez-le avec des données de test pour le moment

cd trunc
./demo-word.sh

Commencera la formation avec les données de test.

2-1. Après l'entraînement, essayez de l'utiliser

Lorsque la formation est terminée, l'écran de saisie apparaîtra, alors essayez d'entrer des mots tels que «chat» et «chien».

Le résultat de sortie lors de la saisie réelle de "cat" est le suivant.

cats		0.603425
feline		0.583455
kitten		0.569622
meow		0.565481
purebred	0.558347
dog			0.545779

3. Essayez-le avec vos propres données de publication Facebook de centaines de milliers de personnes (c'est la production!)

Exportez les données de publication Facebook vers csv. (fb_post_for_word2vec.csv) Insérez le message au moment de la publication dans la première colonne et le titre du lien dans la deuxième colonne pour générer un fichier.

Analysez le fichier généré avec MeCab pour créer un fichier texte de mots (fb_word_for_word2vec.txt).

3-1. Générer des données à l'aide de MeCab

# -*- coding: utf-8 -*-
import csv
import MeCab
import re
tagger = MeCab.Tagger('-Owakati')
fo = file('fb_word_for_word2vec.txt','w')
for line in csv.reader(open("fb_post_for_word2vec.csv","rU")):
  if len(line) == 2:
    line = line[0] + line[1]
  elif len(line) == 1:
    line = line[0]
  else:
    continue
  line = re.sub('http?://.*','', line)
  fo.write(tagger.parse(line))
fo.close()

3-2. Lisez le fichier txt généré et entraînez-le

#terminal
time ./word2vec -train fb_post_for_word2vec.txt -output fb_post.bin -cbow 0 -size 200 -window 5 -negative 0 -hs 1 -sample 1e-3 -binary 1

3-3. Essayez de l'utiliser après l'entraînement

#terminal

#Lorsque vous souhaitez obtenir des mots par ordre décroissant de similitude avec les mots ./distance fb_post.bin

Lorsque vous voulez obtenir le résultat en substituant un vecteur de mot dans une certaine équation avec # ./word-analogy fb_post.bin

Lorsque vous exécutez, l'écran de saisie s'affiche.

3-3-1. Extraire des mots et des degrés similaires à un certain mot (distance)

Lorsque vous entrez un certain mot, des mots similaires sortent du haut.

ruby
⇒
rails		0.726545
js			0.719732
rbenv		0.715303
javascript	0.685051
gem			0.684497
python		0.677852
scala		0.672012

#Rails est brillamment au sommet, suivi des langages orientés objet et des gemmes.

docker
⇒
apache		0.672672
jenkins		0.668232
ruby		0.661645
redis		0.653154
Vagrant		0.645885
rbenv		0.643476

Le nombre d'infrastructures et de systèmes d'environnement de développement augmente.

Hanzawa ⇒ Directeur général Owada 0.794253 Réconciliation 0,655206 En sandwich 0.634274 Naoki Hanzawa 0.632742 Nonomura 0.630198 Passion 0.604290 Parodie 0.490672 Assemblée préfectorale 0.472910

3-3-2. Ajouter / soustraire des mots et jouer avec eux (intéressant ici: analogie de mots)

Si vous entrez trois mots "A B C" et A ⇒ B, alors C ⇒? Renverra la sortie. Puisqu'il s'agit d'un vecteur, il semble qu'il calcule A-B + C.

Intéressant lorsque vous essayez réellement

Ichiro-Baseball + Honda ⇒ Football 0.612238 Premier match 0.588327 Basket-ball 0.562973 Rugby 0.543752 Baseball universitaire 0.537109 Lycée de Yokohama 0.536245 Match d'entraînement 0.535091

Japon-Tokyo + France ⇒ Sapporo 0.569258 Paris 0,566437 Milan 0.560036 Londres 0,552840 Osaka 0.541102 Venise 0.540721

Oeuf de riz + sarrasin ⇒ Poulet 0.686967 Negi 0.670782 Sel 0.663107 Miso 0.654149 Farine de poisson 0.648807 Ebi 0.648329

4. Autres choses que vous pouvez faire

--Calculer la similitude entre les phrases et les mots

Résumé

Être capable de représenter un mot comme un vecteur est proche de pouvoir représenter les relations de tout.

Presque tout ce qui peut être expliqué par des mots, comme les personnes aux personnes, les images aux images, les zones aux zones, les choses aux choses, les personnes aux choses, pourra être tracé dans un espace de 200 dimensions.

Il faut faire des efforts pour améliorer la précision, mais l'odeur qui semble être utile pour les choses de valeur en réfléchissant à la façon de l'utiliser apparaîtra!

Recommended Posts

Traitement du langage naturel (données originales) avec Word2Vec développé par des chercheurs Google américains
Dockerfile avec les bibliothèques nécessaires pour le traitement du langage naturel avec python
Vérification des performances du prétraitement des données dans le traitement du langage naturel
Réalisez une maison super IoT en acquérant des données de capteur dans la maison avec Raspberry Pi
[Word2vec] Visualisons le résultat du traitement en langage naturel des avis des entreprises
Essayez le livre "Introduction au développement d'applications de traitement du langage naturel en 15 étapes" - Chapitre 4 Étape 15 Mémo "Collecte de données"
SE, débutant en analyse de données, apprend avec l'équipe de science des données vol.1
Un mémo organisé en renommant les noms de fichiers dans le dossier avec python
L'espace est-il remplacé par un signe plus ou% 20 dans le traitement du codage en pourcentage?
Apprenez les bases de la classification de documents par traitement du langage naturel, modèle de sujet
Recevez une liste des résultats du traitement parallèle en Python avec starmap
3. Traitement du langage naturel avec Python 1-2. Comment créer un corpus: Aozora Bunko
3. Traitement du langage naturel par Python 1-1. Word N-gram
J'ai essayé le traitement du langage naturel avec des transformateurs.
J'ai essayé d'extraire des expressions uniques avec la bibliothèque de traitement du langage naturel GiNZA
3. Traitement du langage naturel par Python 3-1. Important outil d'extraction de mots Analyse TF-IDF [définition originale]
100 traitement du langage knock-90 (en utilisant Gensim): apprendre avec word2vec
[Python] Récupérez les fichiers dans le dossier avec Python
3. Traitement du langage naturel par Python 2-2. Réseau de co-occurrence [mecab-ipadic-NEologd]
Supprimer des données dans un modèle avec Redis Cluster
Dessinez un graphique en traitant avec Pandas groupby
[Python] J'ai joué avec le traitement du langage naturel ~ transformers ~
Python: apprentissage profond du traitement du langage naturel: principes de base
Profitons du traitement du langage naturel à l'aide de l'API COTOHA
Insoutenable manque d'attention dans le traitement du langage naturel
[Traitement du langage naturel / PNL] Comment effectuer facilement une traduction arrière par traduction automatique avec Python