[PYTHON] Verarbeitung natürlicher Sprache (Originaldaten) mit Word2Vec, entwickelt von US-amerikanischen Google-Forschern

w2v.png w2v_logo.png

"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.

1. Umweltbau

Ü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

2. Probieren Sie es vorerst mit Testdaten aus

cd trunc
./demo-word.sh

Beginnt mit dem Training mit den Testdaten.

2-1. Versuchen Sie es nach dem Training

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

3. Probieren Sie es mit Ihren eigenen Facebook-Post-Daten von Hunderttausenden von Menschen aus (dies ist die Produktion!)

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.

3-1. Generieren Sie Daten mit 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. Lesen Sie die generierte txt-Datei und trainieren Sie sie

#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 Versuchen Sie es nach dem Training

#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.

3-3-1. Extrahieren Sie Wörter und Grade, die einem bestimmten Wort ähnlich sind (Abstand).

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

3-3-2. Addiere / subtrahiere Wörter und spiele mit ihnen (interessant hier: Wortanalogie)

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

4. Andere Dinge, die Sie tun können

--Berechnen Sie die Ähnlichkeit zwischen Phrasen und Wörtern --Wortclustering

Zusammenfassung

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

Verarbeitung natürlicher Sprache (Originaldaten) mit Word2Vec, entwickelt von US-amerikanischen Google-Forschern
Dockerfile mit den notwendigen Bibliotheken für die Verarbeitung natürlicher Sprache mit Python
Leistungsüberprüfung der Datenvorverarbeitung in der Verarbeitung natürlicher Sprache
Verwirklichen Sie ein Super-IoT-Haus, indem Sie mit Raspberry Pi Sensordaten im Haus erfassen
[Word2vec] Lassen Sie uns das Ergebnis der Verarbeitung von Unternehmensbewertungen in natürlicher Sprache visualisieren
Probieren Sie das Buch "Einführung in die Verarbeitung natürlicher Sprachanwendungen in 15 Schritten" aus - Kapitel 4 Schritt 15 Memo "Datenerfassung"
SE, ein Anfänger in der Datenanalyse, lernt mit dem Data Science Team Vol.1
Ein Memo, das durch Umbenennen der Dateinamen im Ordner mit Python organisiert wird
Wird der Leerzeichen bei der Verarbeitung der prozentualen Codierung durch ein Pluszeichen oder% 20 ersetzt?
Lernen Sie die Grundlagen der Dokumentklassifizierung durch Verarbeitung natürlicher Sprache, Themenmodell
Erhalten Sie eine Liste der Ergebnisse der Parallelverarbeitung in Python mit Starmap
3. Verarbeitung natürlicher Sprache mit Python 1-2. So erstellen Sie einen Korpus: Aozora Bunko
3. Verarbeitung natürlicher Sprache durch Python 1-1. Word N-Gramm
Ich habe versucht, natürliche Sprache mit Transformatoren zu verarbeiten.
Ich habe versucht, mit der Bibliothek GiNZA zur Verarbeitung natürlicher Sprache eindeutige Ausdrücke zu extrahieren
3. Verarbeitung natürlicher Sprache durch Python 3-1. Wichtiges Tool zur Wortextraktion TF-IDF-Analyse [Originaldefinition]
100 Sprachverarbeitung Knock-90 (mit Gensim): Lernen mit word2vec
[Python] Holen Sie sich die Dateien mit Python in den Ordner
3. Verarbeitung natürlicher Sprache durch Python 2-2. Koexistenznetzwerk [mecab-ipadic-NEologd]
Löschen Sie Daten in einem Muster mit Redis Cluster
Zeichnen Sie ein Diagramm, indem Sie es mit Pandas groupby verarbeiten
[Python] Ich habe mit der Verarbeitung natürlicher Sprache ~ Transformatoren ~ gespielt
Python: Tiefes Lernen in der Verarbeitung natürlicher Sprache: Grundlagen
Lassen Sie uns die Verarbeitung natürlicher Sprache mit der COTOHA-API genießen
Unerträgliche Aufmerksamkeitsmangel bei der Verarbeitung natürlicher Sprache
[Verarbeitung natürlicher Sprache / NLP] Einfache Rückübersetzung durch maschinelle Übersetzung mit Python