聚热点 juredian

​百度文心PLATO开放域对话技术及其应用

导读: 开放域对话技术是自然预处理领域极具挑战的人机对话技术,百度研发的文心PLATO是全球领先的开放域对话大模型,具备多轮流畅的聊天能力。本文将围绕以下几个方面展开介绍:

开放域对话技术介绍

文心PLATO技术介绍

文心PLATO应用介绍

01

开放域对话技术简介

先简单介绍下开放域对话技术。

开放域对话技术属于 人机对话 的一种。除了开放域对话,人机对话还包括面向任务的对话和问答对话。

面向任务的对话类似于订票、查天气等,这也是大家用得比较多的一种。

问答就是有明确的需求,用户直接询问系统找答案。

开放域对话与前面两者不同,前两者用户要么有明确的需求、要么有明确的场景。但开放域对话是在一个很开放的场景中进行拟人的对话,可以进行任意的对话。同时,要求对话系统有人设、有人格和情感。

开放域对话近几年的研究都是非常火热的,学术研究也增长得非常快。在工业界,开放域对话的需求也很旺盛。在当前智能音箱、智能屏等设备上都有开放域的对话需求,同时像虚拟人、虚拟助手都涉及到开放域对话技术。

开放域对话的 发展历程 可以划分为 三个阶段 :

第一阶段是专家系统阶段 。 这个阶段主要是通过专家设计对话的规则和脚本来构建对话系统 。比如,开放域最早的Eliza机器人是一个模拟心理咨询师的对话系统。它的策略其实是比较简单的,当机器人检测到关键词之后,回复专家设定好的回复。机器人的效果还是比较好的,当时很多心理咨询的患者都以为是在和真实的专家对话。在Eliza之后还有Alice和尤金.古斯特曼这类的对话系统。

第二阶段从2010开始,属于检索式对话系统,这是数据驱动的对话系统 。它通过检索排序的方式从语料库中找到用户当前输入比较匹配的回复。回复的内容都是在语料库中的,像小冰、度秘、Replika都属于这类系统。

第三阶段从2019年开始,开放域对话就不断诞生出了大规模神经网络模型生成对话回复技术 。通过大模型神经网络端到端的方式生成对话回复,如百度的PLATO、谷歌的Meena和Mata的Blender。这类技术的效果目前也是比较好的。

当然,目前大模型生成的方式在工业界落地还是相对比较少的。所以在工业界上比较主流的技术是检索排序和普通的生成的技术。接下来我会给大家介绍一下目前开放域中这两种主流的技术是如何实现的。

1. 检索技术原理

检索技术需要准备一个大的语料库。语料库中每个对话样本都有对话的输入,以及对话的输出。在线使用的时候,会基于用户query匹配或检索语料库中相似query,并把相似query的回复作为候选回复。再使用候选排序技术对候选话术进行排序,并输出回复。

因为检索技术的回复都是来自于语料库的回复,回复自身的流畅性是有保障的。但用query检索候选回复有时候不太适用。在对话场景中,不单要考虑当前的query,还需要完整的对话的上文。使用检索技术聊一两轮可能还可以。但在多轮对话中,检索回复可能会出现多轮不连贯、不流畅的问题。

2. 生成技术原理

在学术界,大家会去研究生成的技术。 检索技术 是一个pipeline的方式,先检索候选内容,再进行排序。生成式是端对端的技术,会将当前query的上文整体输入到模型输入端,模型经过编码、解码过程后输出回复。这种模型也需要语料库,但这类语料主要是用来离线训练的,训练模型学会根据输入生成对应回复的能力。这类模型一般分为两部分:编码器Encoder,负责将输入进行编码,将其表示成向量;之后再使用解码器Decoder解码,解码出回复中一个一个的词。生成技术是一个完全端到端的生成,它是从无到有的生成。也就是说,它可以生成一个语料库中没有的回复。如果模型学习得比较好,它可以根据任意上下文生成合适的回复,它的天花板比较高。

在早几年的时候,生成式的技术不成熟,生成式回复会出现一些安全回复(万能回复)的问题。因为生成模型学习到的是一些概率关系,生成万能回复的概率就会高一些。比如,不管用户输入什么内容,生成模型可能都会回复好啊、行啊、哈哈之类。

