[PYTHON] 100 Sprachverarbeitung Knock-90 (mit Gensim): Lernen mit word2vec

Dies ist die Aufzeichnung des 90. "Learning with word2vec" von Language Processing 100 Knock 2015. Die Frage ist, lassen Sie uns einfach das tun, was wir in Kapitel 9 mit einem Paket getan haben. Die Tatsache, dass der Inhalt, den ich mir verzweifelt ausgedacht habe, während ich mir Sorgen über Speichermangel gemacht habe, mit etwa 3 Codezeilen erstellt werden kann, ist unwiderstehlich, aber ich bin mir seiner Pracht sehr bewusst. Dieses Mal wird anstelle von Googles word2vec, das in der Frage angegeben ist, Open Source Geinsim verwendet. /) Wird genutzt. Ich habe gehört, dass Pakete häufig aktualisiert und häufig verwendet werden (ich habe sie aufgrund meines Wissens nicht gründlich recherchiert).

Referenzlink

Verknüpfung Bemerkungen
090.Lernen mit word2vec.ipynb Antwortprogramm GitHub Link
100 Klicks Amateur-Sprachverarbeitung:90 Ich bin Ihnen immer mit 100 Sprachverarbeitungsklopfen zu Dank verpflichtet

Umgebung

Art Ausführung Inhalt
OS Ubuntu18.04.01 LTS Es läuft virtuell
pyenv 1.2.15 Ich benutze pyenv, weil ich manchmal mehrere Python-Umgebungen benutze
Python 3.6.9 python3 auf pyenv.6.Ich benutze 9
3.7 oder 3.Es gibt keinen tiefen Grund, keine 8er-Serie zu verwenden
Pakete werden mit venv verwaltet

In der obigen Umgebung verwende ich die folgenden zusätzlichen Python-Pakete. Einfach mit normalem Pip installieren.

Art Ausführung
gensim 3.8.1
numpy 1.17.4

Aufgabe

Kapitel 10: Vektorraummethode (II)

In Kapitel 10 werden wir weiter daran arbeiten, Wortvektoren aus dem vorherigen Kapitel zu lernen.

90. Lernen mit word2vec

Wenden Sie word2vec auf den in 81 erstellten Korpus an und lernen Sie den Wortvektor. Konvertieren Sie außerdem das Format des gelernten Wortvektors und führen Sie das Programm 86-89 aus.

Antworten

