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:
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)?
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!