3. 开放域大对话大模型发展历程

从2019年起,大家就开始进入开放域对话大模型的研究,这个技术会使生成式对话有了质的提升。

百度PLATO最早在2019年10月份推出,当时还是一个规模不算很大的一亿参数的英文对话模型。在2019年11月,微软推出了DialogGPT。

2020年1月谷歌发布了Meena。Meena把对话大模型的参数推进到26亿,对话效果也得到质的提升,多轮对话也是比较流畅的。从这个时间节点开始,对话大模型的效果已经开始赶超检索的模型。

2020年4月,Meta推出了Blender,这个模型的参数规模达到了94亿。百度在2020年8月发布了PLATO-2的模型,首次发布了中文对话模型,当然也有英文对话模型。整个对话的参数不是很大,有16亿的参数,效果已经超过了竞品的水平。再之后,清华和智源一起发布了EVA中文对话模型,参数规模达到28亿。

2021年9月,百度发布了PLATO-XL,这是全球首个百亿参数的对话大模型。

2022年,谷歌英文对话模型LAMDA的模型参数又提升一个量级,达到1370亿。

--

02

文心PLATO技术介绍

接下来,介绍一下百度在开放域对话的技术,即文心PLATO。

这是百度文心PLATO研究的框架 。

PLATO是数据驱动的,在数据上我们做了大量的工作,包括构建大规模的预训练语料。此外,还人工建设了一些标注语料,同时引入了知识数据和各类服务API。在技术研发上, 我们建设了三个预训练对话模型,即:PLATO、PLATO-2、PLATO-XL 。在预训练模型之上,我们对对话能力进行增强,让对话具有人格属性,包括人设稳定性、知识增强、跨模态对话、情感抚慰、主动对话、长期记忆等。同时,我们也将对话能力应用到百度的各个产品线,比如:小度聊天,百度推出的虚拟人对话,领域对话。除了在公司内使用,我们也通过UNIT平台,对外输出对话技术。

接下来重点介绍百度的PLATO技术。首先,介绍一下 PLATO在预训练模型上的技术。

2019年,我们首次发布了PLATO对话模型。在这个模型中, 我们创新性地提出了“隐变量”这个概念。

开放型对话具有一对多的特点,用户输入query后,系统可以有多种多样的回复。每个回复有不同的性质,比如,输入“我得健身了,不能放纵了”。可以给用户建议、询问、质询、质疑等类型的回复。除了这种关系外,还会有对话背后的场景信息,这会导致开放型对话一对多的关系,这会导致模型学习很困难。如果针对一个输入,有特定的输出,模型的学习会相对简单。但当模型的输出不确定,甚至有多种多样的输出,这就会导致模型学习复杂。

针对这一问题, 我们提出隐变量建模输入和输出的映射信息 。它不是一个显式的建模,而是一个隐式建模输入和每一个输出的对应关系。这就会让原来的输入和输出一对多的关系,转化为一对一的关系。我们通过在输入增加soft token的方式,让transformer建立输入和输出之间的关系。Transformer不是独立的编码器和解码器的方式,我们选择了使用编码器和解码器共享参数的方式来实现即unified transformer。

第一阶段,先根据输入和输出预测隐变量的分布。

第二阶段,从分布中采样隐变量,将其加入输入中再去学习根据隐变量和输入预测回答的能力。这是PLATO隐变量的概念。

在此之后,我们推出PLATO-2,将模型参数量级推进到16亿。模型有32层参数,也发布了中文对话模型。PLATO-2是在10亿量级的人类对话样本中进行训练的,对话样本是从百度产品线的业务数据自动挖掘的。在该模型中,我们对训练方式也进行了优化。

带隐变量的学习复杂度还是比较高的,我们将训练过程分为两个阶段。

第一阶段,不带隐变量,直接根据输入去学习输出。

第二阶段,加入隐变量进行学习,训练生成模型。同时,在模型中训练了一个评估模型。通过生成模型生成的是多个候选回复,使用评估模型对多个候选回复进行排序,最终得到输出。

在2021年,我们将模型的规模推进至110亿,这个模型有72层。 除了模型规模的扩大,我们也引入了role embedding的特征来感知角色信息。 因为在对话上文中,既有用户的输入,也有系统的输入。我们在role embedding中区分用户和系统的角色。在原有transformer模型三个特征,token、sentence type、position的基础上,我们新增了role embedding的信息。这会让模型更好的掌控角色。

