使用嵌入的Keras LSTM语言模型

flo*_*989 5 neural-network lstm keras

我正在使用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")
Run Code Online (Sandbox Code Playgroud)

我有两个问题:

  1. 在这种情况下,你能否确认我们只使用LSTM的最后一个隐藏层(后面是完全连接的层和s​​oftmax),并且没有类似于lstm的连续隐藏层的max/mean-pooling (像这里的情感分析http://deeplearning.net/tutorial/lstm.html)?

  2. 您如何看待,而不是将lstm的最后一个隐藏层连接到一个大小为N(30.000)的大型完全连接层,连接到一个大小为EMBEDDING_DIM的层,并预测嵌入下一个单词而不是单词本身,在这种情况下,我们用mse之类的东西代替损失,减少训练时间,主要是"帮助"我们的模型,因为词汇量很大,嵌入也可以用于网络的末端?

谢谢 !

Nas*_*Ben 0

我只能肯定地回答第一个问题:

是的,LSTM层的输出是最后一个隐藏单元。如果您给它参数 ,它只会返回所有隐藏状态return_sequences=True。默认设置为 False。

对于第二个问题,我只能说我已经尝试预测单词的 one-hot 向量表示的嵌入,但它给了我不好的结果。单词仍然是分类变量,即使我们可以通过连续表示来近似它们。为此人们投入了大量的精力来开发Hierachical Softmax。