干货 | 论文解读:基于动态词表的对话生成研究

标签: 干货 论文 对话 | 发表时间:2018-01-09 21:08 | 作者:微软亚洲研究院
出处:http://blog.sina.com.cn/msra

​ 编者按:近年来,聊天机器人在飞速发展,很多人也对机器人的对话系统产生了很大兴趣。近期,北京航空航天大学—微软亚洲研究院联合培养博士生吴俣应邀参加了PaperWeekly优质论文线上直播分享活动,带大家回顾了近几年来聊天机器人的发展,对比了检索式和生成式聊天机器人的优缺点,并以第一作者的身份解读了北京航空航天大学和微软亚洲研究院在AAAI 2018上发表的有关基于动态词表对话生成研究的论文Neural Response Generation with Dynamic Vocabularies。 一起来看看吧!文章转载自公众号“PaperWeekly”。


浅析对话系统

对话系统主要分为两类,一类是任务型,另一类是非任务型。任务型对话系统主要应用于企业客服、订票、天气查询等场景,非任务型驱动对话系统则是指以微软小冰为代表的聊天机器人形式。 

之所以强调这一点,是因为今年我在ACL发表了一篇论文,有同学发邮件问我为什么参考了论文和源代码,还是无法让聊天机器人帮忙订披萨。我只能说,目前聊天机器人实在种类繁多,有的机器人只负责闲聊,有的机器人可以帮你完成某些特定任务。 

本次 Talk 会更侧重于介绍闲聊机器人,也就是非任务驱动型对话系统。首先我想给大家推荐一篇关于聊天机器人的综述文章 — A Survey on Dialogue Systems: Recent Advances and New Frontiers。

这篇文章来自京东数据科学团队,是一篇较为全面的对话系统综述,其中引用了 121 篇相关论文,并对论文进行了归类。不仅非常适合初学者,也能让大家对聊天机器人领域有一个更为全面的认识。

​面向任务的对话系统主要分为知识库构造、自然语言理解、状态跟踪和策略选择。针对知识库构造,假设我们的使用场景为酒店预订,那首先我们需要构建一些和酒店相关的知识,比如酒店房型、报价以及酒店位置。

具备了这些基础知识之后,接下来就需要展开对话,通过自然语言理解去分辨问题类型(酒店类型、房间类型等)。确认好相关类型后,我们需要借助 policy 模块,让系统切换到下一个需要向用户确认的信息。更直观地说,我们需要循循善诱引导用户将右表信息填写完整。


聊天机器人类型

普遍来说,聊天机器人主要分为两类,我认为准确来说应该分为三类。

比较早期的研究基本属于第一类: 基于模板的聊天机器人,它会定义一些规则,对你的话语进行分析得到某些实体,然后再将这些实体和已经定义好的规则去进行组合,从而给出回复。这类回复往往都是基于模板的,比如说填空。

除了聊天机器人,这种基于模板的文本形成方式还可以应用于很多其他领域,比如自动写稿机器人。

目前比较热门的聊天机器人应该是另外两类,一类是检索型,另一类则是生成型。 检索型聊天机器人,主要是指从事先定义好的索引中进行搜索。这需要我们先从互联网上获取一些对话 pairs,然后基于这些数据构造一个搜索引擎,再根据文本相似度进行查找。

生成型聊天机器人目前是研究界的一个热点。和检索型聊天机器人不同的是,它可以生成一种全新的回复,因此相对更为灵活。但它也有自身的缺点,就像图中的婴儿那样,它有时候会出现语法错误,或者生成一些没营养的回复。

检索型聊天机器人首先需要构建一些文本和回复的 pairs,然后再训练匹配模型,上线之后先做检索再做匹配。相似度算法有很多种选择,现在一般都采用深度学习,如果是做系统的话,肯定需要融合很多相似度的特征。


生成模型大多都是基于 Seq2Seq 框架进行修改,所谓万变不离其宗,不管大家怎么做,都会是以这个框架为基础。文本生成也是如此,在 RNN 语言模型和 Seq2Seq 出来之后,几乎所有生成模型都是基于这个框架。即使把 RNN 换成 CNN 或 Attention is All You Need,也仍然离不开这个框架。


检索型VS生成型

检索型聊天机器人的最大优点在于它的回复多样且流畅,其次,这个系统对编程者的入门门槛较低。即使你对深度学习和自然语言处理不甚了解,但只要你善于写代码,并且能从网上抓取一定量的数据,就可以搭建一个检索型聊天机器人。

另外,对于研究人员来说,检索型聊天机器人比较易于评测,借助 MAP、MRR、NDCG 等传统信息检索方法即可完成。 