Antwortprogramm [090.word2vec learning.ipynb](https://github.com/YoheiFukuhara/nlp100/blob/master/10.%E3%83%99%E3%82%AF%E3%83%88%E3 % 83% AB% E7% A9% BA% E9% 96% 93% E6% B3% 95% 20 (II) /090.word2vec%E3%81%AB%E3%82%88%E3%82%8B% E5% AD% A6% E7% BF% 92.ipynb)

from pprint import pprint

from gensim.models import word2vec

corpus = word2vec.Text8Corpus('./../09.Vektorraummethode(I)/081.corpus.txt')

model = word2vec.Word2Vec(corpus, size=300)
model.save('090.word2vec.model')

# 86.Anzeige des Wortvektors
pprint(model.wv['United_States'])

# 87.Wortähnlichkeit
print(np.dot(model.wv['United_States'], model.wv['U.S']) / (np.linalg.norm(model.wv['United_States']) * np.linalg.norm(model.wv['U.S'])))

# 88.10 Wörter mit hoher Ähnlichkeit
pprint(model.wv.most_similar('England'))

# 89.Analogie durch additive Zusammensetzung
# vec("Spain") - vec("Madrid") + vec("Athens")
pprint(model.wv.most_similar(positive=['Spain', 'Athens'], negative=['Madrid']))

Kommentar beantworten

Wortvektorgenerierung

Lesen Sie zuerst die Datei. Ich dachte, dass es viele Beispiele für die Verwendung der Funktion "Text8Corpus" gibt, also fragte ich mich, was der "Text8Corpus" überhaupt war. Gemäß dem Artikel "Erstellen einer japanischen Version des Text8-Korpus und Erlernen verteilter Ausdrücke" (https://hironsan.hatenablog.com/entry/japanese-text8-corpus) handelt es sich bei text8 um Wikipedia-Daten, die wie folgt verarbeitet wurden. Es scheint.

--Halten Sie Text- und Bildunterschriften

Ich glaube, es gab Großbuchstaben, aber ich hatte das Gefühl, dass sie im Allgemeinen die Bedingungen erfüllen, also habe ich "Text8Corpus" verwendet.

corpus = word2vec.Text8Corpus('./../09.Vektorraummethode(I)/081.corpus.txt')

Alles, was Sie tun müssen, ist die Funktion "Word2Vec" zu verwenden, um den 300-dimensionalen Wortvektor zu vervollständigen. Die Generierung dauerte weniger als 4 Minuten. Beeindruckend ... Ich habe keine Optionen verwendet, aber die gemsim word2vec Optionsliste war leicht zu verstehen.

model = word2vec.Word2Vec(corpus, size=300)

Speichern Sie dann die Datei für nachfolgende Klopfen.

model.save('090.word2vec.model')

Dann scheinen die folgenden 3 Dateien erstellt worden zu sein. Es ist unangenehm, keiner zu sein.

Datei Größe
090.word2vec.model 5MB
090.word2vec.model.trainables.syn1neg.npy 103MB
090.word2vec.model.wv.vectors.npy 103MB

86. Anzeigen von Wortvektoren

Lesen Sie das in> 85 erhaltene Wortbedeutungsvektor und zeigen Sie den Vektor "USA" an. Beachten Sie jedoch, dass "USA" intern als "United_States" bezeichnet wird.

In model.wv befindet sich ein Vektor. Geben Sie ihn einfach an.

pprint(model.wv['United_States'])
array([ 2.3478289 , -0.61461514,  0.0478639 ,  0.6709404 ,  1.1090833 ,
       -1.0814637 , -0.78162867, -1.2584596 , -0.04286158,  1.2928476 ,
Ergebnis weggelassen

87. Wortähnlichkeit

Lesen Sie den in> 85 erhaltenen Wortbedeutungsvektor und berechnen Sie die Kosinusähnlichkeit zwischen "USA" und "USA". Beachten Sie jedoch, dass "USA" intern als "USA" ausgedrückt wird.

Verwenden Sie model, um die Kosinusähnlichkeit zwischen denselben Vektoren wie in Kapitel 9 zu berechnen. In Kapitel 9 war es 0,837516976284694, was einen höheren Grad an Ähnlichkeit ergibt.

print(np.dot(model.wv['United_States'], model.wv['U.S']) / (np.linalg.norm(model.wv['United_States']) * np.linalg.norm(model.wv['U.S'])))
0.8601596

88. 10 Wörter mit hoher Ähnlichkeit

Lesen Sie den Bedeutungsvektor des in> 85 erhaltenen Wortes und geben Sie 10 Wörter mit hoher Kosinusähnlichkeit zu "England" und deren Ähnlichkeit aus.

Sie können nur mit der Funktion modst_similar ausgeben.

pprint(model.wv.most_similar('England'))
[('Scotland', 0.7884809970855713),
 ('Wales', 0.7721374034881592),
 ('Ireland', 0.6838206052780151),
 ('Britain', 0.6335258483886719),
 ('Hampshire', 0.6147407293319702),
 ('London', 0.6021863222122192),
 ('Cork', 0.5809425115585327),
 ('Manchester', 0.5767091512680054),
 ('Liverpool', 0.5765234231948853),
 ('Orleans', 0.5624016523361206)]

Übrigens war das Ergebnis in Kapitel 9 wie folgt, aber dieses Mal können Sie sehen, dass die Wörter, die sich auf England beziehen, höher erscheinen und korrektere Daten ausgegeben werden.

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

89. Analogie durch additive Zusammensetzung

Lesen Sie den Bedeutungsvektor des in 85 erhaltenen Wortes, berechnen Sie vec ("Spanien") --vec ("Madrid") + vec ("Athen") und berechnen Sie 10 Wörter mit hoher Ähnlichkeit zu diesem Vektor und deren Ähnlichkeit. Gib es aus.

Wenn Sie "positiv" und "negativ" an die Funktion "modst_similar" übergeben, werden 10 Wörter mit hoher Ähnlichkeit berechnet und ausgegeben.

pprint(model.wv.most_similar(positive=['Spain', 'Athens'], negative=['Madrid']))
[('Denmark', 0.7606724500656128),
 ('Italy', 0.7585107088088989),
 ('Austria', 0.7528095841407776),
 ('Greece', 0.7401891350746155),
 ('Egypt', 0.7314825057983398),
 ('Russia', 0.7225484848022461),
 ('Great_Britain', 0.7184625864028931),
 ('Norway', 0.7148114442825317),
 ('Rome', 0.7076312303543091),
 ('kingdom', 0.6994863748550415)]

Das Ergebnis in Kapitel 9 war übrigens wie folgt, aber diesmal liegt Griechenland ebenfalls auf dem 4. Platz und Sie können sehen, dass korrektere Daten ausgegeben werden.

Spain   0.8178213952646727
Sweden  0.8071582503798717
Austria 0.7795030693787409
Italy   0.7466099164394225
Germany 0.7429125848677439
Belgium 0.729240312232219
Netherlands 0.7193045612969573
Télévisions   0.7067876635156688
Denmark 0.7062857691945504
France  0.7014078181006329

Recommended Posts

100 Sprachverarbeitung Knock-90 (mit Gensim): Lernen mit word2vec
100 Sprachverarbeitung Knock-73 (mit Scikit-Learn): Lernen
100 Sprachverarbeitung Knock-94 (mit Gensim): Ähnlichkeitsberechnung mit WordSimilarity-353
100 Sprachverarbeitung Knock-95 (mit Pandas): Bewertung mit WordSimilarity-353
100 Sprachverarbeitungsklopfen mit Python 2015
100 Sprachverarbeitung Knock-92 (mit Gensim): Anwendung auf Analogiedaten
Lernen Sie mit "Google Colaboratory" ganz einfach 100 Sprachverarbeitungsklopfen 2020.
100 Sprachverarbeitungsklopfen mit Python (Kapitel 1)
100 Sprachverarbeitung Knock-76 (mit Scicit-Learn): Beschriftung
100 Sprachverarbeitungsklopfen mit Python (Kapitel 3)
100 Sprachverarbeitung Knock 2020 Kapitel 6: Maschinelles Lernen
Sprachverarbeitung 100 Knocks-31 (mit Pandas): Verben
100 Sprachverarbeitung Knock-74 (mit Scicit-Learn): Vorhersage
100 Sprachverarbeitung Knock-38 (mit Pandas): Histogramm
100 Sprachverarbeitungsklopfen (2020): 28
100 Sprachverarbeitungsklopfen (2020): 38
100 Sprachverarbeitung klopfen 00 ~ 02
100 Sprachverarbeitung Knock-97 (mit Scicit-Learn): k-bedeutet Clustering
Ich habe mit GiNZA v3.1 Kapitel 4 100 Sprachverarbeitungsklopfen 2020 durchgeführt
100 Sprachverarbeitung Knock-33 (mit Pandas): Sahen Nomen
100 Sprachverarbeitung Knock-71 (mit Stanford NLP): Stoppwort
100 Sprachverarbeitungsklopfen mit Python (Kapitel 2, Teil 2)
100 Sprachverarbeitung Knock-35 (mit Pandas): Nomenklatur
100 Sprachverarbeitungsklopfen mit Python (Kapitel 2, Teil 1)
100 Sprachverarbeitung Knock-39 (mit Pandas): Zipf-Gesetz
100 Sprachverarbeitung Knock-34 (mit Pandas): "B von A"
Sprachverarbeitung 100 Klopfen-88: 10 Wörter mit hoher Ähnlichkeit
100 Sprachverarbeitung Knock-96 (unter Verwendung von Gensim): Extraktion des Vektors in Bezug auf den Ländernamen
100 Sprachverarbeitung klopfen 2020 [00 ~ 39 Antwort]
100 Sprachverarbeitung klopfen 2020 [00-79 Antwort]
100 Sprachverarbeitung klopfen 2020 [00 ~ 69 Antwort]
100 Sprachverarbeitung Knock 2020 Kapitel 1
100 Amateur-Sprachverarbeitungsklopfen: 17
100 Sprachverarbeitung klopfen 2020 [00 ~ 49 Antwort]
100 Sprachverarbeitung Knock-52: Stemming
100-Sprach-Verarbeitung Knock-79 (mit Scikit-Learn): Präzisions-Recall-Grafikzeichnung
100 Sprachverarbeitung Knock Kapitel 1
100 Amateur-Sprachverarbeitungsklopfen: 07
100 Sprachverarbeitung Knock-20 (unter Verwendung von Pandas): Lesen von JSON-Daten
100 Sprachverarbeitung Knock-32 (mit Pandas): Prototyp des Verbs
100-Sprach-Verarbeitung Knock-98 (unter Verwendung von Pandas): Clustering nach Ward-Methode
100 Sprachverarbeitung Knock 2020 Kapitel 3
100 Sprachverarbeitung Knock 2020 Kapitel 2
100 Sprachverarbeitung Knock-75 (mit Scicit-Learn): Gewicht der Identität
100 Amateur-Sprachverarbeitungsklopfen: 09
100 Sprachverarbeitung Knock-99 (mit Pandas): Visualisierung durch t-SNE
100 Amateur-Sprachverarbeitungsklopfen: 47
100 Sprachverarbeitung Knock-53: Tokenisierung
100 Amateur-Sprachverarbeitungsklopfen: 97
100 Sprachverarbeitung klopfen 2020 [00 ~ 59 Antwort]
100 Amateur-Sprachverarbeitungsklopfen: 67
100 Sprachverarbeitung Knock-72 (unter Verwendung von Stanford NLP): Identitätsextraktion
Sprachverarbeitung 100 Knock-80 (ersetzt durch regulären Ausdruck): Korpusformatierung
100 Sprachverarbeitung Knock-36 (unter Verwendung von Pandas): Häufigkeit des Auftretens von Wörtern
100 Sprachverarbeitung Knock: Kapitel 2 UNIX-Befehlsgrundlagen (mit Pandas)
100 Sprachverarbeitung Knock-83 (mit Pandas): Messung der Wort- / Kontexthäufigkeit
100 Sprachverarbeitung Knock-30 (unter Verwendung von Pandas): Lesen der Ergebnisse der morphologischen Analyse
100 Sprachverarbeitung Knock-51: Wortausschnitt
100 Sprachverarbeitung Knock-58: Extraktion von Taple
100 Sprachverarbeitung Knock-57: Abhängigkeitsanalyse
100 Sprachverarbeitung Knock-50: Satzumbruch