Seq2Seq聊天机器人模型

时间:2017-12-29 03:36:51

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

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

1 个答案:

答案 0 :(得分:1)

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

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

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

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

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

代码采用BaseModel._build_decoder方法。 请注意,GreedyEmbeddingHelperSampleEmbeddingHelper都不关心解码器的输入。所以实际上你可以提供任何东西,但零张量是标准选择。