[PYTHON] Verstehe Word2Vec

Einführung

Ich habe zusammengefasst, was ich über Word2Vec gelernt habe, das heute eine Standardmethode für die Verarbeitung natürlicher Sprache ist. Der Umriss des Algorithmus wird organisiert und das Modell mithilfe der Bibliothek erstellt.

Referenz

Zum Verständnis von Word2Vec habe ich Folgendes erwähnt.

Word2Vec Übersicht

Im Folgenden wird das Konzept der Verarbeitung natürlicher Sprache beschrieben, das die Voraussetzung von Word2Vec ist.

Verteilter Ausdruck von Wörtern

Die Darstellung eines Wortes als Vektor fester Länge wird als "verteilte Wortdarstellung" bezeichnet. Wenn ein Wort als Vektor ausgedrückt werden kann, kann die Bedeutung des Wortes quantitativ erfasst werden, so dass es auf verschiedene Prozesse angewendet werden kann. ** Word2Vec ist auch eine Methode zum Erfassen verteilter Wortausdrücke **.

Verteilungshypothese

In der Welt der Verarbeitung natürlicher Sprache werden verschiedene Vektorisierungsmethoden untersucht, aber die Hauptmethode basiert auf der Idee, dass ** "Wortbedeutungen durch umgebende Wörter" ** ** Verteilungshypothese * gebildet werden Es wird genannt *. ** Word2Vec, das in diesem Artikel vorgestellt wird, basiert ebenfalls auf der Verteilungshypothese. ** ** **

Zählbasiert und inferenzbasiert

Es gibt ungefähr zwei Methoden zum Erfassen verteilter Wortausdrücke: ** zählbasierte Methode ** und ** inferenzbasierte Methode **. Die zählbasierte Methode ist eine Methode zum Ausdrücken von Wörtern durch die Häufigkeit der umgebenden Wörter und erhält eine verteilte Darstellung von Wörtern aus ** statistischen Daten des gesamten Korpus **. Andererseits ist die inferenzbasierte Methode eine Methode, die ein neuronales Netzwerk verwendet, um die Gewichte ** wiederholt zu aktualisieren, während eine kleine Menge eines Trainingsmusters betrachtet wird. ** Word2Vec fällt unter letzteres **.

Word2vec-Algorithmus

Im Folgenden werden wir den Inhalt des Word2Vec-Algorithmus erläutern.

In Word2vec verwendetes neuronales Netzwerkmodell

Word2vec verwendet die folgenden zwei Modelle.

Ich werde den Mechanismus jedes Modells erklären.

CBOW-Modell

Überblick

Das CBOW-Modell ist ein neuronales Netzwerk, das darauf abzielt, Ziele aus dem Kontext abzuleiten. Sie können eine verteilte Darstellung von Wörtern erhalten, indem Sie dieses CBOW-Modell trainieren, um Schlussfolgerungen so genau wie möglich zu machen.

Wie oft der Kontext vorher und nachher verwendet werden soll, wird für jede Modellerstellung festgelegt. Wenn jedoch ein Wort vorher und nachher als Kontext verwendet wird, wird beispielsweise im folgenden Fall das Wort "?" Aus "jeden Morgen" und "o" erraten. Ich werde.

ich Ist Jeden Morgen Zu Trinken Masu

Die Modellstruktur von CBOW ist unten dargestellt. Es gibt zwei Eingabeebenen, die über die Zwischenebene die Ausgabeschicht erreichen.

NN.png

Die mittlere Schicht in der obigen Figur ist der "gemittelte" Wert nach der Umwandlung durch vollständige Verbindung jeder Eingangsschicht. Wenn die erste Eingabeebene in $ h_1 $ und die zweite Eingabeebene in $ h_2 $ konvertiert wird, sind die Neuronen in der mittleren Ebene $ \ frac {1} {2} (h_1 + h_2) $.

Die Konvertierung von der Eingabeebene in die mittlere Ebene erfolgt durch die vollständig verbundene Ebene (gewichtet mit $ W_ {in} $). Zu diesem Zeitpunkt ist das Gewicht $ W_ {in} $ der vollständig verbundenen Schicht eine Matrix mit der Form $ 8 × 3 $, aber dieses ** Gewicht ist die verteilte Darstellung von Wörtern, die mit CBOW ** erstellt wurden.

