600字范文,内容丰富有趣,生活中的好帮手!
600字范文 > 生成式与检索式对话系统的融合之道

生成式与检索式对话系统的融合之道

时间:2019-04-30 16:27:16

相关推荐

生成式与检索式对话系统的融合之道

生成式与检索式对话系统的

融合之道

Fusion of generative and search-based dialogue systems

From:W.SX

本文主要探讨生成式与检索式对话系统的融合,正文内容从第二节开始,可跳过第一节的故事部分。

背景故事

01

我们总在幻想AI有一天会变成真正的智能,而不是今天依靠大量“人工工作”的智能。虽然我们现实中暂无法实现这样的AI,但这些AI却早已成为相关影视作品中不可或缺的一部分。在至今有40余年连载历史的《哆啦A梦》里,主角哆啦A梦就是这样一个可爱的人工智能猫(li mao)型育儿机器人,并生于219月3日,由另一主人公大雄(野比大雄)的曾孙野比世修派过来照顾无比愚笨(但又内心善良)的大雄的。每一个看过哆啦A梦的人,都知道他是一只不折不扣的机器猫,但是每每当我们看他说话、做事、流露内心情感的时候我们又却又难以联想到他只是一个机器,难以反应到他和我们不一样。

对AI的幻想,当然不只是哆啦A梦这样展现温情美好一面的未来AI机器人,也有对AI的反面幻想。例如在终结者电影系列中,人工智能最终发展到“天网”, “天网”有了自我意识并试图取代人类,并派出了若干终结者机器人回到过去谋杀唯一可能影响到天网阴谋的约翰·康纳。

无论是创造一个哆啦A梦还是终结者,一个必不可少的技术就是赋予他们类人的交流能力。对话系统让机器能以人类的方式与人类进行交谈,当前虽然在对话系统这个领域已经有了较长时间的研究,但是距离上述影视作品中机器人的能力还相差很远。如果要说影视作品中哪一个AI对话系统和当前技术发展水平最接近,那一定是《轮到你了》里那个女主形象的对话机器人了,可以以接近人类的形式对话,但是却又那么不智能。

对话系统

02

根据应用领域的不同,对话系统可大体被分为面向任务(Task-Oriented)的型对话系统,以及面向闲聊的开放领域(Open-Domain)型对话系统(不完成任务)。任务型对话系统主要通过对话的方式帮助用户完成一些特定操作,最典型的例子就是现在智能手机上所搭载的各种智能助手(如 Siri等),可以通过对话的方式让这些语音助手完成设定提醒事项,查询天气等事宜。而开放领域的对话系统,就更像一个知心朋友一样,陪伴用户进行聊天(比如上面提到的AI奈奈酱)。

开放领域对话系统根据实现技术方案的不同可被进一步分为检索式对话系统和生成式对话系统。检索式对话系统,会预先准备大量的对话语料,用户输入query,系统首先从整个语料库中初步检索出一系列可能相关的候选对话,然后再在这个小范围的候选集内进行重排序,并挑选出最适合的一句作为回复response。生成式对话系统采用了完全不同的思路,其训练一个条件语言模型(Decoder部分),该语言模型能够根据的用户问话(Encoder进行编码,语言模型的条件)估算一句话能够作为回复的概率(此时不是生成回复,而是衡量某一句话能够作为当前回复的概率),并结合“解码算法”后该语言模型就可以生成一个句子作为回复。

