2016-08-25 39 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。