这些模型的效果如何? 我们对比了PLATO和外部的竞品,在开放域多轮聊天上进行效果对比,上图左侧图片为竞品case,在多轮聊天中出现了几个尬聊的场景。一两轮聊得还可以,但多轮就有点尬。上图中间图片为百度PLATO的多轮聊天效果,可以看到PLATO在多轮聊天的流畅性表现就会更好一些,多轮聊天的时候还是很流畅,很自然的,感觉是在和真人聊天一样。

我们也做了一些 量化的测评 。比如,在中文开放域聊天上,在几十个对话话题中找数据专员进行人机多轮对话(八轮以上),对比百度和竞品的效果。我们对比了对话合理性、丰富度和吸引度几个维度,其中,红色是百度PLATO的表现。可以看到PLATO比竞品的表现是好很多的。我们也在英文数据上进行评估,百度PLATO也会比竞品的效果更好一些。

前面介绍了百度几个预训练模型的实现方式以及效果。我们也发现,虽然大参数训练模型可以和用户进行多轮流畅的对话,但还是存在几个方面的问题。接下来介绍一下PLATO模型目前存在的挑战,这也是开放域大模型普遍存在的挑战。

1. PLATO挑战一:人设稳定性及定制化

第一个挑战是人设稳定性及定制化。

上图左侧是PLATO预训练模型的效果。可以看到在姓名上系统的回复非常不稳定,一会叫陈二狗、一会叫小雅、一会姓刘。学校和专业的信息也是非常不稳定的。可以看到人设非常不稳定,这也是目前普遍存在的问题。

同时如果将开放域对话大模型用于特定虚拟人、语音助手场景时,虚拟人或语音助手是要有特定的人设的。比如,叫什么、年龄多大、职业是什么。我们希望虚拟人对话内容和设定的人设保持一致。

同时,我们也希望人设可以定制化设定。比如,PLATO模型会用在不同的虚拟人身上,这些虚拟人都有自己的人设。我们不希望针对不同的人设训练不同的模型,我们希望一个模型可以支持不同的人设设定。在完成设定后,虚拟人就可以按照设定进行对话了。这就是人设定制化的需求。

百度在人设稳定性上研究的时间比较长,我们最近找到了一个比较合适的解决方案。我们先在预训练模型上增加画像信息,但因为预训练模型有十亿量级,给全部对话增加所有可能维度的画像信息难度比较大,所以我们只增加了五个维度的画像信息。之后,对对话大模型进行预训练。训练完成后,对话大模型就具备了使用用户画像信息的能力。

预训练只见过五个画像维度的信息,而实际业务有更多的画像维度,这块应该怎么解决?

我们在推理或预测的时候采用了in-context prompting的方式解决 。 把名字、爱好等设定的画像信息转化为问答对的形式,把问答对作为对话上文的一部分。 这样模型在回复的时候,就可以很好的保持与之前设定人设一致的能力。

我们针对14个画像维度在测试数据集测试,画像问答准确率可以从预训练之前的15%提升至93%。 考虑到对话模型不单用户问问题的时候会提到画像信息,在普通聊天的时候也会提到画像信息 。因此,我们对聊天时的画像一致性进行了测试。我们在多轮对话的测试集测试画像信息的一致性,准确率从45%提升至85%。整个模型的效果提升是非常明显的,这部分的工作我们也在进一步的整理中,后续也会对外发布。

这种方式可以使画像支持定制并保持回复与画像一致的能力。但人设不止是画像的信息,可能还涉及到对话风格、三观。这些还是目前面临的具有挑战性的问题,也是我们后续的研究点。

2. PLATO挑战二:长期记忆

第二个挑战是长期记忆。

在对话的过程中,用户真实使用时会分多次和对话系统进行聊天。比如,第一次和用户聊天,系统询问用户姓名,用户说自己叫小张。系统可以继续询问用户的工作等其它信息。但当用户第二次使用对话系统,系统就不能再次询问用户的姓名、工作。更合理的方式是,系统知道用户的姓名,直接问好。比如,系统对用户说,小张你好。这就是我们希望系统具有的长期记忆能力,系统能够记住用户对话的历史。