检索式的方法显然不产生新的回复,其能够回复类型以及回答内容都由语料库所决定。因此,一旦用户的问话超脱了语料库的范围或者与语料库中的语料不完美匹配,那么对话系统将无法准确回答用户。相对于检索式的方法,生成式方法则更加灵活,其根据用户输入的不同“按需定制”一个合理的回复,不需要担心用户的问话在语料库中无匹配。虽然生成式方法非常灵活, 但却也只是“看似美好”, 在实际的研究中,我们发现生成式方法更多的情况是生成一些万能的客套话(Dull Response)去搪塞用户,总是生成类似“我不知道”,“嗯嗯”这样的回复,缺乏足够的有效信息和多样性。因此,如何提升多样性、解决信息量不足也就自然成了当前生成式对话领域的热门研究课题。通常相关研究者认为生成式模型缺乏有效信息和多样性的原因可以归结为:1)对话建模方式不合理, 2)解码算法不合理,3)缺少背景知识的支撑,单独依靠用户的输入问话,使得模型难以理解和生成。因此为了提升生成式对话的信息量和多样性,通常可以改进建模方式,提升解码算法,以及引入外部知识等。

在引入外部知识以提升多样性的工作中,过去多关注“话题”、“人物个性”、“情感”或者“常识”等点。近来,越来越多研究者开始利用另一种类型的“知识”,也就是利用检索式方法检索出来的对话作为原型进行参考,然后再进行生成, 达到两种方式的融合。检索方法检索出来的对话原型,是由真人所产生的,质量较高。这些对话原型多数情况下是不够灵活多变,在细节上可在些许差异,直接拿去回复用户过于直接,但对于生成式模型来说却是一个绝佳的参考模板。检索的对话结果可以作为一种高质量的知识,指导生成模型生成一个更贴近当前对话的回复,做到了取长补短,即规避了检索式方法过于死板不灵活的缺点,也提升了生成式模型多样性不足的问题。

本文将为大家整理并分享三篇近期检索式和生成式融合的文章,三篇文章分别从三种不同的角度去融合检索式和生成式对话系统。

原型-编辑模型

03

第一篇工作是在AAAI 发表《Response Generation by Context-aware Prototype Editing》[1],本文提出了一个“原型-编辑”模式(prototype-then-edit),其将检索式方法检索出来的内容作为对话回复生成的参考原型,在原型的回复上进行编辑并生成一个新的回复。

(原型-编辑 模式示例)

当用户给定了一个问话(即上下文 c)后,首先利用检索式系统(Prototype Selector)从语料库中检索出一个最接近的原型问话c’,以及其对应的原型回复r’。随后基于神经网络的编辑器Neural Editor将会根据(c, c’, r’) 生成最终的回复r。为了编辑原型回复r’,本文方法首先计算原型问话中哪些词是插入词(在c’中出现的词,但是不在c中的),以及哪些词是删除词(在c中的词,但是不在c‘中的词)。此外,本文利用一个由双向GRU构成的Encoder首先对原型回复r’进行编码,随后结合这个编码信息,以及插入词和删除词的词向量,计算得到一个编辑向量,编辑向量蕴含了原型问话与真实问话的差异,并为后续编辑提供指导。在最终Decoder生成最终回复r时,Decoder将会同时使用编辑向量和Encoder的输出的原型回复r’编码信息,这样Decoder就能在参考原型回复r’以及编辑向量二者的信息共同生成回复(编辑原型回复)了, 原型-编辑模型不仅保证了生成的对话和检索式模型一样通顺和信息量充足,也结合了生成式模型灵活的优势。

总结来说,原型-编辑模式的主要思想是找到一组原型,并根据当前原型的问话和当前输入问话的差异,学习到一个应该如何编辑的向量,再使用这个编辑向量去编辑原型中的回复,做到了二者的完美结合。

(“原型-编辑”模型)

骨架-回复模型

04

第二篇来自NAACL 的工作《Response Generation by Context-aware Prototype Editing》[2]是在刚刚介绍的原型-编辑模型上的一种改进。作者在实验中发现之前的原型-编辑模型,以及类似模式的模型,非常容易退化成单纯的拷贝模型,也就是当检索出原型回复r’后,模型会倾向于大幅度的“抄(参考)”原型回复r’,导致最后生成一个和原型回复r’差不多甚至一样的r,缺乏必要的修改,并且当检索出来的原型和给定的context差异很大的时候,模型的性能也会大幅度的下降。

