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

标签: 干货 论文 对话 | 发表时间: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”. 对话系统主要分为两类,一类是任务型,另一类是非任务型. 任务型对话系统主要应用于企业客服、订票、天气查询等场景,非任务型驱动对话系统则是指以微软小冰为代表的聊天机器人形式.

windows10使用干货

- - FanHeart
首先来说说为什么要写这篇文章吧(我真的不是看八月份到现在还没更新文章来水文的),保证这是干货. 作为经常帮朋友远程桌面解决一些电脑问题或者帮助博友远程解决博客网站问题的热心boy,在连接到别人桌面时总能看到某60全家桶,某电脑管家,xxxzip,某大师等等国产毒瘤垃圾软件,有朋友就要问了这些软件有什么危害呢.

12款实用的HTML5干货分享

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

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

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

干货 | 携程图片服务架构

- -
胡健,携程框架高级研发经理,目前负责多媒体服务的构建和研发工作. 近些年携程业务突飞猛进,用户遍及世界各地. 公司对用户体验也越来越重视,每一个小的功能改动、页面改版的背后,都有大量的A/B实验提供保障. 与此同时,与用户体验息息相关的媒体文件的应用质量也被放到重要位置,如图片加载延时、成功率、清晰度等数据.

期末论文

- Xiaoxi - 科学松鼠会

无聊对话录

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

你好,对话框

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

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

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

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

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