1. 论文介绍
本论文由百度发表于ACL2020,重磅推出了拥有16亿参数规模的超大型模型PLATO-2,该模型在公共数据集的测试超越了google发布的26亿参数模型Meena和Facebook发布的27亿参数模型Blender。而且在中文对话中,它与微软小冰之间的差距巨大,这无疑意味着百度PLATO-2将对话的智慧提升到了一个全新的水平。目前,PLATO是业界首个基于隐空间的端到端的预训练对话生成模型,该模型用隐向量来表示对话的潜在方向,从而达到对话内容丰富度和流畅度的显著提升。
2. 论文概述
该论文提出了一个对话生成预训练模型,能够支持闲聊、基于知识的对话、对话问答系统。
PLATO-2模型采用了灵活的注意力机制,来实现融合双向文本内容信息和单向的生成的语言特征信息,该模型引入了离散隐变量来处理回复生成中一对多的问题,隐变量较为普遍地在VAE、CVAE等技术中使用,但在论文中,作者们首次提出将离散的隐变量结合Transformer结构,应用到通用的对话领域。通过引入离散隐变量,可以对上文与回复之间的“一对多”关系进行有效建模。
模型的主要两个任务为回复生成和隐动作识别,两个任务都在同一个网络架构下完成。
3. 论文背景
大规模预训练语言模型已经在nlp领域展现了成功,比如bert和XLNet,经过fine-tune,这些预训练模型持续在下游任务中获得了突破,尤其是NLU领域,如问答、自然语言推理。但Bert在小规模语料上进行自然语言生成,如对话生成的效果并不好,可能原因是:
1)人类对话中暗藏的语言特征和普通文本的相差很大,可能在知识或数据分布上差异很大,由于人背景和环境可能有所不同,很多种回复都是合理的。
2)单向对话生成的训练模式和BERT中应用的双向自然语言理解具有差异。
3)不同于普通的nlp任务,对话生成具有one-to-many的关系,一段对话可能有多种合适的回复。对于这种复杂的一对多的模式,神经网络拟合起来往往非常棘手。在学习这样一对多的数据的时候,会因为模型能力和数据匮乏导致最终学习的效果趋向于平庸,极易产生如“哈哈”、“嗯”这样大家熟知的索然无味的“聊天终结语”。
为了解决这些问题,本文提出了新的方法以获得高质量对话生成的预训练模型。首先,为了解决数据分布的问题,在使用普通数据的预训练模型基础上继续使用了大规模Reddit和Twitter对话数据。其次,为了缓解训练模式的不同,本工作将单向和双向的处理灵活使用。最后,本模型采用了离散隐变量,在对话中来建设一对多关系模型。
隐变量:无监督自动学习,无需人类标注
4. 对话生成预训练
4.1. 模型构架
模型三要素:
对话上下文:c 包含多条历史对话
回复:r 针对给定上下文的合适回复之一
隐变量:z K类别变量 [1,K] 每个值都对应一种特定隐藏语言行为
模型任务:
-
回复生成:给定context c,一种选择的隐变量z,回复生成p(r|c, z),单向decoding,只考虑当前单词之前生成的词:r<t
隐藏行为识别:给定一对上下文context和回复,隐藏语言行为 p(z|c,r),
4.2. 输入表征
input embedding组成:token、role、turn、position embedding
input是隐变量、对话内容和回复的拼接,每轮对话加上结束符[EOU],开始符[BOU]
token embedding z是k种类变量,embedding E[z] 从embedding空间K * D纬的矩阵Ez映射过来。其他词汇的token使用Bert的embedding
role embedding用于区别对话中的字符,EA是回复和由相同文本生成的对话。EB是其他字符,对于基于知识的对话,背景知识是Ec
turn embedding 记录对话的论数,为了不让对话轮数干扰生成,将回复设为0。
position embedding记录该轮对话中每个字符的位置。
4.3. 预训练目标
4.3.1. 回复生成
本模型中,回复的生成是基于隐变量和上下文已知的情况,预训练模型采用负数对数似然NLL和词袋BOW损失函数,用于训练隐变量。
- NLL loss:
隐变量z服从后验分布p(z|c,r),计算公式为:
是特殊mask的最后一层隐层,, 是一个全连接层的权重矩阵
-
BOW loss:
V为整个词典,函数f试图用隐变量直接预测目标回复中的词
是隐变量的最后一层隐状态,表示生成词rt的概率。BOW不考虑词的顺序,让隐变量能够捕捉目标回复的全局信息。
4.3.2 回复选择
回复选择辨别回复是否和对话内容相关,是否与背景知识一致,在多个备选回复中选出连贯一致的回复。
回复选择的交叉熵如下:
表示为r为正确回复,表示为错误回复。
4.3.3 预训练模型总目标
最小化以下复合损失函数
4.4. 预训练流程
该预训练模型包含12个transformer block, 网络参数使用Bert初始化。对于每一个训练样例(c,r),都需要两次通过网络来实现隐动作识别和回复生成任务。预训练流程如下:
1)隐动作识别
已知c和r,估算后验分布,随机选择并计算
- 回复生成
给定隐变量分布z~p(z|c,r),计算和
- 优化
对于总损失L,后向传播更新网络参数
4.5. fine-tuning 和 推理
可通过公式8在小数据上进行fine-tuning,达到拟合后通过以下步骤进行推理:
1) 备选回复生成:对于每一个隐变量 ,生成相应的回复r
2)备选回复选择:对于每一个回复,计算概率,选择概率最高的值作为回复。
5. 实验
为了验证预训练模型的效果,论文在3个公开对话数据集上进行了测试:Persona-Chat、Daily Dialog以及DSTC7-AVSD。
Persona-Chat是典型的知识聊天任务:两个人讲述自己信息(Persona Profiles),并在对话中尽量了解对方;Daily Dialog偏向日常闲聊类型;DSTC7-AVSD是对话式问答,根据视频场景信息,两人进行多轮问答,讨论视频中物体和事件。
在每个数据集上的实验,作者们对比了基线方法以及每个数据集上的SOTA方法。PLATO在Persona-Chat和Daily Dialog上的自动和人工评估结果,如表2所示。
PLATO在DSTC7-AVSD上的结果,如表3所示。由这些结果可见,PLATO在各个对话数据上,均超过了当前最优,取得了新的最优效果。
PLATO也与其他预训练模型进行了对比,在Persona-Chat上的实验结果如表5所示,其中2.2是不使用Latent Space的对比模型,3.1是完整PLATO模型。
表5 不同预训练模型在Persona-Chat的PPL结果
通过对比这些结果,可以看出:
灵活的注意力机制可以充分利用上文的双向信息(Model 1.2 v.s. Model 1.3);大规模的Twitter和Reddit语料,显著改善回复生成(Group 2&3 v.s. Group 1);离散隐变量的引入,则可以进一步提升回复质量(Model 3.1 v.s. Model 2.2)。
对于PLATO的定性分析,论文也在表5中提供了一些case。给定一个上文,通过对离散隐变量进行不同赋值,PLATO可以产生多样且都合理的回复。