(骨架-回复 示例)

为了改善这个问题,本文的模型认为检索模型提供的原型回复,只应该从中学习回答的模板和方式,而不是其中的细节(原型-编辑 模型并未显示区分这些),以及能够区分原型回复中一些不合适的内容。因此本文所提出的“骨架-回复”方法是以检索出来根据原型回复r‘为基础,通过删除其中不必要、不相关的细节与词后,生成一个类似说话方式的模板,也就是骨架,然后再根据这个骨架,增加属于当前问话的细节并生成一个全新的回复。

(骨架-回复 模型)

具体来说,本文的方法包含两个相对独立的过程,首先利用Skeleton Generator,把原型系统中检索出来的原型回复中不必要的词删除并得到一个骨架。随后Response Generator利用这个骨架在生成一个全新的回复。Skeleton Generator和之前的原型-编辑模型类似的,首先根据用户的查询问话q(和上一篇工作的c等价)和检索出来的原型问话q’,根据其差异(也是插入词和删除词)计算得到一个编辑向量,然后根据这个编辑向量,对原型回复r’的每一个词进行二分类,如果决定删除则将其替换成一个占位符,如果不删除则保持原状,最终得到一个skeleton。在Response Generator中,首先利用一个双向LSTM(Encoder) 对输入的query进行编码得到一个query memory,并且同样的对上一步得到的skeleton用同样结构的双向LSTM进行编码得到一个skeleton memory,随后Decoder再同时利用这两个不同的memory 生成一个回复,这样就实现了同时参考输入query和skeleton的模式。值得注意的是,在这种模式中,skeleton需要先解码出来再进行编码,这个过程会打断整个模型的end2end的训练模式,因为这个操作会导致梯度无法回传。为了解决这个问题,本文提出了两种解码模式,一种是名为Joint Integration的模式,共享Skeleton中用于编码Response的双向LSTM,并利用多任务共同训练。一种是Cascaded Integration模式,利用强化学习中的Policy Gradient模式来集成两个模块。

可以看到这种骨架-生成模式,是对原型-编辑模式的一种演进,其主要引入了骨架生成这一步,解决了原型-编辑中的一些不完美之处,并获得了更好的结果。

摘要模式

05

第三个工作是来自ACL 的《Learning to Abstract for Memory-augmented Conversational Response Generation》[3],相较于前两篇工作,这篇工作采用了一种全新的模式去集成检索式和生成式的方法。正如之前两篇工作所介绍的,这些检索+生成的模型都非常依赖检索出来的结果,如果检索出来的结果质量较低,那么其将会显着影响后续的生成,并且这些模型通常只使用一个原型,这将会直接加剧上述的问题,因为只有一个参考,一错则全错。

(摘要模式)

相对之前的两个工作,本文提出了一种完全不同的融合之道,本文的方法不再先检索出一个原型,再基于这个原型进行编辑修改。本文的方法是将整个语料库的对话分成K个组,每个组别中包含特定一类的对话原型几何,然后在对话生成中动态地使用这K个组所对应的共同特征M(所以这里被称作是Memory Abstract)。具体来说,本文根据语料库中所有原型问话q’的Embedding表示(由Encoder计算得到),利用K-Means将它们聚合成K个组,每个组的中心点位置就是这个组的key向量(组内所有原型q’ 对应的Embedding中心点),再根据每个组内所有原型回复r’所对应的Embedding(同样由Encoder计算得到)的均值生成一个value向量,代表这个组的特征,因此K个分组就有K个value,在生成时给定一个问话q后,这K个value可以以SoftRead(加权和)的方式,或HardRead(选择概率最大的一个分组)的方式读出一个最终的参考原型摘要abstract value,并结合当前问话q生成r。由于聚类成K个组的过程依赖于由Encoder所计算的Embedding值,且这个Encoder和后续的生成网络共享,所以这个工作在实际训练中将训练Epochs分为两组,一个Epoch 利用当前的Encoder参数更新K个分组,更新分组对应的Value,不更新生成网络;另一个Epoch中则固定K个分组,给定query后直接从当前的K个分组中读取摘要,并进行生成。

