Wortvorhersage mit dem Word2vec-Modell

20

Bei einem Satz: „Wenn ich das öffnen ?? Tür es beginnt Heizung automatisch“

Ich möchte die Liste der möglichen Wörter in bekommen? mit einer Wahrscheinlichkeit.

Das Grundkonzept, das im word2vec-Modell verwendet wird, besteht darin, ein Wort im gegebenen Umgebungskontext "vorherzusagen".

Was ist die richtige Operation für Kontextvektoren, wenn das Modell erstellt wurde, um meine Vorhersage-Aufgabe für neue Sätze auszuführen?

Ist es einfach eine lineare Summe?

model.most_similar(positive=['When','I','open','the','door','it','starts' ,'heating','automatically'])
DED
quelle
Ich habe den obigen Algorithmus implementiert und bin auf die Frage gestoßen, warum Softmax verwendet wird. Lassen Sie mich Ihnen ein Beispiel für zwei Normalisierungsfunktionen zeigen: def softmax (w, t = 1.0): # Source: gist.github.com/stober/1946926 e = np.exp (w / t) return e / np.sum ( e) def Normalisierung (w): Rückgabe w / np. Summe (w) a = np. Array ([. 0002, .0001, .01, .03]) Drucknormalisierung (a) Drucksoftmax (a, t = 1 ) Vergleichen wir die Ausgaben: [0.00496278 0.00248139 0.24813896 0.74441687] [0.24752496 0.24750021 0.24996263 0.25501221] Wie wir sehen können, gibt softmax .03 ungefähr die gleiche Wahrscheinlichkeit wie .0001 (das ist

Antworten:

9

Word2vec funktioniert in zwei Modellen CBOW und Skip-Gram. Nehmen wir das CBOW-Modell, da Ihre Frage genau so lautet, wie Sie das Zielwort vorhersagen, wenn Sie die umgebenden Wörter berücksichtigen.

Das Modell entwickelt grundsätzlich Eingabe- und Ausgabegewichtsmatrizen, die von den Eingabekontextwörtern und dem Ausgabezielwort mit Hilfe einer verborgenen Schicht abhängen. Daher wird die Rückausbreitung verwendet, um die Gewichte zu aktualisieren, wenn die Fehlerdifferenz zwischen dem vorhergesagten Ausgabevektor und der aktuellen Ausgabematrix besteht.

Grundsätzlich wird das Vorhersagen des Zielworts aus gegebenen Kontextwörtern als Gleichung verwendet, um die optimale Gewichtungsmatrix für die gegebenen Daten zu erhalten.

Die Beantwortung des zweiten Teils erscheint etwas komplexer als nur eine lineare Summe.

  1. Erhalten Sie alle Wortvektoren von Kontextwörtern
  2. Ermitteln Sie den Mittelwert, um den verborgenen Ebenenvektor hder Größe zu ermittelnNx1
  3. Erhalten Sie die Ausgabematrix syn1( word2vec.coder gensim), die von Größe istVxN
  4. Multiplizieren Sie syn1mit h, der resultierende Vektor hat die zGrößeVx1
  5. Berechnen Sie den Wahrscheinlichkeitsvektor y = softmax(z)mit der Größe Vx1, wobei die höchste Wahrscheinlichkeit die One-Hot-Darstellung des Zielworts im Wortschatz bezeichnet. Vbezeichnet die Größe des Wortschatzes und Nbezeichnet die Größe des Einbettungsvektors.

Quelle: http://cs224d.stanford.edu/lecture_notes/LectureNotes1.pdf

Update: Langzeit-Kurzzeitgedächtnismodelle leisten derzeit hervorragende Arbeit bei der Vorhersage der nächsten Wörter. seq2seq- Modelle werden im Tensorflow-Tutorial erklärt . Es gibt auch einen Blog-Beitrag über die Texterstellung.

Yazhi
quelle
Vielen Dank ! Ist Ihnen eine Implementierung davon bekannt? (Zum Beispiel als Teil von Gensim). Ansonsten scheint die Berechnung nicht zu kompliziert zu sein.
DED
Hallo, könntest du mir mehr Details darüber geben, wie man eine Ausgabematrix (syn1 in deinem Beispiel) aus einem geschulten w2v-Einbettungsmodell abruft? Ich denke, das w2v hat die Ausgabematrix nach dem Training gelöscht.
Charles Chow
Nach meinem Verständnis besteht Ihre Antwort auf die zweite Frage darin, die Ausgabematrix zu rekonstruieren. Ist das richtig?
Charles Chow
1
Ich denke, es ist erwähnenswert, dass dies nicht wie ein Sequenzklassifikator funktioniert. Die Reihenfolge der Wörter wird ignoriert.
Anzeigename
Man könnte die Ausgabematrix erhalten, syn1indem man einfach das Modell speichert. ja, die Reihenfolge wird ignoriert, für die Anwendung könnte man tatsächlich das LSTM-basierte seq2seq-Modell verwenden.
Yazhi
4

Die Vorhersage fehlender Wörter wurde in der neuesten Version von Word2Vec als Funktion hinzugefügt. Natürlich muss Ihr Satz mit der Word2Vec-Modelleingabesyntax übereinstimmen, die zum Trainieren des Modells verwendet wird (Kleinbuchstaben, Stoppwörter usw.).

Verwendung für die Vorhersage der Top-3-Wörter für "Wenn ich die Tür öffne?":

print(model.predict_output_word(['When','I','open','door']), topn = 3)
Christof Henkel
quelle
Woher wusste es, dass das centerzwischen dem 3. und 4. Wort war? Das ergibt für mich keinen Sinn. Ich würde mir vorstellen, dass nur Kontextwörter mit geraden Zahlen floor(len(n)/2))floor(len(n)/2))+1
eingegeben werden