检索型聊天机器人的缺点在于它过于依赖数据质量。如果你抓取的数据质量欠佳,那就很有可能前功尽弃。

就工业界来说,要评估某个检索型聊天机器人,首先我们会看其背后的排序算法,其次不能忽略的则是数据质量和规模,最后再看其回复数据是否足够有趣,以上几个因素共同决定着检索型聊天机器人的整体质量。 

生成模型的最大优势在于有一套通用 code,可以忽略语言直接开跑。只要在某种语言上跑得较为顺利,就可以将其应用到所有语言上。

很多人认为 safe responses 是生成式聊天机器人的一个缺点,但其实从某种角度上来说,这也是它的一个优点。相比检索型聊天机器人,它生成的回复质量较为稳定。

生成模型的另一个优点是,它非常容易实现多轮对话,并且能够偏向于某种情感。假设我希望生成一句高兴的话,那么用生成模型会比检索模型更容易实现。 

对于早期的研究者来说, 生成模型的最大缺点在于它的回复较为单一。其次, 由于缺乏自动评评测手段,研究人员难以对生成式聊天机器人进行评估。一个模型的好坏,更多需要靠人进行标注。此外,对工业界而言,生成式聊天机器人的门槛会相对较高。


怎样提高生成的多样性


第一种方法是将模型做得更复杂,比如上图这篇论文使用了 latent variable 来解决 boring responses 这个问题。

上图中的论文,则是 在生成时将概率 bias 到一些特定的主题词。假设某个词是主题词,我们就在生成过程中相应提高它被选中的概率。

第二个流派是采用重排序方法,目前最简单有效的方法是先用生成模型生成大量回复,再用分类器对回复进行排序,排名越靠前效果越好。只要生成的回复数量够多,该方法就一定可行。

第三种方法是基于增强学习的。增强学习有两种不同方法,一种基于策略,另一种基于价值。

基于策略的代表作来自李纪为,其基本思路是:假设已有生成模型 G,给定一个 input 并生成 20 个回复,利用排序公式 P(S|T) λP(T|S) 对回复进行评分作为 reward。Reward 值越大,梯度更新则相应越大。

我们再来看看 GAN 的相关方法。李纪为对 SeqGAN 的模型加以改进,将其用在了回复生成上。

其基本思路是,每生成一个词的同时,用搜索的方法去搜索其最后生成的完整句子,然后用 discriminator D 对其进行评分,分值越高,意味着词的 reward 也越高。之后的思路则跟 SeqGAN 一模一样。


本文思路


我们做这篇论文的初衷,是为了提出一种不借助繁重工具或算法的回复生成方法。因为无论是复杂模型、后排序、增强学习还是 GAN,都属于一种用时间换精度的方法。 

我们希望在避免产生大量时间开销的同时,还能提高回复生成的质量。 提升效率的关键在于 Seq2Seq 的最后一层 — 投影层,这个投影往往会是一个大型矩阵。

我们认为其实没有必要形成这个大型矩阵,因为有用词汇仅有很小一部分,而这一小部分词汇就足够生成一句非常流畅、高度相关的话。比如对“的地得”这类功能词和与 input 相关度较高的词做一个并集,就可以仅用一个小规模字典生成极为流畅的有效回复。 

详细来说,我们会给每一个 input 构建一个动态词典。这么做的目的是为了减少在线 decoding 时间,同时对不相关词进行剔除。


本文其实是在 Seq2Seq 的基础上加了一个动态词表,每给一个 input,我们会生成两类词。

第一类词的生成完全基于规则,即静态词典。静态词典主要包含一些功能词,功能词主要起润滑剂的作用,它们能让一句话的语法变得通畅。静态词典是基于词性构建的,主要包含代词和助词,名词和动词不包含在内。 

第二类词是内容词,即动态词典。动态词典是根据 input 猜测与其相关的词,即我们可以用哪些词对 input 进行回复。这个词典的构建不能再像静态词典那样基于词性,而是要借助分类器或词预测模型,预测哪些词和已给定的 input 相关。 

有了这两个词之后,我们就可以给每个 input 构建一个词典。这个词典的规模会很小,很小的概念是指原来的词典规模是 3 万,现在能缩减到 1000-2000 这个量级。

从矩阵乘法角度来看,如果能把一个矩阵从 N 乘以三万的维度,缩减到 N 乘以一千的维度,就可以大大提升矩阵乘法的运算速度。


词预测模型



接下来我们来看如何做词预测,即如何对内容词(content words)进行预测。内容词的 input vector 是 encoder 生成的 vector。有了 vector 后,我们需要过一个回归模型(MLP),继而预测需要用到哪些词。这个预测的损失就是将最后出现在回复里的词作为正例(标签为 1),再随机采样一些负例作为 0 标签的词,从而进行预测。 

