选自 arXiv.org
机器之心编译
参与:石晶
原文标题:Deep Reinforcement learning for Dialogue Generation
摘要
1.介绍
神经对话响应生成的模型是最近的研究热点。其中 LSTM sequence-to-sequence 是其中一个典型的模型,其利用给定的对话历史,生成一个最大可能性的响应。Seq2seq 模型解决了传统机器翻译中的缺乏对应语言对导致无法正常使用的困境,学习到了上文表示的一个较为丰富的语义信息。
尽管seq2seq 模型已经取得了诸多成功,但是其还存在共性的问题:
(1)其采用最大似然估计,对于训练集中频繁出现的如「我不知道」这样的无太大意义回答,由于在预料中它们出现数量多、范围大,被模型学习到以致于经常产生这样的回答。但是这种回答又是非常不好的,没有营养的,会容易导致对话的失败。
(2)很容易陷入到死循环当中,如图:
这样的困境导致需要对新的模型的两个能力的要求是:
(1)引入由人工定义的奖惩策略,能够更好地完成和模拟对话
(2)对未完成的一个对话过程中的一句机器相应的长期影响进行建模
实验显示文中使用的方法比用最大似然估计目标训练的 seq2seq 模型更连贯、稳定且良好交互。
2.相关工作
相关工作总结了在对话生成近期的一些分类和区别。
统计对话系统主要可以分为两派:
第一种把对话生成当做一种「源到目标(source-to-target)」的转化问题,主要是从大量的训练数据中学习从输入信息到最终响应之间的映射关系。典型地,有工作把这个过程类似于一个统计机器翻译的问题,并取得了一些成果。近期的 seq2seq 模型也使用一个 encoder 把对话内容转换成一个分布式向量,并通过它来产生响应,构建了这样的一个端对端的模型。另外还有一些基于 seq2seq 的其他的各种变种模型也都取得了一些效果。
第二种更关注于建立一个任务导向的对话系统,用来解决特定领域的任务。这其中包括马尔科夫决策过程(MDPs)、POMDP 等。这一类中也比较多地使用强化学习来训练对话。但是任务导向的方式通常过于依赖于精心设计的有限对话参数,或者一些手工模板(针对于每一个特定领域),导致其泛化能力和通用性非常差。
近期出现了一些用强化学习来处理语言理解问题的工作,包括一些文字游戏等。本篇文章受到最近一些工作的启发,设计一个结合了以上两种方案的模型。
3.开放领域对话的强化学习
基于强化学习的诸多实例,文章中定义了两个 agent 之间通过相互对话来不断学习。假定第一个 agent 为 q , 第二个agent 为 p。对话过程则可以表示由两个 agent 轮流说话组成的序列,例如p,q1,p2,q2……pi,qi。每轮生成的句子都可以当做是通过一个大的 encoer-decoder循环神经 络模型的策略产生的动作。
数学化整个模型中的强化学习过程,可以归纳为这个几个要点:
动作(Action) :这里的动作表示为 a,是指生成的响应。action空间是无限大的,因为响应可以是任意长度的文本序列。
状态(State) :状态是指当前时刻的前两轮对话[pi,qi]。对话历史通过pi,qi拼接之后进入LSTM encoder 络得到一个隐层状态表示向量。
策略(Policy)
策略是 encoder-decoder 的参数决定的当前状态下的下一个响应的概率分布,可以表示为p-RL(pi+1|pi,qi)。
奖励(Reward) :奖励是每个响应得到的回 。
易被响应(Ease of answering) :易于响应是一个长久对话的关键因素之一,它描述了了一段对话如何更好地向前发展。当出现一些无太大意义(dull)的响应时,一个对话就很难很好地被进行下去,例如「I don’t know what you are talking about」、「I have no idea」、「哦」。
其中 S 是无意义回答合集,s是某一时刻的响应。(译者注:这个公式就是句子分布的负对数似然,也做了规约)
信息流 :每个 agent 在响应的时候,如果都能贡献出新的信息,开辟新的话题的话,那么是有利于对话的继续发展的,并且也会减少重复的信息出现。因此,很自然地,如果一个agent 在先后两句出现了比较多重合的话,那么这种重复就应该当做一种惩罚。
于是,把先后两个响应的隐层表示 hpi 和 hpi+1 的夹角余弦(译者注:因为h本身就是对上文语义的隐层状态表示,所以直接把它们之间的相似度引入当做惩罚而不是引入文本级别的惩罚更自然、优雅且易于操作)当做一个指标,得到如下公式:
经过对数和取负之后,成为了一个奖励项。
语义连贯性 :通过信息流的奖励,很容易造成 agent 产生各种跟对话无关的响应(译者注:因为其语义不相关,引入了更多信息流,所以得到更大的奖励)而造成对话语义是不符合文法的、不连贯的。因此,把响应和之前状态之间的互信息引入当做一个奖励。具体地,公式如下;
其中,pseq2seq(a|pi,qi) 是由上一轮状态得到响应的概率,后一项是由当前产生响应通过 络生成之前的 qi 的概率。
最终,把这三个指标加权求和(系数和为 1 ),则得到一个动作的最终奖励为:
4. 模拟
4.1 监督学习过程
在强化学习开始之前,通过一个基础的带 attention 的 seq2seq 模型对基础的 agent 进行建立,并将其作为强化学习的初始化状态。(译者注:这个可以通过 AlphaGo 的过程进行理解,类似于首先通过一些基础的方式得到了一个技术不是特别好的下棋的策略,在这个基础上,进行轮流对弈,来逐步提升整个系统。)
类似地,在对话任务上,通过选取语料中任意一句话作为decoder 的目标,之前的两句话作为输入来 encoder,采取基础的模型训练一个雏形。模型主要用到的是 Opensubtitle 数据集,包含大约八千万个源-目标(source-to-target)语料对。
4.2 互信息
从简单的 seq2seq 模型中得到的雏形 agent 通常是非常低效、愚笨的,例如:「我不知道」的频繁出现。所以,即便是作为雏形的 agent ,简单地采用 seq2seq 的结果也容易导致多样性极大地缺失。借用之前Li 自己一篇文章,本篇通过对 source-to-target 的互信息进行建模,明显减少了回答出无意义答案的概率,并且普遍提高了响应的回答质量。
具体来说,仅仅采用之前 Eq 3的算法是不太现实的,因为第二项需要等到之前的响应完全被计算出来之后才可以继续计算。于是借用最近的文章的概念,把生成最大互信息的问题可以当做一个强化学习的问题:在模型生成一个序列的结尾的时候,我们可以把当时的互信息值作为一个奖惩项加入到模型中。
在这里,采用策略梯度的方法进行优化。首先,用基础的 seq2seq 生成模型作为预训练模型,对于一个给定的输入[pi,qi],可以根据模型生成一个候选回答集合A。对于A中的每一个回答a,从预训练模型中得到的概率分布上可以计算出互信息的值 m(a,[pi,qi])。这个互信息的值会在此时作为奖励加入到 encoder-decoder的模型当中去,这样就可以指引模型朝着生成更高的奖励的方向进行演化。
另外,在训练过程中,遵循了随机梯度下降的更新策略,同时由于训练目标是最大似然估计和奖励值之间的组合,所以也借用了Bengio在09年提出的课程学习(Curriculum learning)的策略来作为更新的策略和手段。
4.3 两个 agent 之间的对话模拟
模拟两个 agent 的轮流对话的过程是这样的,在一开始,从训练集中随意找到一句话作为输入给第一个agent,这个agent 通过encoder 络把这个输入编码成一个隐层向量,然后decode 来生成响应。之后,第二个 agent 把刚才前一个 agent 输出的响应和对话历史融合,重新通过encoder 络编码得到一个隐层向量(相当于更新了对话的状态),然后通过decoder 络生成响应,并传给第一个 agent 。这个过程不断被重复。整个过程如图:
更具体地,把之前利用互信息训练过的模型作为初始模型,然后利用策略梯度方法来更新参数,以达到一个比较大的期待奖励值的。对于一系列的响应,其奖励函数为:
之后用强化学习的梯度来进行更新。
另外,对于每一个模拟的实例,每一次对话响应产生五个候选集合。又由于大多数的响应得分较高的选项其实都是比较类似的,只有表单符号和时态上的一些变化,所以候选集合采用混合了高斯噪声的分布函数来进行采样,在一定程度上丰富了候选集合的多样性。
4.4 课程学习( Curriculum Learning)
在最终模型的训练当中,课程学习的策略又一次被使用了。
模型起初只局限于两轮,后来慢慢增加到多轮。因为每一轮的候选集合数目固定,所以每增加一轮,整个路径空间就成倍变大,呈现一个指数级别的增长状态,所以最终模型最多限定为五轮对话。
5.实验结果展示
整个章节用来展示实验结果,并做一些定量定性的分析。评估由人和机器指标共同完成,其中机器指标包括两个方面:对话的长度和多样性。
5.1 数据集说明
对于模拟 agent 来说,最初接受到的输入需要具备一个比较高的质量才比较有利。例如,如果最初的输入是「why?」,则非常难以开展之后的对话,因为实在无法搞清楚对话进行的方向。所以,文章从 Opensubtile 的一千万条数据中,选出了 80 万个最不太可能产生「I don’t know what you are talking about」的序列来作为初始输入的集合。
5.2 机器自动评价
评价一个对话系统是非常困难的。尽管存在例如 BLEU 值、困惑度这些传统的指标可以用来评价对话质量,但是在对于这篇文章的框架而言确实不合适的。因为它的训练目标不是为了得到一个跟训练集高度吻合,用以得到最有可能正确的”答案”,而是更符合逻辑的、更成功的、更长的对话,所以并没有采用以上提到的两个指标作为评价。
这里采用的指标主要有:
对话的长度 :这里对一个对话结束的标准是这样定义的,如果一个对话得到了一个例如「I don’t know」这样的无效回答,或者两轮对话之间同一个 agent 的响应高度一致,则判定这段对话结束。
在 1000 个输入的测试后,平均每个模型能进行的对话长度的数据如图。可以看出,采用了互信息策略的模型,已经可以显著增加对话的长度。在互信息模型的基础上训练的强化学习模型则取得了更好的效果。结果如图:
多样性 :多样性是用生成响应中的 unigram 和 bigram 的数量来衡量的。 为了避免模型训练出现一个偏向于更长句的倾向,上面的两个数量也要被响应中所有的词汇数量所规约。也就是说出现的一元文法词汇和二元文法词汇(去重的)占所有词汇的比例(重复计数的)。
在标准的 seq2seq 和强化学习模型中,都采用了一个尺度为 10 的 beam search 来生成响应。对于互信息模型,还经过了一个编码—解码—反编码—解码的过程。结果如图:
结果表明,强化学习模型比剩余的两种都具备更好的多样性。
5.3 人工评价
从模型生成的条目中抽取一定数量的响应,采用众包的方式,对于三个关心的指标进行评价统计。
单轮响应的质量 :随机选取了 500 个单轮响应作为人工评价的集合,每次将三个模型(基础 seq2seq、带互信息的模型、强化学习的模型)的结果给 3 个人,让他们选择其中哪两个的回答是「更好的」。最后统计每个模型的得分数。
单轮响应的可回答性 :类似地,随机选取了 500 个单轮响应作为人工评价的集合,每次将三个模型的结果分发给 3 个人。这次让他们选择出哪两个的回答是「更容易进一步被响应的」。
多伦对话的质量 :第三个指标选取的是模型生成的 200 组多轮对话作为人工评价的集合,每次将三个模型生成的对话分发给 3 个人,让他们选择哪一个对话的质量最高。
人工评价的结果如图所示,其展示地是强化学习得到的比只用了互信息模型的提升程度。
但是,在单轮对话的「更易被进一步响应」和多轮对话的质量上,强化学习模型都获得了显著的提升。
5.4 定性分析和讨论
随机采样一些实例,可以看到这样的对比结果:
另外,做一些错误分析也可以得到一些结论。尽管模型在优化中已经加入了对重复话语的惩罚,但是模型产生的响应还是会进入一个循环,但是长度却不止是一轮。如图:
这可能归结于在训练过程中的历史对话长度较短引起的。另外一个问题是模型经常会产生一个比较「出戏」的响应,与之前聊的话题不太相关,这是模型在惩罚重复和模型对话相关性之间的一个折衷的反应。
6.结论
除了贡献了这个模型中用到的非常简洁、可操作的对话系统的几个全局特性的数学化指标之外,这个框架也搭建了一个能产生具有更丰富、更多交互性、更能持续响应的对话系统。
?————————————————
投稿或寻求 道:editor@almosthuman.cn
广告&商务合作:bd@almosthuman.cn
点击「阅读原文」,下载论文原文↓↓↓
声明:本站部分文章内容及图片转载于互联 、内容不代表本站观点,如有内容涉及侵权,请您立即联系本站处理,非常感谢!