我正在使用keras做一个语言模型。
基本上,我的词汇量N大约是30.000,我已经训练了一个word2vec,所以我使用嵌入,然后是LSTM,然后我用完全连接的层跟随softmax预测下一个单词。 我的模型编写如下:
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")
我有两个问题:
在这种情况下,你能否确认我们只使用LSTM的最后一个隐藏层(后面是完全连接的层和softmax),并且没有像max / mean-pooling这样的东西lstm的连续隐藏层(就像这里的情感分析http://deeplearning.net/tutorial/lstm.html)?
您如何看待,而不是将lstm的最后一个隐藏层连接到大小为N(30.000)的大型完全连接层,连接到一个大小为EMBEDDING_DIM的层,并预测下一个字的嵌入而不是单词本身,在这种情况下,我们用mse替换损失,减少训练时间,主要是“帮助”我们的模型,因为词汇量很大,嵌入也可以用于网络的末端?
谢谢!
答案 0 :(得分:0)
我只能回答第一个问题:
是的,LSTM图层的输出是最后一个隐藏单位。如果为其指定参数return_sequences=True
,它仅返回所有隐藏状态。默认设置为False。
对于第二个问题,我只能说我试图预测嵌入不受单词的单热矢量表示的影响,但它给了我不好的结果。 单词仍然是分类变量,即使我们可以通过连续表示以某种方式逼近它们。 由于这个原因,人们为开发Hierachical Softmax付出了很多努力。