如何采样负例非常关键。剔除掉一句话中的功能词,大概会剩下 10-15 个正例的词。我们需要通过频率对负例进行采样,如果一个词经常出现,那么它被采样为负例的几率就会很大。 

通过对负例进行采样,我们在进行词预测时,可以更准确地预测出内容词是什么。反之,这个词预测模型会跟 Seq2Seq 生成回复模型出现同样的问题,即总是出现高频词。只有利用频率对负例进行采样,才能让高频词在构建词典时就被剔除。


时间复杂度

在介绍完词预测方法后,我们来看时间复杂度的计算,即以什么样的速度进行 decoding。

首先将 Seq2Seq 和本文的 decoding 方法进行对比,可以发现二者在 GRU 和 Attention 上花费的时间完全一致,但是 本文方法在 Projection 上花的时间会少很多

原因在于 Seq2Seq 的 vocabulary size 通常都很大,比如 3 万这种级别乘出来的数。而本文这个 T 可能只有几千,并且 我们无需为每个词建立一个表,而是为每一句话建立一个表。因此,我们构建词典的时间开销要远小于从全局字典里进行词预测。

当然,这种情况的前提是回复词数需大于 1。当回复词数等于 1 时,即逐词预测,本文方法反而会比 Seq2Seq 变得更慢。也就是说,在词的数量越多的时候,词典规模越小,节省的时间也就越多。

经实验证明, 这种方法相比 Seq2Seq 能节省约 40% 的时间


模型训练​

如果只对动态词典进行训练,将导致训练和预测的时候出现一些 gap。即使在训练的时候就采用动态词表这种方法,也依然会面临一个问题,就是你不知道选词这个过程会对你做回复造成什么影响。

为了解决这个问题, 我们在训练时选择将动态词典作为一个隐变量来处理。针对公式的详细推导,大家可以参考论文。 

由于是隐变量,假设动态词典 T 是完全变例,即一个词有选或者不选这两种可能。如果有 3 万个词,那么 T 就有 2 的三万次方这么大,因此这种方法是不可行的。那我们应该怎么做呢?

​这样一来,我们就可以把词典构建和回复生成这两个损失串在一起,相当于放入一同一个公式里表示,而不是将词典和生成分开单独训练。利用逐次采样得出的结果,来评估动态词典在不同情况下,其相对应的回复生成的损失是什么。 

由于这个损失是通过采样得出,因此它会和 RL 一样存在 variance。因此我们加了一个 baseline BK 用于梯度更新,从而使训练更为稳定。


实验

​ 本文实验所用数据来自我们之前的一篇文章,这些词可以覆盖约 99% 的词。

本文使用的开源 baseline

目前研究界仍未找到一个很好的自动指标,能用于回复生成或对话评测。

现有的方法可分为四类:

第一类方法是计算 BLEU 值,也就是直接计算 word overlap、ground truth 和你生成的回复。由于一句话可能存在多种回复,因此从某些方面来看,BLEU 可能不太适用于对话评测。

第二类方法是计算 embedding 的距离,这类方法分三种情况:直接相加求平均、先取绝对值再求平均和贪婪匹配。

第三类方法是衡量多样性,主要取决于 distinct-ngram 的数量和 entropy 值的大小。

最后一种方法是图灵测试,用 retrieval 的 discriminator 来评价回复生成。

表 1 中的前四行是 baseline,DVS2S 是将词预测和 Seq2Seq 的损失串在一起计算,S-DVS2S 则是对这两个 loss 分别进行计算。从结果可以看出,DVS2S 的效果均优于其他方法。 

表 2 是人工标注结果,数值 0 和 2 分别代表最差效果和最优效果,Kappa 则指三者的一致性。人工标注得到的 Kappa 值通常较低,也就是说,即使让真人来进行评测,也很难得到一致性的评价。

速度对比:本文模型可节省40%的时间

案例效果对比

总结

首先,我们将静态词典换成了动态词典,用于聊天机器人中的回复生成。其次,我们提出了一种全新的方法,将词预测损失和回复生成的损失融入到同一个损失函数,以 joint 的方式对这个函数进行优化。最后,我们基于一个大规模数据集,对本文模型的效率和效果进行了验证。



 

相关 [干货 论文 对话] 推荐:

干货 | 论文解读:基于动态词表的对话生成研究

- - 微软亚洲研究院
​ 编者按:近年来,聊天机器人在飞速发展,很多人也对机器人的对话系统产生了很大兴趣. 文章转载自公众号“PaperWeekly”. 对话系统主要分为两类,一类是任务型,另一类是非任务型. 任务型对话系统主要应用于企业客服、订票、天气查询等场景,非任务型驱动对话系统则是指以微软小冰为代表的聊天机器人形式.

