2016-08-25 106 views
4

我在做一個使用keras的語言模型。Keras使用嵌入的LSTM語言模型

基本上,我的詞彙量N是〜30.000,我已經在它上面訓練了一個word2vec,所以我使用了嵌入,然後是LSTM,然後我用完全連接的層和s​​oftmax來預測下一個單詞。 我的模型寫成如下:

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") 

我有兩個問題:

  1. 在這種情況下,可以確認,我們只用LSTM的最後一個隱藏層(隨後是完全連接層和softmax),並且沒有像lstm的連續隱藏層的最大值/平均值池(像這裏用於情感分析http://deeplearning.net/tutorial/lstm.html)?

  2. 您認爲,不是將lstm的最後一個隱藏層連接到一個大的N連接的大層(30.000),而是連接到一個大小爲EMBEDDING_DIM的層,並且預測下一個單詞的嵌入在這種情況下,我們用像mse這樣的東西來代替損失,從而減少訓練時間,並且主要是「幫助」我們的模型,因爲詞彙量很大,並且嵌入對網絡的末端也有用?

謝謝!

回答

0

我只能肯定的回答了第一個問題:

是的,LSTM層的輸出是最後一個隱藏的單元。它只返回所有的隱藏狀態,如果你給它的參數return_sequences=True。它默認設置爲False。

對於第二個問題,我只能說,我試圖預測嵌入,而不是單詞的單向矢量表示,但它給了我不好的結果。 單詞仍然是分類變量,即使我們可以以某種方式通過連續表示來近似它們。由於這個原因,人們付出了很多努力來開發Hierachical Softmax。