Vortraining von word2vec mit LSTM für die Wortgenerierung

10

LSTM / RNN kann für die Textgenerierung verwendet werden. Dies zeigt, wie man vortrainiertes GloVe-Wort verwendet Einbettungen für Keras Modell.

  1. Wie man vorgefertigte Word2Vec-Worteinbettungen mit Keras LSTM verwendet Modell? Dieser Beitrag hat geholfen.
  2. Wie kann das nächste Wort vorhergesagt / generiert werden, wenn dem Modell die Wortfolge als Eingabe übergeben wird?

Beispiel Ansatz versucht:

%Vor%

Beispielcode / psuedocode, um LSTM zu trainieren und vorherzusagen, wird geschätzt.

    
zoomikag 06.02.2017, 09:47
quelle

1 Antwort

6

Ich habe ein gist mit einem einfachen Generator erstellt, der auf Ihrer ersten Idee aufbaut: Es ist ein LSTM-Netzwerk verdrahtet mit den vortrainierten word2vec-Einbettungen, trainiert, um das nächste Wort in einem Satz vorherzusagen. Die Daten sind die Liste der Abstracts von der arXiv-Website .

>

Ich werde die wichtigsten Teile hier hervorheben.

Gensim Word2Vec

Ihr Code ist in Ordnung, außer der Anzahl der Iterationen, um ihn zu trainieren. Der Standardwert iter=5 scheint eher niedrig zu sein. Außerdem ist es definitiv nicht der Flaschenhals - LSTM-Training dauert viel länger. iter=100 sieht besser aus.

%Vor%

Die Ergebniseinbettungsmatrix wird in pretrained_weights array mit der Form (vocab_size, emdedding_size) gespeichert.

Keras-Modell

Ihr Code ist fast korrekt, mit Ausnahme der Verlustfunktion. Da das Modell das nächste Wort vorhersagt, handelt es sich um eine Klassifizierungsaufgabe, daher sollte der Verlust categorical_crossentropy oder sparse_categorical_crossentropy sein. Ich habe letzteres aus Effizienzgründen gewählt: Auf diese Weise vermeidet man die Ein-Hot-Codierung, die für ein großes Vokabular ziemlich teuer ist.

%Vor%

Hinweis: Übergeben Sie die vortrainierten Gewichtungen an weights .

Datenaufbereitung

Um mit sparse_categorical_crossentropy loss arbeiten zu können, müssen sowohl Sätze als auch Beschriftungen Wortindizes sein. Kurze Sätze müssen mit Nullen zur gemeinsamen Länge aufgefüllt werden.

%Vor%

Beispielgenerierung

Das ist ziemlich einfach: Das Modell gibt den Wahrscheinlichkeitsvektor aus, von dem das nächste Wort abgetastet und an den Eingang angehängt wird. Beachten Sie, dass der generierte Text besser und vielfältiger wäre, wenn das nächste Wort gesampelt statt ausgewählt wird als argmax . Die temperaturbasierte Zufallsauswahl, die ich verwendet habe, ist hier beschrieben .

%Vor%

Beispiele für generierten Text

%Vor%

Macht nicht zu viel Sinn, ist aber in der Lage, Sätze zu erzeugen, die (manchmal) zumindest grammatikalisch gut aussehen.

Der Link zum vollständig ausführbaren Skript .

    
Maxim 12.01.2018 16:51
quelle