"Word2Vec" ist eine von Google-Forscher Thomas Mikolov und anderen vorgeschlagene Methode und eine Methode zur Verarbeitung natürlicher Sprache, mit der die Genauigkeit einiger Probleme im Vergleich zu herkömmlichen Algorithmen erheblich verbessert werden konnte.
Word2Vec ist, wie der Name schon sagt, eine Quantifizierungsmethode, die Wörter vektorisiert und ausdrückt. Beispielsweise wird die Anzahl der Vokabeln, die Japaner täglich verwenden, als Zehntausende bis Hunderttausende bezeichnet, aber Word2Vec drückt jedes Wort als Vektor in einem Raum von etwa 200 Dimensionen aus.
Infolgedessen ist es möglich geworden, die "Bedeutung" von Wörtern zu erfassen, beispielsweise den Grad der Ähnlichkeit zwischen Wörtern, die zuvor unbekannt waren oder deren Genauigkeit schwer zu verbessern war, und das Addieren und Subtrahieren zwischen Wörtern.
Es scheint also nicht sehr interessant zu sein, also werde ich es sofort in die Praxis umsetzen.
Überprüfen Sie den Word2Vec-Quellcode mithilfe von Subversion.
mkdir ~/word2vec_test
cd ~/word2vec_test
svn checkout http://word2vec.googlecode.com/svn/trunk/
cd trunk
make
Die Installation von # word2vec ist abgeschlossen
cd trunc
./demo-word.sh
Beginnt mit dem Training mit den Testdaten.
Wenn das Training beendet ist, wird der Eingabebildschirm angezeigt. Geben Sie also Wörter wie "Katze" und "Hund" ein.
Das Ausgabeergebnis bei der tatsächlichen Eingabe von "cat" ist wie folgt.
cats 0.603425
feline 0.583455
kitten 0.569622
meow 0.565481
purebred 0.558347
dog 0.545779
Exportieren Sie Facebook-Post-Daten nach CSV. (fb_post_for_word2vec.csv) Fügen Sie die Nachricht zum Zeitpunkt der Veröffentlichung in die erste Spalte und den Link-Titel in die zweite Spalte ein, um eine Datei zu generieren.
Analysieren Sie die generierte Datei mit MeCab, um eine Worttextdatei (fb_word_for_word2vec.txt) zu erstellen.
# -*- 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
#Wenn Sie Wörter in absteigender Reihenfolge der Ähnlichkeit mit Wörtern erhalten möchten ./distance fb_post.bin
Wenn Sie das Ergebnis erhalten möchten, indem Sie einen Wortvektor in eine bestimmte Gleichung mit # einsetzen ./word-analogy fb_post.bin
Wenn Sie ausführen, wird der Eingabebildschirm angezeigt.
Wenn Sie ein bestimmtes Wort eingeben, werden ähnliche Wörter von oben angezeigt.
ruby
⇒
rails 0.726545
js 0.719732
rbenv 0.715303
javascript 0.685051
gem 0.684497
python 0.677852
scala 0.672012
#Rails ist die Spitze, gefolgt von objektorientierten Sprachen und Edelsteinen.
docker
⇒
apache 0.672672
jenkins 0.668232
ruby 0.661645
redis 0.653154
Vagrant 0.645885
rbenv 0.643476
#Die Anzahl der Infrastruktur- und Entwicklungsumgebungssysteme nimmt zu.
Hanzawa ⇒ Geschäftsführer Owada 0.794253 Versöhnung 0.655206 Sandwiched 0.634274 Naoki Hanzawa 0,632742 Nonomura 0,630198 Leidenschaft 0,604290 Parodie 0.490672 Präfekturversammlung 0.472910
Wenn Sie drei Wörter "A B C" und A ⇒ B eingeben, dann C ⇒? Gibt die Ausgabe zurück. Da es sich um einen Vektor handelt, scheint er A-B + C zu berechnen.
Es ist interessant, es tatsächlich zu versuchen
Ichiro-Baseball + Honda ⇒ Fußball 0.612238 Erstes Match 0.588327 Basketball 0,562973 Rugby 0,543752 College Baseball 0.537109 Yokohama High School 0.536245 Übungsspiel 0.535091
Japan-Tokio + Frankreich ⇒ Sapporo 0,569258 Paris 0,566437 Milan 0.560036 London 0,552840 Osaka 0,541102 Venedig 0,540721
Reis-Ei + Buchweizen ⇒ Huhn 0,686967 Negi 0,670782 Salz 0,663107 Miso 0,654149 Fischmehl 0,648807 Ebi 0,648329
--Berechnen Sie die Ähnlichkeit zwischen Phrasen und Wörtern --Wortclustering
In der Lage zu sein, ein Wort als Vektor darzustellen, ist nahe daran, die Beziehungen von allem darstellen zu können.
Fast alles, was in Worten erklärt werden kann, wie Menschen zu Menschen, Bilder zu Bildern, Bereiche zu Bereichen, Dinge zu Dingen, Menschen zu Dingen, kann in einem 200-dimensionalen Raum aufgezeichnet werden.
Es ist notwendig, Anstrengungen zu unternehmen, um die Genauigkeit zu verbessern, aber der Geruch, der für wertvolle Dinge nützlich zu sein scheint, wenn man überlegt, wie man ihn verwendet, wird auftauchen!
Recommended Posts