Das CBOW-Modell lernen

Das CBOW-Modell gibt die Punktzahl jedes Wortes in der Ausgabeebene aus, und Sie können die "Wahrscheinlichkeit" erhalten, indem Sie die Softmax-Funktion auf diese Punktzahl anwenden. Diese Wahrscheinlichkeit gibt an, welches Wort in der Mitte erscheint, wenn das vorhergehende und das folgende Wort angegeben werden.

nn3.png

Im obigen Beispiel lautet der Kontext "jeden Morgen" und "o", und das Wort, das das neuronale Netzwerk vorhersagen möchte, ist "Kaffee". Zu diesem Zeitpunkt kann in einem neuronalen Netzwerk mit geeigneten Gewichten erwartet werden, dass die richtigen Antwortneuronen in den Neuronen, die "Wahrscheinlichkeit" darstellen, höher sind. Beim CBOW-Lernen werden der Schnittpunktentropiefehler des richtigen Antwortetiketts und die vom neuronalen Netzwerk ausgegebene Wahrscheinlichkeit erhalten, und das Lernen geht in Richtung der Verringerung des Verlusts als Verlust weiter.

Die Verlustfunktion des CBOW-Modells wird wie folgt ausgedrückt. (Wenn der zum Erstellen des Modells verwendete Kontext ein Wort davor und danach ist)


L = -\frac{1}{T}\sum_{t=1}^{T}logP(w_{t}|w_{t-1},w_{t+1})

Durch Lernen in der Richtung, die obige Verlustfunktion so klein wie möglich zu machen, kann das Gewicht zu diesem Zeitpunkt als verteilter Ausdruck von Wörtern erworben werden.

Skip-Gramm-Modell

Das Skip-Gram-Modell ist ein Modell, das den von CBOW behandelten Kontext und das Ziel umkehrt. Es ist ein Modell, das mehrere Kontexte vorher und nachher aus dem zentralen Wort vorhersagt, wie unten gezeigt.

ich Ist Kaffee Trinken Masu

Das Bild des Skip-Gram-Modells ist wie folgt.

nn4.png

Es gibt nur eine Eingabeebene für das Überspringen von Gramm und es gibt so viele Ausgabeebenen wie Kontexte. Der Verlust wird für jede Ausgangsschicht einzeln berechnet und die Summe davon ist der endgültige Verlust.

Die Verlustfunktion des Sprunggrammmodells wird durch die folgende Formel ausgedrückt. (Wenn der zum Erstellen des Modells verwendete Kontext ein Wort davor und danach ist)


L = -\frac{1}{T}\sum_{t=1}^{T}(logP(w_{t-1}|w_{t}) + logP(w_{t+1}|w_{t}))

Da das Skip-Gram-Modell so viele Kontexte schätzt, muss seine Verlustfunktion die Summe der in jedem Kontext gefundenen Verluste ermitteln.

CBOW und Skip-Gramm

In CBOW und Skip-Gram soll das Skip-Gram-Modell bessere Ergebnisse liefern, und je größer der Korpus ist, desto besser sind die Ergebnisse hinsichtlich der Leistung häufig auftretender Wörter und Analogieprobleme. Das ist. Auf der anderen Seite hat das Überspringen von Gramm hohe Lernkosten, da der Verlust für die Anzahl der Kontexte berechnet werden muss und CBOW schneller lernt.

Erstellen eines Word2vec-Modells mithilfe der Bibliothek

Im Folgenden erstellen wir mithilfe der Bibliothek ein Word2Vec-Modell.

Datensatz

Mit gensim, einer Python-Bibliothek, können Sie problemlos ein Word2Vec-Modell erstellen. Dieses Mal verwenden wir "Livedoor News Corpus" für den Datensatz. Einzelheiten zum Datensatz und zur Methode der morphologischen Analyse finden Sie unter Veröffentlicht im zuvor veröffentlichten Artikel. Ich werde.

Im Fall von Japanisch ist eine Vorverarbeitung erforderlich, bei der Sätze in morphologische Elemente zerlegt werden. Nachdem alle Sätze in morphologische Elemente zerlegt wurden, werden sie in den folgenden Datenrahmen verschoben.