左侧图片我们线上公众号的一个真实的case。系统会反复询问用户叫什么名字。当然系统的问法会有一些差别。比如,用户和系统聊了两百多轮对话。在这两百多轮对话中,系统问了用户好多次名字的信息。

比较合适的长期记忆的能力应该如右图所示的场景。比如,用户和系统聊天的时候告诉系统自己有个小狗叫贝贝。再过两天用户提到贝贝生病了,此时系统应该回复用户带狗狗去宠物医院,而不是询问贝贝是谁。过几天之后,系统应该询问贝贝生病好了没,对用户展示关心,让用户觉得很亲切;而不是询问用户是否有宠物,让用户感觉系统很不智能,明明之前已经告诉机器人自己有宠物狗。

我们认为在聊天中,用户相关的画像信息是最重要的,如:姓名、性别、爱好、年龄等信息。 通过画像提取的方式,将用户和系统的画像进行提取,并将其写入到记忆库中。 记忆库可以对用户和系统的画像信息进行存储。在对话的时候,可以根据对话的上下文从记忆库取出和当前上下文相关的画像信息。记忆库中可能有成百上千的画像,不可能将记忆库所有画像都加入对话模型中,因此 我们将对话上下文相关的画像信息提取出来作为对话模型的输入,PLATO模型再根据输入信息输出合适的回复。

这种方式的可解释性比较高,可控性也比较强。但对于模型来说,要记录的不仅仅是画像信息,像用户的经历、用户的观点信息也是需要记录的,这也是长期记忆中需要去记录和研究的问题。我们下一步也会在这部分继续研究。刚才提到的成果也已经发布到今年的ACL会议。

刚提到为了对长期记忆进行技术研发,我们也建设了相应数据集 。这个数据集除了有对话数据之外,我们也设定了机器人自身的画像和用户的画像。我们会将用户的一部分画像作为机器人的已知输入。在用户侧,用户有的信息是已经告诉机器人的,有的数据是没有告知机器的。我们让标注员模拟机器人的角色,根据已知的信息和用户对话。我们大概有两万多组的对话数据。这个数据集叫DuLemon。这和论文是同时发布的。

3. PLATO挑战三:知识准确性和丰富性

第三个挑战是知识的准确性和丰富性。

预训练预料中的知识是比较稀疏的,我们从网上、论坛挖掘的人-人的对话语料很少提到知识信息,对话模型学习到的知识也不够准确,回复的内容也不够丰富。比如,左图中用户问唐朝的第一个皇帝是谁,机器人的回答就张冠李戴。

除了回答不准确之外,因为对话语料好多都是好几年以前的数据,对话也会缺乏实效性。比如,在新冠对话时,对话语料压根不知道新冠这件事,也不能做出回答。

我们认为在互联网上有海量的服务型的资源,如:知识问答、天气查询等。这些背后都蕴含着大量的知识,这些知识的时效性和准确性也是可以得到保障的。我们希望将这些知识应用到对话模型中。

我们通过检索的方式去请求服务资源。 模型根据对话上文生成查询query,再在建设好的查询API服务中检索对应的知识。目前的API中集成百度语义检索接口和DuerOS接口,根据接口查询出的服务型的资源会输入到PLATO模型中,进而生成回复。即先生成query,再检索知识,再引入到模型生成回复的解决方案。其实Mata在Blender中也提到这个概念——Wizard of Internet,先通过query去互联网检索知识,后应用到模型中。但他们是使用query去搜索引擎检索文档,检索文档的数量比较多,文档正文也比较长,这会让模型学习起来更加困难。 我们的解决方案不是引入完整的文档信息,我们通过服务API的形式检索服务,获得比较准确的信息,这样模型学习起来也更容易。我们将这部分工作叫做PALTO-SINC。

我们先用PLATO模型根据 Context、User 的信息,以及Query生成的控制标签生成查询Query。其中用户在查天气、附近景点时会用到位置信息,因此将位置信息同步引入。接下来,再用query去检索API进行知识检索,将得到的知识补充到PLATO模型的输入中,模型基于知识输入和对话上文生成对应的回复并输出。 其中,回复生成模型和query生成模型的参数是共享的。这就是PLATO-SINC模型的架构。

