了解Keras LSTM中的角色级别嵌入

时间:2017-06-16 09:57:49

标签: python keras lstm embedding language-model

我是Keras RNN结构中语言模型实现的新手。我有一个离散词的数据集(不是来自单个段落),它有以下统计数据,

  1. 总字数:1953
  2. 不同字符总数:33(包括START,END和*)
  3. 单词中的最大长度(字符数)为10
  4. 现在,我想构建一个接受角色并预测单词中下一个角色的模型。我填写了所有单词,以便它们具有相同的长度。所以我的输入是Word_input,形状 1953 x 9 ,目标是 1953 x 9 x 33 。我也想使用嵌入层。所以我的网络架构是,

        self.wordmodel=Sequential()
        self.wordmodel.add(Embedding(33,embedding_size,input_length=9))
        self.wordmodel.add(LSTM(128, return_sequences=True))
        self.wordmodel.add(TimeDistributed(Dense(33)))
        self.wordmodel.compile(loss='mse',optimizer='rmsprop',metrics=['accuracy'])
    

    作为一个例子," CAT"填充表示

    输入网络 - START C A T END * * * *(9个字符)

    目标相同--- C A T END * * * * *(9个字符)

    因此,使用TimeDistributed输出,我正在测量网络预测和目标的差异。我还将batch_size设置为1.因此,在读取每个样本字后,网络将重置其状态。

    我的问题是我在概念上做得对吗?每当我进行训练时,准确度都会降低56%左右。

    请赐教。感谢。

1 个答案:

答案 0 :(得分:5)

据我所知,结构是基本的,可能在某种程度上起作用。我有一些建议

  1. TimeDistributed图层中,您应该添加激活 函数softmaxmulti-classification中广泛使用。 而现在在你的结构中,输出是非限制性的,而不是 直观,因为你的目标只是一热。

  2. 使用softmax功能,您可以将损失更改为     cross-entropy这会增加正确课程的概率     减少其他人。它更合适。

  3. 你可以尝试一下。对于更有用的模型,您可以尝试以下Pytorch tutorial中给出的结构。感谢。

    enter image description here