(摘要模式 模型结构)

在生成网络部分,本文模型大体遵循Seq2Seq架构。给定一个用户问话q,利用Encoder编码得到一个中间表示Eq,随后利用Eq从K个分组中读取一个摘要Eqm,然后利用一个MLP融合后输入到Decoder中进行生成。特别的,在训练的时候,本文还增加了一个条件自编码器的训练路径,即把正确回复的response也使用Encoder进行编码得到Er,然后同样利用MLP融合Eq后输入Decoder并要求解码生成response。也就是第一条路径是:Eq+Eqm -> response, 第二条路径是:Eq+Er-> response。采用CAE的好处是:1)因为在之前的K个分组的计算中无论是response还是query都依赖这个Encoder进行编码,CAE可以加强这两块的耦合,使得Encoder可以对response进行有效编码。2) 可以大致上让从K分组中读取出来的Eqm与真实response的表示Er更加接近。

相对于之前两个方法,这个工作不再显式地从语料库检索个别原型作为参考,而是从语料库中选择一部分相似的原型 并直接读取其共有特征value作为参考。在这个方法中,K值可以自由设置,从而获取不同粒度的参考。如果将K设置为语料库大小,也就是每个分组只包含一个原型,那么这个方法就退回到了和前面两个方法类似的检索-融合方式了。另外使用该方式聚类后,每个分组内的原型其实都会有一些共有特征,比如他们都是同一个话题,都是涉及到同一个实体等。

(聚类后,一个分组内的原型问话示例)

总结

06

本文介绍了对话系统中三种不同的检索式生成式方法的融合模式。总体来说,本文选择介绍的模式都是以生成式方法为主,并将检索的内容作为一种额外的知识,提供强而有力的指导。

“原型-编辑”和“骨架-回复”这两个方法的主要落脚点在对检索出原型的修改上,他们假设检索出来的结果都是高质量的,只是有稍许不足,变化不够灵活,但是都能够给生成提供强而有力的指导。“摘要”考虑的显然更为实际,受限于语料和模型,检索出来的对话不可能如此尽善尽美,因为“摘要”方法参考了更多的对话(甚至如果是SoftRead模式,整个语料库中的每一个原型都参与了生成),并且检索过程也完全集成到模型当中,而不是预先检索,也获得了更好的效果。 不过“摘要”方法也存在一些明显的缺点,因为其语料检索的过程和生成过程是一起训练的,当语料库发生变动时,都要重新聚类一下,并且在做一些训练以fine-tune适应当前分组。另外,“原型-编辑”和“骨架-回复”理论上都可以认为通过控制使用原型的方式,改变对话的生成走向,以获得更好的可控性和多样性(指定不同原型,产生不同但逻辑相关的回复),而“摘要”方法则因为其模型结构,显然不能如此操作。

参考文献

[1] Wu, Y. , Wei, F. , Huang, S. , Wang, Y. , Li, Z. , & Zhou, M. . (). Response generation by context-aware prototype editing.

[2] Cai, D. , Wang, Y. , Bi, W. , Tu, Z. , Liu, X. , & Lam, W. , et al. (). Skeleton-to-response: dialogue generation guided by retrieval memory.

[3] Zhiliang Tian, Wei Bi, Xiaopeng Li, and Nevin L. Zhang. Learning to Abstract for Memory-Augmented Conversational Response Generation. ACL .

作者简介

巫思杏

计算机软件与理论 专业

研究方向:自然语言处理,人机对话

博士二年级

作者往期文章

PKUFineLab

让阅读成为习惯

让灵魂拥有温度

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。