nlp - Seq2seq LSTM 无法生成合理的摘要

标签 nlp keras lstm encoder-decoder seq2seq

我正在 keras 中训练编码器-解码器 LSTM 以进行文本摘要和具有以下架构的 CNN 数据集

Picture of bidirectional encoder-decoder LSTM

  1. 我正在使用 skip-gram 和

  2. 预训练词嵌入(大小为 256)
  3. 然后我用零填充输入序列,这样所有文章的长度都相等

  4. 我在每个摘要中放置一个由 1 组成的向量作为“开始”标记

  5. 稍后在解码器输出中使用 MSE、RMSProp、tanh 激活

  6. 训练:20 个 epochs,batch_size=100,clip_norm=1,dropout=0.3,hidden_​​units=256,LR=0.001,训练样例=10000,validation_split=0.2

  7. 网络训练以及训练和验证 MSE 下降到 0.005,但是在推理过程中,解码器不断重复一些没有意义的单词,并且与真正的摘要相去甚远。

我的问题是,我的训练方法、填充、损失函数、数据大小、训练时间是否存在根本性错误,导致网络无法泛化?

最佳答案

  • 除了损失函数,您的模型看起来还不错。我想不通 MSE 如何应用于单词预测。 交叉熵损失看起来是这里的自然选择。

  • 生成的单词重复可能是由解码器在推理时的工作方式引起的:您不应该简单地从分布中选择最可能的单词,而应该从中采样。这将为生成的文本提供更多差异。开始研究束搜索

  • 如果我要选择一种技术来提高序列到序列模型的性能,那肯定是注意力机制。关于它的帖子很多,你可以从this one开始,例如。

关于nlp - Seq2seq LSTM 无法生成合理的摘要,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49899860/

相关文章:

nlp - 在哪里可以找到最先进的关系提取数据集

python - Spacy:保存解析后的模型

machine-learning - 损失与准确性之间的关系

python - 有没有办法通过 JavaScript 在我的网站中使用 TensorFlow 模型?

python - 错误节点: 'binary_crossentropy/Cast' Cast string to float is not supported while train model

nlp - 这是 "corpus"的正确定义吗?

machine-learning - 使用初始值进行 Gensim 词嵌入训练

tensorflow - 自定义损失函数中的张量索引

machine-learning - 是否可以对图像序列使用图像预处理?

python - Keras GRU/LSTM层输入维度错误