2016-08-25 7 views
4

Ich mache ein Sprachmodell mit Keras.Keras LSTM Sprachmodell mit Einbettungen

Grundsätzlich ist meine Vokabelgröße N ~ 30.000, ich habe bereits ein word2vec trainiert, also benutze ich die Einbettungen, gefolgt von LSTM, und dann sage ich das nächste Wort mit einer vollständig verbundenen Ebene gefolgt von softmax voraus. Mein Modell geschrieben wird, wie unten:

EMBEDDING_DIM = 256 
embedding_layer = Embedding(N,EMBEDDING_DIM,weights=[embeddings], 
trainable=False) 

model = Sequential() 
model.add(embedding_layer) 
model.add(LSTM(EMBEDDING_DIM)) 
model.add(Dense(N)) 
model.add(Activation('softmax')) 

model.compile(loss="categorical_crossentropy", optimizer="rmsprop") 

ich zwei Fragen:

  1. in diesem Fall können Sie bestätigen, dass wir nur die letzte verborgene Schicht des LSTM verwenden (die von gefolgt wird die voll verbundene Schicht und softmax) und es gibt nicht so etwas wie ein max/mean-pooling von aufeinanderfolgenden versteckten Schichten des lstm (wie hier für Sentiment-Analyse http://deeplearning.net/tutorial/lstm.html)?

  2. Was denkst du, anstatt die letzte versteckte Schicht der lstm mit einer großen, vollständig verbundenen Schicht der Größe N (30.000) zu verbinden, eine Ebene mit der Größe EMBEDDING_DIM zu verbinden und stattdessen die Einbettung des nächsten Wortes vorherzusagen des Wortes selbst, in diesem Fall ersetzen wir den Verlust durch etwas wie mse, reduzieren die Trainingszeit und helfen hauptsächlich unserem Modell, weil das Vokabular groß ist und Einbettungen auch für das Ende des Netzwerks nützlich sein können?

Vielen Dank!

Antwort

0

Ich kann nur sicher auf die erste Frage antworten: die letzte versteckte Einheit

Ja, ist der Ausgang der LSTM Schicht. Es gibt nur alle versteckten Zustände zurück, wenn Sie ihm den Parameter return_sequences=True geben. Es ist standardmäßig auf False festgelegt.

Für die zweite Frage kann ich nur sagen, dass ich versucht habe, die Einbettungen im Gegensatz zu der One-Hot-Vektor-Darstellung des Wortes vorherzusagen, aber es gab mir schlechte Ergebnisse. Wörter sind immer noch kategoriale Variable, auch wenn wir sie durch eine kontinuierliche Darstellung annähern können. Die Menschen haben sich deshalb sehr viel Mühe gegeben, Hierachical Softmax zu entwickeln.