12款实用的HTML5干货分享

- - HTML5资源教程
今天我们要来分享12款实用的HTML5应用插件,内容涉及到按钮、表单、进度条、图片等,大家一起来看看这些干货吧. 1、漂亮的CSS3动画进度条 可自定义进度条颜色. 今天我们要再来分享一款很漂亮的CSS3动画进度条,我们可以用它来显示每一项数据的所占的比例,效果很不错. 之前我们也有分享过很多功能强大的CSS3进度条,像 纯CSS3进度条 华丽5色进度条示例、 CSS3 SVG 进度条 Loading 动画 炫酷发光特效都和今天分享的这款比较类似,可以看看.

纯干货!创业失败“备忘录”

- - i黑马
【i黑马导读】“创业不是好玩的事情,90%以上的创业一定会死,能活下来的绝对是祖坟冒青烟. 而本文作者@ 许怡然  便是那90%中的一员,作为一个屡创屡败的网游创业者,他用近八千字分享了自己遇到的融资、团队、利益兑现等问题,特详尽,特干货,特别推荐. 经历太多次创业,发现创业实在太难,一开始我认为是我的运气稍微差了一点,每一次创业失败的原因都不尽相同,使我经历了各种各样的创业痛苦,不过后来看看我周围跟我一起创业的弟兄们,发现创业的人生就是如此.

期末论文

- Xiaoxi - 科学松鼠会

无聊对话录

- Chrisoul - 滯銷書
B:“那换个方式这样打行不行. A:“这位选手,你其他方面的表现都还不错,就是唱歌有些走调. B:“是这样的,评委老师,这首歌原唱就是这样,我练了很久才练出这种貌似走调的效果. A:“我觉得自从和你谈恋爱以后就越来越蠢了. 只有你变聪明了才会意识到自己蠢. B:“哦,你好,请问你是姓田中吗. B:“D 大调还是 D 小调.

你好,对话框

- - 腾讯CDC
”除非你对某类对话框已司空见惯,否则遇到,第一反应往往是这样的. 这种体验就像你明明急着去赶车,途中却不断被拦住塞传单一样. 不能否认,它是一种打断,有时甚至会成为打扰. 做为设计师,虽知“打断”暂不能杜绝,但不使之变为“打扰”,却是我们该努力做到的:.   隔一个小时打断你一下,你或者还可以忍受.

跟易到用车CEO周航聊O2O干货

- - 云科技
易到用车是约租车领域的领头羊. 创立于2011年7月,比美国UBER早一个月. 周航:第一,必须已经有大量的存量资源,就等着互联网来整合. 第二,这些资源必须非常碎片化,微型化. 周航:餐馆对大众点评网依赖高,但快捷酒店对携程依赖就低. 团购主要瞄准了餐饮,可团购只干了营销撮合的事. 它跟传统产业的关系是增值和依附,起不了主导作用.

干货:一个网站完整详细的SEO优化方案

- - 互联网分析
根据自己的个人经验完成了这篇文章,希望对SEOer有点帮助,高手直接跳过,请勿喷水. 一个完整的SEO优化方案主要由四个小组组成:. 接下来,我们就对这四个小组分配工作. 首先,前端/页编人员主要负责站内优化,主要从四个方面入手:. 合理规划站点结构(1、扁平化结构 2、辅助导航、面包屑导航、次导航).

干货:从刷榜说起你不知道的行业内幕!

- - @i黑马
今日鸟哥接到消息,刷榜公司重新开启接受预约,预计一周内将重新开启刷榜接单,这是什么节奏. 刷榜界玩的就是心跳,不适应你就玩不了. 今天和大家探讨一个话题----刷榜到底公平吗. 大家都知道,AppStore的排名和下载量是相互作用的,有排名就有下载,反过来有下载就有排名. 这里拓展一下影响AppStore排名的因素,主要因素是下载量和时间段内的下载量变化量,也有人说还有评论、激活、活跃度以及一下特殊情况加权等,我不确定有没有这些因素,但是可以断定,即便是有,占权重也不大,那么归根到底权重最大的就是:下载量.

产品经理干货:可用性测试的那些事

- - 人人都是产品经理
可用性测试是指通过对典型用户实施测试来对产品或服务做出评价. 在一次典型的测试中,用户要完成一系列典型任务. 与此同时,观察者会在一旁观察、倾听、做笔记. 可用性测试的目的就是为了发现可用性问题,收集定性和定量的数据,并评估用户对产品的满意度. 可用性测试有助于设计和研发团队在产品成型之前发现问题.