"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.
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
cd trunc
./demo-word.sh
Commencera la formation avec les données de test.
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
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).
# -*- 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()
#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
#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.
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
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
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
--Calculer la similitude entre les phrases et les mots
Ê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