Neural Dialogue Generation

构造 chatbot 的难点:
1. 计算机需要理解你所问的内容
2. 计算机需要对你的问题生成有意义的序列,这需要领域知识、对话上下文、世界知识

背景知识

一开始利用 SMT 来生成响应,利用 phrase-base MT 抽取高频模式:

这里写图片描述

后来用神经网络 encoder-decoder 架构来做:

这里写图片描述


Mutual Information for Response Generation

一般的 seq2seq 模型总是趋向于生成一些很宽泛的回答,比如“I don’t know”等等,而一些特定的、有意义的回答就排的比较靠后。

解决这一问题的一种方式是增加一些规则,但是效果并不好。所以考虑引入源端和目标端的互信息,利用互信息来减少这些宽泛的响应,从而生成有意义的响应。
A Diversity-Promoting Objective Function for Neural Conversation Models 利用下面的公式作为目标函数

T̂ =argmaxT{(1λ)logp(T|S)+λlogp(S|T)}

最终在 Twitter 对话数据集上获得了很好的效果。结果示例

这里写图片描述


Speaker Consistency

目前的模型下,多轮对话中存在响应不一致的问题:同样的问题,换一种问法之后得到了不同的答案,而且答案不一致。

这里写图片描述

A Persona-Based Neural Conversation Model 针对这个问题,将用户身份(比如背景信息、用户画像,年龄等信息)考虑到模型中,构建出一个个性化的 seq2seq 模型,为不同的用户,以及同一个对不同的对象对话生成不同风格的响应。

这里写图片描述

下面给出了结果,User1 采用这篇文章的模型,User2 是普通的 seq2seq 模型,高下立判

这里写图片描述


Multi-context Response Generation

这主要是要解决多轮对话中利用之前的问题和答案,对新的问题产生答案

这里写图片描述

目前最好的方式是 Attention、Memory Networks,平衡多个上文对当前对话的影响

这里写图片描述


Reinforcement learning for Response Generation

Supervised Learning 针对打好标签的数据能做的不错,但是如果标签在学习时并不明确呢?强化学习就是为解决这类问题而生。它由以下几个部分组成(以围棋 Go 举例):

  • 状态集合 S (Go 的当前面板)
  • 动作集合 A (在什么位置落子)
  • 奖励 Reward(吃掉对手的子或者赢取游戏)

目标是通过最大化全局奖励函数,学习在一个给定状态下采取何种动作。

为什么 RL 能够帮助我们生成对话?

  • 一方面,我们可以自己设计真实世界的奖励函数(有趣 VS. 无趣;有信息量 VS. 无信息量)
  • 另一方面,我们可以看到这次对话对未来的影响

借助 RL 希望能够将对话持续更久,在多轮后仍然能够产生有意义的响应。


Slide 地址http://web.stanford.edu/class/cs224u/materials/cs224u-2016-li-chatbots.pdf

阅读更多
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u014300008/article/details/53239076
个人分类: NLP Related
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

关闭
关闭
关闭