\u200E
百度发布首个大规模隐变量对话模型PLATO
发布日期:2020-04-15T09:31:15.000+0000 浏览量:370次

百度于去年10月公布的基于飞桨开源深度学习平台开发的通用领域对话生成预训练模型PLATO,相关论文最近已正式被ACL 2020接收。

 

PLATO是业界首个基于隐空间(Latent Space)的端到端的预训练对话生成模型。据悉,该模型利用隐向量来表示对话的潜在方向,从而达到对话内容丰富度和流畅度的显著提升。针对具体的对话任务,基于PLATO可以用少量数据训练得到非常流畅的对话系统。

 

论文名称:

PLATO:Pre-trained Dialogue Generation Model with Discrete Latent Variable

 

论文地址:

https://arxiv.org/abs/1910.07931

 

预训练模型及代码:

https://github.com/PaddlePaddle/Research/tree/master/NLP/Dialogue-PLATO

 

引言

研发开放领域(Open-Domain)的对话机器人,使得它能用自然语言与人自由地交流,这一直是自然语言处理领域终极目标之一。

 

对话系统的挑战非常多,其中有两点非常重要,一是大规模开放域多轮对话数据匮乏; 二是对话中涉及常识、领域知识和上下文,因此在对话回复时,存在“一对多”问题。

 

比如这个例子“李雷:今天好冷啊,外面风好大。”韩梅梅Bot可以怎样回复李雷呢?

A.是啊,天气预报说今天气温骤降10度呢。

B.好期待下雪啊,这样就可以堆雪人了。

C.刚在外面走了一会,发型都被吹乱了。

 

一个对话的上文(Context),往往可以对应多个不同回复(Response)的方向。这些不同的回复随着不同的人,不同的背景和环境可能有所不同,但都是合理的回复。

 

对于这种复杂的一对多的模式,神经网络拟合起来往往非常棘手。在学习这样一对多的数据的时候,会因为模型能力和数据匮乏导致最终学习的效果趋向于平庸,极易产生如“哈哈”、“嗯”这样大家熟知的索然无味的“聊天终结语”。

 

预训练模型近年来不管在自然语言理解还是在自然语言生成领域都产生了巨大的影响。利用通用语料进行预训练,在目标领域上能用少量的数据得到很好的效果。

 

尽管如此,对话预训练的效果因为上述原因仍然不能让人满意。为了解决这些问题,百度提出了基于飞桨开源深度学习平台开发的一个新的对话生成框架——带离散隐变量的对话生成预训练模型“柏拉图”(PLATO)。

 

隐变量较为普遍地在VAE、CVAE等技术中使用,但在论文中,作者们首次提出将离散的隐变量结合Transformer结构,应用到通用的对话领域。通过引入离散隐变量,可以对上文与回复之间的“一对多”关系进行有效建模。

 

同时,文章中通过利用大规模的与人人对话类似的语料,包括Reddit和Twitter,进行了生成模型的预训练,后续在有限的人人对话语料上进行微调,即可以取得高质量的生成效果。

 

PLATO可以灵活支持多种对话,包括闲聊、知识聊天、对话问答等等。而文章最终公布的在三个公开对话数据集上的测试,PLATO都取得了新的最优效果。

模型介绍

 

在PLATO中,离散隐变量可以有K个取值,它的每个取值,是与一个回复中的意图相对应的,或者可以理解为多样化的对话的动作(Action)。

 

在PLATO的训练中,有2个任务同步进行,且共享网络参数:回复生成和隐变量识别。给定上文和离散隐变量的取值(即确定了回复中的意图),生成任务会尽量最大化目标回复的似然概率。

 

同时,识别任务尽量估计给定上文和目标回复对应的隐变量取值。显然,隐变量的准确识别,可以进一步提升回复生成的质量。

 

PLATO的网络架构如图1所示,由Transformer Blocks组成。针对多轮对话的输入的表示方法,PLATO也进行了独特的设计,每个token的Input Embedding是由对应的token、role、turn和position embedding相加得到。

 

预训练中同步进行了2个任务——回复生成(Response Generation)和隐变量识别(Latent Act Recognition)。

 

在回复生成任务中,PLATO借鉴UniLM使用了灵活的注意力机制:对上文进行了双向编码,充分利用和理解上文信息;对回复我们进行了单向解码,适应回复生成的Autoregressive特性。

 

在隐变量识别任务中,PLATO使用特殊符号[M]作为输入,收集给定上文和目标回复的信息,用于估计回复意图(即离散隐变量的取值)。


图1 带离散隐变量对话生成预训练的网络架构

 

PLATO训练使用了三个目标函数(Loss Function)——negative log-likelihood (NLL) loss、bag-of-words (BOW) loss和response selection (RS) loss,如图1最后一列所示。

 

在文本生成任务中,最常用的是NLL loss,PLATO引入了BOW loss是为了促进离散隐变量的训练。此外,RS可以辅助判断一个回复与上文的相关性。

 

PLATO的模型由大规模语义预训练模型进行参数初始化,在预训练中,PLATO使用了8.3M Twitter和Reddit对话样本。预训练的PLATO模型以及代码,已经在GitHub上开源,开源地址见本文开头部分。

 

实验结果及分析

 

为了验证预训练模型的效果,论文在3个公开对话数据集上进行了测试:Persona-Chat、Daily Dialog以及DSTC7-AVSD。

 

Persona-Chat是典型的知识聊天任务:两个人讲述自己信息(Persona Profiles),并在对话中尽量了解对方;Daily Dialog偏向日常闲聊类型;DSTC7-AVSD是对话式问答,根据视频场景信息,两人进行多轮问答,讨论视频中物体和事件。

 

在每个数据集上的实验,作者们对比了基线方法以及每个数据集上的SOTA方法。PLATO在Persona-Chat和Daily Dialog上的自动和人工评估结果,如表1所示。

 

表1 Persona-Chat和Daily Dialog上的评估结果

 

PLATO在DSTC7-AVSD上的结果,如表2所示。

 

表2 DSTC7-AVSD上的自动评估结果

 

由这些结果可见,PLATO在各个对话数据上,均超过了当前最优,取得了新的最优效果。

 

PLATO也与其他预训练模型进行了对比,在Persona-Chat上的实验结果如表3所示,其中2.2是不使用Latent Space的对比模型,3.1是完整PLATO模型。

 

表3 不同预训练模型在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的定性分析,论文也在表4中提供了一些case。给定一个上文,通过对离散隐变量进行不同赋值,PLATO可以产生多样且都合理的回复。

 

表4 PLATO模型生成的回复

 

总结和未来工作

 

尽管越来越多的工作证明了随着预训练和大规模语料的引入,自然语言处理领域开启了预训练然后微调的范式。在对话模型上,大规模预训练还处于初级阶段,需要继续深入探索。

 

论文提出的隐变量空间预训练模型,可能成为端到端对话系统迈上一个新台阶的关键点之一。百度NLP也在持续优化当前对话模型,在不久的将来,更加强大的对话预训练模型也许会被陆续披露。

 

如果您加入官方 QQ 群,您将遇上大批志同道合的深度学习同学。官方 QQ 群:703252161
如果您想详细了解更多飞桨的相关内容,请参阅以下文档。
 
  • Dialogue-PLATO项目地址:

    https://github.com/PaddlePaddle/Research/tree/master/NLP/Dialogue-PLATO

  • 飞桨开源框架项目地址:

    GitHub: https://github.com/PaddlePaddle/Paddle

    Gitee: https://gitee.com/paddlepaddle/Paddle