スクリーンショット 2020-01-13 21.07.38.png

Die Spalte ganz rechts ist die morphologische Analyse aller Sätze und durch Leerzeichen halber Breite getrennt. Verwenden Sie diese Option, um ein Word2Vec-Modell zu erstellen.

Modelllernen

Erstellen Sie mit gensim ein Word2vec-Modell. Nachfolgend finden Sie die wichtigsten Parameter zum Erstellen eines Modells.

Parametername Bedeutung der Parameter
sg 1 ist überspringen-Wenn es 0 Gramm ist, lernen Sie mit CBOW
size Geben Sie an, wie viele Dimensionen der verteilten Darstellung erfasst werden sollen
window Geben Sie die Anzahl der Wörter vor und nach dem Erkennen als Kontext an
min_count Ignorieren Sie Wörter, die kleiner als die angegebene Anzahl sind

Unten finden Sie den Code zum Erstellen eines Word2Vec-Modells. Solange Sie den einzugebenden Text erstellen können, können Sie ein Modell in einer Zeile erstellen.


sentences = []
for text in df[3]:
    text_list = text.split(' ')
    sentences.append(text_list)

from gensim.models import Word2Vec
model = Word2Vec(sentences,  sg=1, size=100, window=5, min_count=1)

Was Sie mit Word2Vec tun können

Mit dem Word2Vec-Modell konnte ich eine verteilte Darstellung von Wörtern erhalten. Mit dem verteilten Ausdruck von Wörtern können Sie den semantischen Abstand zwischen Wörtern quantitativ ausdrücken und Bedeutungen zwischen Wörtern addieren oder subtrahieren.

Lassen Sie uns die Wörter in der Nähe von "Familie" anhand des zuvor erstellten Modells überprüfen.

for i in model.most_similar('Familie'):
    print(i)
('Eltern und Kind', 0.7739133834838867)
('Liebhaber', 0.7615703344345093)
('Fesseln', 0.7321233749389648)
('Freund', 0.7270181179046631)
('Danran', 0.724891185760498)
('Freund', 0.7237613201141357)
('Zwei Menschen', 0.7198089361190796)
('Paar', 0.6997368931770325)
('Zueinander', 0.6886075735092163)
('vertiefen', 0.6761922240257263)

Wörter wie "Eltern und Kind" und "Liebhaber", die eine ähnliche Bedeutung wie "Familie" zu haben scheinen, sind an die Spitze gestiegen. Als nächstes führen wir arithmetische Berechnungen zwischen Wörtern durch. Das Folgende ist die Berechnung von "Leben" - "Glück".

for i in model.most_similar(positive='Leben',negative='Glück'):
    print(i)
('Kasse', 0.31968846917152405)
('Oder ein', 0.29543358087539673)
('Reparatur', 0.29313164949417114)
('Spendensammlung', 0.2858077883720398)
('Nutzer', 0.2797638177871704)
('Frequenz', 0.27897265553474426)
('Angemessen', 0.2780274450778961)
('MwSt', 0.27565300464630127)
('Von', 0.273759663105011)
('Budget', 0.2734326720237732)

Dieses Mal ist der Korpus, den ich trainiert habe, nicht so groß, also etwas subtil, aber das Wort "Bargeld" kommt an die Spitze. Wie der verteilte Ausdruck von Wörtern aussehen wird, hängt von dem von Ihnen eingegebenen Korpus ab. Daher denke ich, dass es abhängig von der Situation, in der Sie Word2Vec verwenden möchten, erforderlich ist, zu prüfen, welche Art von Korpus Sie eingeben.

Next Ich konnte mir einen groben Überblick über Word2Vec verschaffen. Ich möchte Doc2vec, die Entwicklung von Word2Vec, ab dem nächsten Mal zusammenfassen. Danke, dass du bis zum Ende zugesehen hast.

Recommended Posts

Verstehe Word2Vec
word2vec
Python2 + word2vec
Verstehe k-means ++
Base64 verstehen.
Verstehen Sie die k-means-Methode
Verstehe die Achse der Numpy
Umgebungskonstruktion von word2vec
Einführung in Word2Vec, die auch Katzen verstehen können