了解 Keras LSTM 中的字符级嵌入

Understanding Character Level Embedding in Keras LSTM

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

  1. 单词样本总数:1953
  2. 不同字符总数:33(包括 START、END 和 *)
  3. 一个单词的最大长度(字符数)为 10

现在,我想建立一个模型来接受一个字符并预测单词中的下一个字符。我填充了所有单词,使它们具有相同的长度。所以我的输入是 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. TimeDistributed层,应该加一个activation 在 multi-classification 中广泛使用的函数 softmax。 现在在你的结构中,输出是不受限制的,它不是 直观,因为您的目标只是一个热点。

  2. softmax函数,你可以把loss改成 cross-entropy 这增加了正确的概率 class 和 减少其他。比较合适

你可以试试看。对于更有用的模型,您可以尝试遵循 Pytorch tutorial 中给出的结构。谢谢。