李纪为:用于对话生成的深度强化学习

本文第一作者 Jiwei Li (李纪为) 是斯坦福 Ph.D。文章结合了目前主流的 sequence-to-sequence 模型和强化学习算法,在之前工作的基础上,利用一种 AlphaGo 式的机器互相对话的模拟方法,来学习更好的对话生成模型。

译者按:本文第一作者 Jiwei Li (李纪为) 是斯坦福的 Ph.D ,是一位在神经网络和 NLP 领域非常高产的作者。在之前发布的自然语言处理 2012-2016 年顶级会议作者统计中,他以 14 篇顶级会议论文第一作者的数据排名第一。本篇文章刚刚发布,是一篇探索性的文章,文章结合了目前主流的 sequence-to-sequence 模型和强化学习算法,在之前工作的基础上,利用一种 AlphaGo 式的机器互相对话的模拟方法,来学习更好的对话生成模型。

原文标题:Deep Reinforcement learning for Dialogue Generation

摘要

对话生成神经网络模型最近出现了一批令人信服的结果,使得神经网络实现一个可对话的 agent 变得更进一步。但是目前的网络都显得有些局限,它们都只考虑当前时刻的下一句响应如何生成,而忽略了对于整个对话之后如何发展所产生的影响。对一段对话之后的发展方向进行建模是十分关键的,它关系到能否产生一个连贯的、理想的对话。正是基于此,开始出现了利用强化学习对传统的对话模型进行改进。在这篇文章中,作者展示了如何利用强化学习对对话未来发展的指标进行衡量,来实现一个好的性能。文章模拟了两个虚拟的对话 agent 来进行互相对话,使用策略梯度方法(policy gradient methods)来对模型的三个关键指标进行奖励,其分别为:信息性(informativity)、连贯性(coherence)、易于被响应(ease of answering)。作者用机器指标评价了模型产生的对话的多样性和长度,同时也使用了人工评价。结果显示文章采用的算法(强化学习模型)能产生具有更丰富、更多交互性、更能持续响应的对话响应。这个工作也为未来探索基于长期全局成功的对话系统迈出了第一步。

1.介绍

神经对话响应生成的模型是最近的研究热点。其中 LSTM sequence-to-sequence 是其中一个典型的模型,其利用给定的对话历史,生成一个最大可能性的响应。Seq2seq 模型解决了传统机器翻译中的缺乏对应语言对导致无法正常使用的困境,学习到了上文表示的一个较为丰富的语义信息。

尽管seq2seq 模型已经取得了诸多成功,但是其还存在共性的问题:

(1)其采用最大似然估计,对于训练集中频繁出现的如「我不知道」这样的无太大意义回答,由于在预料中它们出现数量多、范围大,被模型学习到以致于经常产生这样的回答。但是这种回答又是非常不好的,没有营养的,会容易导致对话的失败。

(2)很容易陷入到死循环当中,如图:

这样的困境导致需要对新的模型的两个能力的要求是:

(1)引入由人工定义的奖惩策略,能够更好地完成和模拟对话

(2)对未完成的一个对话过程中的一句机器相应的长期影响进行建模

于是,加入强化学习成为了一个很好的选择。作者使用 seq2seq 的模型作为骨架,用两个虚拟的 agent 生成对话,来确定用来采取奖惩策略的可能的选择空间(译者注:就像 AlphaGo 模型在自己和自己对话之前,也有一个比较基本的初级对弈策略一样)来获得最大的奖励。

对于一个好的对话,作者启发式地定义一些优秀的准则,它应该是:往前进行的、有交互的、具备信息的并且连贯的。这个模型中把这些策略当做贯穿于整个对话过程中的一个长期的优化目标。模型用 encoder-decoder RNN 的参数作为目标,在一个所有可能的回答组成的极大的探索空间内定义了它的策略。Agent 通过朝着更长期、的作者定义的奖励的方向,在轮流对话的过程中,使用策略梯度方法(policy gradient methods)来优化模型。

实验显示文中使用的方法比用最大似然估计目标训练的 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 是无意义回答合集,s是某一时刻的响应。(译者注:这个公式就是句子分布的负对数似然,也做了规约)

信息流 :每个 agent 在响应的时候,如果都能贡献出新的信息,开辟新的话题的话,那么是有利于对话的继续发展的,并且也会减少重复的信息出现。因此,很自然地,如果一个agent 在先后两句出现了比较多重合的话,那么这种重复就应该当做一种惩罚。

