
为短文本对话生成多样的回复
这是由苏大和腾讯AI lab合作的一篇文章
目前发表在AAAI2019
论文及代码
研究背景
在短文本生成任务上,业界普遍的做法就是seq2seq模型,他是将模型的输入和输出建立为一对一的映射。
但是在实际场景中,一个输入往往有多个回复,也就是一对多的映射。
例如:微博、Twitter
研究方法
建模
首先介绍一下作者对这个问题的建模。
训练数据为{(x,{y})},其中一个x对应多个y。
此外,为了降低训练难度,作者在输入x和输出y之间加入了一个隐变量z。也就是说先由x生成多个z,再由x和z生成对应的y。
那么这个隐变量z需要满足两个条件。
可解释性:它可以体现其与输入x以及输出{y}之间的相关性。
有区分度:z应该能够捕获句子级别的差异。也就是说,给定不同的x时,推断出的z可以是不同的,而给定不同的z时,生成的输出y也是不同的。
为了满足这两个条件,这里使用一个隐空间大Z来作为词汇表。
第一个条件我们可以直接检索xzy文本上的相关性。
对于第二个条件,词汇表大Z为给定的x定义了足够大的隐空间,这样就可以选择多个不同的z来生成多个响应。
模型
下面介绍一下本文使用的模型架构

本文主要使用了两个网络,一个是潜在词推断网络,还有一个是生成网络。
在潜在词推断网络中,作者用一个双向的GRU去编码输入x,再过一个softmax去计算z的概率分布。
在生成网络中,首先也是将x过一个双向GRU去编码,此外,将z过一层嵌入层和一层全连接层,获得z的编码表示。然后利用这两种表示经过GRU解码单元来解码输出序列y。
对于每一个y计算nll loss,本文中对loss有两种取法,一种是计算均值,另一种是取最小值。
对此,我们常见的做法是取均值,但作者考虑到在多个y中,与z最相关的应该loss最小,因此还采用了最小值函数。
当然,最终实验证明,取最小值的效果确实不错。
强化学习

值得一提的是,作者这里使用强化学习的方法进行联合训练。
在任务一中,作者使用Policy Gradient(策略梯度)去优化这个过程。
任务二中,通过计算预测的y和ground truth y之间的f值作为reward,再通过策略梯度去更新网络参数。
实验
微博

我们可以看到,在微博的测试结果上,本文提出的模型的BLEU值并不如HGFU模型,但也能排在第二。
作者认为,BLEU是评估生成的答案与给定答案之间有多少重叠词。但在开放域对话中,与答案不符的可能不一定很差。

在推特上的结果就比较不错了,Avg和Min包揽各项指标前二,而且比其他模型都高出很多。
样例对比

来必力目前使用QQ或微信登录会有bug,建议大家使用微博或其他社交账号登录。