我们也建设了相应的数据集,我们在自建的标注工具上人工标注了大量的数据。 我们让标注人员模拟系统的角色,模拟系统角色的标注员回复时候会思考该用怎样的query,再用query去知识检索API检索,记录相应的信息并将其作为训练语料。这部分数据我们目前还在持续建设中,大概有1万多组的对话,包含3万query,涉及到2600多个话题。这部分工作我们也会很快发布出来。

这是PLATO人机对话真实的case。假设用户在百度科技园,用户询问:现在几点了?以前任务型的回复是非常生硬的方式回答现在几点了。但我们会通过查询query检索相应的信息,给用户回复当前的时间并对用户表示关心,这会显得更加的拟人化。这样不仅回复了知识,对话也更加流畅。比如,用户要推荐吃的,我们会在API中查询附近有什么好吃的query并将结果回复给用户。又比如,用户询问最近好看的电视剧时给用户回复最新时效的电视剧;并在用户提及自己喜欢刘亦菲的时候为用户检索刘亦菲电视剧相关的内容给用户回复。整个对话过程包含个性化、时效性以及主动为用户进行知识查询,整个对话知识丰富性和流畅性也会更好。

4. PLATO挑战四:主动对话-DuConv数据集

目前对话系统的主动性不是很强,大部分是用户说一句系统回答一句,对话的主动性不是很强。我们之前也研究了主动对话的能力, 发布了DuConv的数据集。我们给系统设定好要聊的路径,比如从开始、到某个电影、再到导演,也会给系统提供路径中的实体涉及到的图谱的知识,让系统主动和用户发起对话 。目前数据集已经对外发布了。

5. PLATO挑战五:PLATO其它挑战

除了刚才的挑战,对话系统还面临一些 其它的挑战 。

在情感抚慰维度 ,用户说自己不开心时,目前可能会回复:你有啥不开心的,说出来让我开心开心。我们认为这种回答不是很合适。我们希望在用户情绪不是很好的时候可以和用户共情,给用户一些情感抚慰,让用户情绪得到缓解。

此外,因为 对话没有时间的输入 。系统感知不到时间信息,就会导致回复的时间不对。如,中秋节时系统回复情人节,或晚上了回复用户早上好。

另外,目前对话是端到端的生成, 如何将回复控制在合适的范围内也是一个比较大的挑战。 目前系统从大语料中学习了一些要地址和要微信的信息,在人与人对话时这是很合理的交互,但在人和机器对话时这就很不合适。

以上是目前面临的挑战,我们也会持续地进行研究。

--

03

文心PLATO应用介绍

下面简单介绍下PLATO的应用。

PLATO目前在小度聊天上已经上线使用了,主要用在小度的沉浸式聊天场景中 。比如,和小度说我们聊聊天吧,就会触发PLATO对话的能力。现在主要在智能屏上,系统将用户的语音信息转化为文本并输入到PLATO,获取对应的输出并返回给智能屏。

此外, 百度输入法做了一个AI侃侃的虚拟人对话。 目前虚拟人对话有林开开和叶悠悠两个虚拟人。我们也通过PLATO去提供虚拟人的对话能力。在这个场景中建设了不同对话能力相关的语料,如情感抚慰、长期对话、话题对话以及风格对话,进而定制化训练PLATO模型。这个模型也会被用到两个虚拟人身上。

我们将PLATO的百亿模型上线到微信公众号了 ,大家可以直接体验我们的对话能力。这个是PLATO-XL的百亿模型,像刚提到人设稳定、知识对话等的挑战性的问题的解决方案目前还没有上线,我们会持续进行上线。

如果想直接使用我们的API,可以在百度UNIT平台申请聊天技能,我们提供了多轮版和多轮体验版的对话能力,大家可以通过API接入将对话能力在自己的产品中使用。

--

04

Q&A环节

Q1:中文模型有可能开源吗?

A1:我们的数据来源于网上用户真实的对话数据,有很多隐私相关的问题,目前暂时不方便直接开源。我们后续会想一些别的办法,让大家使用到这个模型。

Q2:PLATO-XL为啥去掉了隐变量?这会损失一对多的效果吗?