于是,把先后两个响应的隐层表示 hpi 和 hpi+1 的夹角余弦(译者注:因为h本身就是对上文语义的隐层状态表示,所以直接把它们之间的相似度引入当做惩罚而不是引入文本级别的惩罚更自然、优雅且易于操作)当做一个指标,得到如下公式:

经过对数和取负之后,成为了一个奖励项。

语义连贯性 :通过信息流的奖励,很容易造成 agent 产生各种跟对话无关的响应(译者注:因为其语义不相关,引入了更多信息流,所以得到更大的奖励)而造成对话语义是不符合文法的、不连贯的。因此,把响应和之前状态之间的互信息引入当做一个奖励。具体地,公式如下;

其中,pseq2seq(a|pi,qi) 是由上一轮状态得到响应的概率,后一项是由当前产生响应通过网络生成之前的 qi 的概率。

最终,把这三个指标加权求和(系数和为 1 ),则得到一个动作的最终奖励为:

作者把三个系数分别设置为0.25、0.25、0.5。

4. 模拟

这个模型的核心思想是模拟两个虚拟的 agent 轮流对话的过程,通过这种方式可以探索出一个比较好的状态空间和学习到一个比较完善的奖励策略来对作者制定的指标进行优化。

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 个人,让他们选择哪一个对话的质量最高。

人工评价的结果如图所示,其展示地是强化学习得到的比只用了互信息模型的提升程度。

可见,在单轮对话的质量上,强化学习并没有明显提升(2%),这与作者们的预期是一致的,因为强化学习设计的优化目标并不是产生单轮的表达,而是更长期的优质对话内容。

但是,在单轮对话的「更易被进一步响应」和多轮对话的质量上,强化学习模型都获得了显著的提升。

5.4 定性分析和讨论

随机采样一些实例,可以看到这样的对比结果:

可以看出,强化学习产生的响应确实比其他的模型更具有可交互性。同样作者也发现强化学习的模型展现出了一种反问的倾向。更互信息模型想必,强化学习模型生成的对话也更具有交互性,且更加持久。

另外,做一些错误分析也可以得到一些结论。尽管模型在优化中已经加入了对重复话语的惩罚,但是模型产生的响应还是会进入一个循环,但是长度却不止是一轮。如图:

这可能归结于在训练过程中的历史对话长度较短引起的。另外一个问题是模型经常会产生一个比较「出戏」的响应,与之前聊的话题不太相关,这是模型在惩罚重复和模型对话相关性之间的一个折衷的反应。

当然,最根本的问题还是在于作者们对于一个好的对话的评价的指标是人为定义的,其还不太能完备地描述好一个理想对话的方方面面。尽管作者已经用一些启发式的奖惩来进行集成一个自动计算的治疗,也确实考虑到了一些构建一个好的对话系统的一些因素,但是终究还是不如从真正的人来接受到的回馈作为反馈(加入到模型训练之中)。另外一个问题是,由于搜索空间和候选集合的指数级别地增长,很难在很大的候选范围内来进行训练,这可能导致模型并没有得到一个最好的训练。

6.结论

作者在这篇文章中介绍了一个强化学习的框架,通过模拟两个 agent 之间的自动对话来训练一个神经网络对话生成的模型。该模型将基本的 seq2seq 模型和强化学习的算法整合到了一起,利用 seq2seq 模型得到历史对话的隐层表示,并结合强化学习的算法得到一个在语义上合适的对话响应。这个框架可以更多地考虑一个对话长远的发展来生成响应,从一定意义上可以更好地捕捉一个好的对话的全局特性。

除了贡献了这个模型中用到的非常简洁、可操作的对话系统的几个全局特性的数学化指标之外,这个框架也搭建了一个能产生具有更丰富、更多交互性、更能持续响应的对话系统。

本文选自:arXiv.org,作者:Jiwei Li, Will Monroe, Alan Ritter, Michel Galley, Jianfeng Gao, Dan Jurafsky,机器之心编译;

©机器之心,最专业的前沿科技媒体和产业服务平台,每日提供优质产业资讯与深度思考,欢迎关注微信公众号「机器之心」(almosthuman2014),或登录机器之心网站www.jiqizhixin.com  , 查看更多精彩内容。