【问题标题】:Seq2Seq Models for Chatbots聊天机器人的 Seq2Seq 模型
【发布时间】:2018-06-09 13:39:27
【问题描述】:

我正在构建一个聊天机器人,它具有序列到序列编码器解码器模型,如NMT。从给定的数据中,我可以理解,在训练时,它们将解码器输出与编码器单元状态一起馈送到解码器输入中。我无法弄清楚当我实际实时部署聊天机器人时,我应该如何输入解码器,因为那时我必须预测输出。有人可以帮我解决这个问题吗?

【问题讨论】:

标签: tensorflow machine-learning chatbot machine-translation sequence-to-sequence


【解决方案1】:

确切的答案取决于您从Neural Machine Translation model (NMT) 中获取哪些构建块,以及您将用自己的构建块替换哪些构建块。我假设图结构与 NMT 中的完全一样。

如果是这样,在推理时,您可以只向解码器提供一个零向量。


内部细节:NMT 使用名为Helper 的实体来确定解码器中的下一个输入(参见tf.contrib.seq2seq.Helper 文档)。

特别是,tf.contrib.seq2seq.BasicDecoder 在执行步骤时仅依赖于 helper:输入到后续单元格的 next_inputs 正是 Helper.next_inputs() 的返回值。

Helper接口有不同的实现,例如,

代码在BaseModel._build_decoder 方法中。 请注意,GreedyEmbeddingHelperSampleEmbeddingHelper 都不关心解码器输入是什么。所以事实上你可以喂任何东西,但零张量是标准选择。

【讨论】:

  • 如果我们在推理时输入一个零向量作为“开始标记”,我们是否需要在训练过程中为目标词添加零以保持一致性?
  • 在推理中,与训练相比,没有使用输入向量。在训练中使用它,所以它必须是明智的
  • 例如,如果我的标记化训练输入的单个示例是 [1,2,3,4],我是否应该将起始标记 0 添加到训练输入以使它们成为 [0,1, 2,3,4] 正确的行为?鉴于我们在推理过程中将零添加到开头?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2022-12-23
  • 1970-01-01
  • 1970-01-01
  • 2018-05-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多