Neural network 基于嵌入的Keras-LSTM语言模型

Neural network 基于嵌入的Keras-LSTM语言模型,neural-network,keras,lstm,Neural Network,Keras,Lstm,我正在用keras做一个语言模型 基本上,我的词汇量N约为30.000,我已经在其上训练了word2vec,因此我使用嵌入,然后使用LSTM,然后使用完全连接的层和softmax预测下一个单词。 我的模型编写如下: EMBEDDING_DIM = 256 embedding_layer = Embedding(N,EMBEDDING_DIM,weights=[embeddings], trainable=False) model = Sequential() model.add(embeddi

我正在用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),并且没有类似于LSTM连续隐藏层的最大/平均池(如此处用于情绪分析)

  • 你认为,与其将lstm的最后一个隐藏层连接到一个大小为N(30.000)的完全连接的大层,连接到一个大小为EMBEDDING_DIM的层,并预测下一个单词而不是单词本身的嵌入,在这种情况下,我们用mse之类的东西来代替损失,减少训练时间,主要是“帮助”我们的模型,因为词汇表很大,嵌入也可以用于网络的终端


  • 谢谢!

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

    是的,LSTM层的输出是最后一个隐藏单元。如果给它参数
    return\u sequences=True
    ,它只返回所有隐藏状态。默认情况下,它设置为False

    对于第二个问题,我只能说,我试图预测单词的一个热向量表示的嵌入,但它给了我糟糕的结果。 单词仍然是分类变量,即使我们可以用连续表示法来近似它们。 出于这个原因,人们投入了大量的精力来开发分层的Softmax