2

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

4

1 回答 1

1

确切的答案取决于您从神经机器翻译模型(NMT) 中获取哪些构建块,以及您将用自己的构建块替换哪些构建块。我假设图形结构与 NMT 中的完全一样。

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


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

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

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

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

于 2018-02-02T19:43:33.243 回答