A2:隐变量在大模型中训练时会比较困难和复杂,代价也比较高。因此我们在PLATO-XL中我们暂时去掉了隐变量,这样一方面可以节约训练资源,另一方面也可以加快训练的速度。

去掉隐变量会对效果有一些损失。但我们发现随着规模的的增大,影响会越来越小,这部分我们还在持续验证中。

Q3:数据有多大的量级,如何获取的?

A3:中文数据有12亿对话样本。这个是从百度业务数据自动构建出来的。

Q4:PLATO迭代的时候会关注哪些自动的评估指标?

A4:开放域对话效果评估依然是比较有挑战的问题。在研发的过程中,我们会首先用ppl指标看模型是否收敛。模型收敛之后我们会去看模型的blue值、F1值以及distinct值去看模型的效果。但更重要的还是人工评估,我们从回复的合理性、信息丰富度和回复吸引度几个维度进行人工评估,进而确定对话模型的效果。最关键的还是人工评估的效果。

Q5:PLATO的回复都是好几个句子,不是简单的短回复。想问下PLATO如何做到回答的信息量比较足,且可以反问用户问题的?

A5:在对话语料构建时,我们删除了比较高频的回复。我们认为对话语料中出现频次在100次以上的回复属于万能回复,会将这部分数据从语料中去除,所以模型就不会学到这种比较短的回复。

Q6:PLATO-XL去掉了评估模块吗?

A6:是的,PLATO-XL去掉了隐变量。评估模块主要是针对隐变量的,在推理的时候设定不同的隐变量生成对应的回复,再使用评估模块去评估回复的质量。在PLATO-XL中,没有隐变量,因此也没用评估模块。

Q7:小度的闲聊模块是生成式的吗?如何解决QPS的问题?

A7:小度是接入PLATO的,是生成式的。

小度上有多个版本的使用:普通的闲聊不是沉浸式聊天是使用了检索式的方式来解决;沉浸式聊天中,我们接入了PLATO模型,但因为一些原因我们暂时先下线了,很快会上线。后续在小度智能屏上体会的聊天基本就是PLATO的对话效果。

刚提到的QPS的模型,PLATO大模型的QPS比较低、延时比较高,我们使用了一些萃取、底层算子融合的策略,对对话模型的推理速度进行加速。同时,我们也将模型适用到计算成本比较低的百度自研的昆仑芯片上,使得大模型能够在小度这种吞吐量比较高的产品上线。

实际应用中也会有一些比如小度人设的问题,这些问题是相对收敛的,所以在应用中,小度的闲聊也会分层。这也会解决部分比较高频的QPS的问题,比如:问小度几岁了,我们有系统通用的类似用户画像的解决方案,这会cover住比较高频的问题。

Q8:同一个问题会得到不同的回复,这是什么策略保障的?

A8:我们在解码的时候会使用top-k sampling的策略。策略会对每个step从预测概率中采样回复,每次采样时会随机采样,这就可以保证每次生成的回复是不一样的。

Q9:谷歌的LAMDA模型引入和同理心、敏感等,PLATO有相关的探索吗?

A9:我们会做情感陪伴的聊天,希望在用户有负向情绪时,系统可以和用户产生有共情的对话。

Q10:微信公众号或系统中除了生成模型,会用到预处理或后处理的模块吗?

A10:目前是端到端的模型,没有预处理的过程,唯一的预处理是提前做分词。后处理会去做去重,检测生成的回复和之前的历史对话是否有重复。

今天的分享就到这里,谢谢大家。

分享嘉宾:吴文权 百度 主任研发架构师

编辑整理:田育珍 搜狗

出品平台:DataFunTalk

01/ 分享嘉宾

吴文权| 百度 主任研发架构师

吴文权,计算机硕士研究生,13年入职百度自然语言处理部,致力于开放域对话前瞻技术研发和应用,曾获百度最高奖。

02/ 关于我们

DataFun: 专注于大数据、人工智能技术应用的分享与交流。发起于2017年,在北京、上海、深圳、杭州等城市举办超过100+线下和100+线上沙龙、论坛及峰会,已邀请超过2000位专家和学者参与分享。其公众号 DataFunTalk 累计生产原创文章800+,百万+阅读,15万+精准粉丝。

搜索建议: