作者 | 高斯定理

欢迎关注知乎"高斯定理"和他的专栏专栏"边走边看"

整理 | NewBeeNLP

前段时间有读者留言『怎么看最近的platoxl』,那么就 安!排!

PLATO是百度Siqi Bao等人在2020年-2021年针对NLP对话领域提出的一系列预训练模型,具体包括PLATO,PLATO-2,PLATO-XL,前两篇分别发表在ACL2020和ACL-IJCNLP2021,PLATO-XL则是今年9月在arxiv上预印。

大规模预训练模型BERT、XLNet等在大量的广泛语料上训练,在下游任务上取得了突破性的进展,其证明了预训练—微调框架的有效性。

但是在对话系统上,由于对话语料不同于常规语料,缺少这样大规模的预训练模型。因此PLATO系列利用了大规模的对话语料,对对话系统进行训练,从PLATO到PLATO-XL,用的数据越来越多,模型大小也越来越大。之前开放PLATO的微信体验机器人,也着实让它又火了一遍。

那么本文就来梳理下PLATO家族,具体涉及到的文章链接如下:

  • PLATO: Pre-trained Dialogue Generation Model with Discrete Latent Variable[1]

  • PLATO-2: Towards Building an Open-Domain Chatbot via Curriculum Learning[2]

  • PLATO-XL: Exploring the Large-scale Pre-training of Dialogue Generation[3]

PLATO系列也在github上开源了,只不过用的是paddlepaddle

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

  • https://github.com/PaddlePaddle/Knover/tree/develop/projects/PLATO-2

PS:我始终没找到为什么这个模型叫PLATO,因为它说话像哲学家?

PLATO家族概览

想了一下,先把三个模型的概览给放在这儿,让大家看起来更方便一些:M=10^6, B=10^9

模型 语言 模型大小 语料量
PLATO 英文 132M 8.3M
PLATO-2 英文 1.6B 684M
PLATO-2 中文 1.6B 1.2B
PLATO-XL 英文 11B 811M
PLATO-XL 中文 11B 1.2B

一、PLATO

三个动机与对应方案:

对话文本和广义文本的不同

一方面用BERT进行初始化;另一方面,没啥好说的,利用了大量Reddit和Twitter的数据,来做对话的文本,进行第二次的训练

对话文本理解的模式

对方的文本是完全可见的(可以用双向模型建模),要回答的文本时单向生成的(用单向模型建模)。因此采用了Unified Language Model的形式,具体如下图中的Seq-to-Seq LM:

即seg1能看见seg1的所有,不能看见seg2;seg2能看见seg1的所有,能单向看见自己的历史。这样做就能完全利用对方的文本,并单向生成自己的文本。

PS:有兴趣的小伙伴可以参考unified LM原文

  • Unified Language Model Pre-training for Natural Language Understanding and Generation[4]

一对多映射

对话本来就没有标准的回答,需要个性化。如果不进行个性化的后果是,回答没有任何信息量,让人没有交谈的兴趣。这个我的理解是不个性化,网络学到的就是一种平均的表达,他把不同人都会表达的意思表达了,但是十分无聊。

一对多映射也是作者本文的重点。作者首先指明对话中的三要素:对话内容(dialogue context)、回应(response)和隐变量。其中隐变量建模成一个K维的类别向量。这三要素之间是什么关系呢,下面这张图做了说明:

对话内容和回应能够反映隐变量,对话内容和隐变量能够决定生成的回应。这就像讲相声,郭德纲先说了一段,要是你听到后一段的内容,根据风格就能猜出这搭档是谁,要是你知道搭档是谁,那也能做好心理准备接下来的内容是什么风格。所以啊,这又是一个鸡生蛋蛋生鸡的故事。针对这种问题,其实也没什么好的解决方案,作者采用的方法就是在一个batch上跑3遍(OMG!),如下图

第一遍用正确的回答生成隐变量的概率(图片右下角);

第二遍随机采样一个非本对话内容的回答,和第一遍的比较去训练一个回答比较器(RS)(图片右下角),让其发现第一遍的回答优于第二遍,损失函数为基于交叉熵的损失;

第三遍再用隐变量的概率采样得到隐变量让后生成回答,与原回答比较计算基于自回归的损失函数NLL和非自回归损失函数BOW。

<

作者在8张V100上训练了3.5M步(一般实验室还支撑的起)。

在推断时,对每一个隐表达进行推断,然后用回答比较器判断哪一个回答最优。

模型输入

额外提一嘴模型的输入包括

  1. Token embedding:BPE高维表达

  2. 位置编码:基于attention模型的常规操作了

  3. 角色embedding:response为用户A,进行用户A和B的轮流对话

  4. 轮数embedding:response序号为0,每进行一次交替-1

在我看来角色embedding和轮数embedding有点像,作者也在不断调整,PLATO-XL输入就发生了相应的变化。

实验结果

作者分别在三个下游数据集上进行了finetune并测试。这三个数据集分别为

  1. Persona-Chat:个性化对话,额外包括用户的信息

  2. Daily Dialog:人类日常对话

  3. DSTC7-AVSD:视频问答,作者只用了文本模态

实验结果如下图所示

提一个我观察到的比较有趣的现象。不使用隐变量(Our w/o Latent)其实在BLEU上表现更好(也就是与“正确”回答更像),但是多样性也差很多(Distinct-1/2)。这样看来,用隐变量的方法达到了目标,回答更加有个性了,但是也牺牲了BLUE的性能。

二、PLATO-2

动机与方案

PLATO-2相比于PLATO主要想解决的问题是在更大规模的预料上(684M vs. 8M)训练更大规模的网络(作者分别整了1.6B、314M、93M vs 132M的模型)。

值得注意的是PLATO中作者是用BERT进行模型初始化的,而这篇文章没有提及,我默认他是从头开始训练(看了一下代码,应该确实没有)。没有采用BERT进行初始化+更大的模型增大了模型训练的难度。因此作者采用了课程学习的思路(Curriculum Learning),先不采用隐变量,进行one-to-one的粗训练,然后再接上隐变量进行精细化训练,第二阶段的训练方法基本和PLATO一致。

实验结果

主要的实验结果在下面两张表格中

这里作者采用了人工打分(Human Evaluation)和自动多样性打分(Distinct-1/2)。表格1的self-chat是自己和自己对话,结果主要有三件事:

  • 模型越大,效果越好

  • 相同大小的PLATO,因为课程学习也会越好

  • 相同大小的模型,因为PLATO-2采用了隐变量会更好

表格2中自动多样性打分劣于小冰的原因作者解释为:小冰可以进行检索得到更多丰富的内容。

作者参加了DSTC9这个比赛(2021年),在三个赛道上都取得了第一名的成绩。

实验分析

作者在这里额外对回答选择模块(response selection)进行了对比实验,结果如下图

表格中三行的结果分别是前向、后向和选择打分相比于人工打分的不同准确率,可以看到选择打分的优势十分明显。

三、PLATO-XL

动机与方案

PLATO-XL相比于PLATO-2,数据更多(811M vs. 684M),模型更大(11B vs. 1.6B)。作者在这篇文章里返璞归真,抛弃了之前的隐变量和课程学习的方法,直接训练。只不过在训练时加入了Multi-Party Aware Pre-training

如果大家还有印象的话,在PLATO中,除了token embedding和positional embedding,作者还采用了role embedding(角色表达)和turn embedding(轮数表达)。

而Multi-Party Aware Pre-training中的Role embedding可不像PLATO中只有A和B,因为从Reddit上爬取的数据不可避免地会存在多个用户对同一个对话地回应。

如上图右所示,Role embedding让response编码成角色A,从右到左地新角色依次为B、C、D。Type embedding则是对context和response进行了编码。

实验结果

结果上依然和之前的PLATO-2进行了对比,

看来隐变量这些方法在大规模数据上也被超越了(笑。而且作者和商业引擎进行了对比,

这个才是最强的地方。分数时0-2分,可以看到很多指标要么接近于2,要么就接近于0了。作者在一些下游任务上也finetune后测试,也是取得了SOTA的结果。

四、总结

三个模型各自的亮点:

  • PLATO:采用unified language modeling,通过离散隐分布(Discrete Latent Variable),预测回答和隐行为(latent act)

  • PLATO-2:利用课程学习,在大规模数据上训练

  • PLATO-XL:返璞归真,在输入采用多角色embedding(Multi-Party Aware Pre-training)

码字不易,欢迎点赞、收藏与交流探讨~

本文参考资料

[1]

PLATO: Pre-trained Dialogue Generation Model with Discrete Latent Variabl: https://aclanthology.org/2020.acl-main.9.pdf

[2]

PLATO-2: Towards Building an Open-Domain Chatbot via Curriculum Learning: https://aclanthology.org/2021.findings-acl.222.pdf

[3]

PLATO-XL: Exploring the Large-scale Pre-training of Dialogue Generation: https://arxiv.org/pdf/2109.09519.pdf

[4]

Unified Language Model Pre-training for Natural Language Understanding and Generation: https://arxiv.org/pdf/1905.03197.pdf

END -

高效深度学习:让模型更小、更快、更好!

2021-11-03

深度学习基础 | 超详细逐步图解 Transformer

2021-11-02

如何看待EMNLP2021 best paper?   邱锡鹏教授:以为走错会场了

2021-11-01

NLP 语义匹配:业务场景、数据集及比赛

2021-10-29

一文看懂!百度对话系统PLATO家族相关推荐

  1. 一文看懂百度云智峰会:发布两大中台、八大方案,落地细节精准到发丝

    晓查 发自 凹非寺  量子位 报道 | 公众号 QbitAI 在今年举办的百度云智峰会上,百度智能云迎来全新升级,领导团队首次集体亮相. 进入2020年,新冠疫情给经济生活带来深刻影响,新基建政策又给 ...

  2. 一文看懂推荐系统:Gate网络2:百度GemNN(Gating-Enhanced Multi-Task Neural Networks)

    一文看懂推荐系统:Gate网络2:百度GemNN(Gating-Enhanced Multi-Task Neural Networks) 提示:最近系统性地学习推荐系统的课程.我们以小红书的场景为例, ...

  3. 一文看懂深度学习——人工智能系列学习笔记

    深度学习有很好的表现,引领了第三次人工智能的浪潮.目前大部分表现优异的应用都用到了深度学习,大红大紫的 AlphaGo 就使用到了深度学习. 本文将详细的给大家介绍深度学习的基本概念.优缺点和主流的几 ...

  4. 怎么看电脑系统是win几_一文看懂arm架构和x86架构有什么区别

    一文看懂arm架构和x86架构有什么区别 本文主要介绍的是arm架构和x86架构的区别,首先介绍了ARM架构图,其次介绍了x86架构图,最后从性能.扩展能力.操作系统的兼容性.软件开发的方便性及可使用 ...

  5. 一文看懂推荐系统:概要01:推荐系统的基本概念

    一文看懂推荐系统:概要01:推荐系统的基本概念 提示:最近系统性地学习推荐系统的课程.我们以小红书的场景为例,讲工业界的推荐系统. 我只讲工业界实际有用的技术.说实话,工业界的技术远远领先学术界,在公 ...

  6. 一文看懂智慧城市,解码25万亿大市场的机遇与格局

    一文看懂智慧城市,解码25万亿大市场的机遇与格局 原创京东科技2020-09-16 20:13:55 撰文 / Jarvis 编辑 / 郭佳 今年初,随着国家发展改革委员会首度圈定"新基建& ...

  7. 干货|一文看懂什么是“非标资产”

    干货|一文看懂什么是"非标资产" 2017-05-19 18:56 监管/信托/资管 本文作者:中诚信托 一.非标资产的界定和范围 非标资产全称为非标准债权资产,是相对于标准化金融 ...

  8. 一文看懂推荐系统:物品冷启05:流量调控

    一文看懂推荐系统:物品冷启05:流量调控 提示:最近系统性地学习推荐系统的课程.我们以小红书的场景为例,讲工业界的推荐系统. 我只讲工业界实际有用的技术.说实话,工业界的技术远远领先学术界,在公开渠道 ...

  9. 一文看懂「生成对抗网络 - GAN」基本原理+10种典型算法+13种应用

    生成对抗网络 – Generative Adversarial Networks | GAN 文章目录 GAN的设计初衷 生成对抗网络 GAN 的基本原理 GAN的优缺点 10大典型的GAN算法 GA ...

最新文章

  1. leetcode算法题--可被三整除的最大和
  2. 【指标统计】根据遥控补全遥信
  3. 快准牌电脑发软件_这些软件,电脑安装了,办公清理都比别人快几倍~~
  4. Sprint2-2.0
  5. MySQL的行转列、列转行、连接字符串 concat、concat_ws、group_concat函数用法
  6. 协议簇:IPv4 解析
  7. docker的介绍和常用命令
  8. Python easy_insatll 安装包
  9. 启动服务提示-bash: mongod: command not found
  10. c#构造器的一点理解(三)
  11. [转]分析MySQL数据类型的长度【mysql数据字段 中length和decimals的作用!熟悉mysql必看】...
  12. python 实现的huffman 编码压缩,解码解压缩
  13. linux安装包安装nginx,Linux tar包安装Nginx
  14. Python 装逼手机号码方法 低配版 map方法解析
  15. 时间序列平稳性检验方法汇总
  16. 音频知识之OGG格式分析
  17. 2020华为海思的实习生面试记录(雨人)
  18. 谷歌/FOFA搜索引擎使用
  19. PAC学习理论:机器学习那些事
  20. 手动配置协议和服务器POP,在outlook上添加账户并介绍邮件协议相关知识

热门文章

  1. 颜色转换rgb24 to yuv420
  2. Android应用开发性能优化完全分析,移动应用开发课程报告
  3. ES6(ECMAScript6)-ES11 从入门到修仙
  4. zsh中git快捷键
  5. imx6ull驱动开发经验
  6. Elasticsearch:Ingest Pipeline 实践
  7. 暑假带娃出游该怎么玩?明星妈妈安娜分享夏日出游新启发
  8. 分布式文件存储FastDFS介绍安装部署及相关Java代码编写
  9. 直观理解线性插值(linear interpolation)和双线性插值(Bilinear interpolation)
  10. python怎样删除某一行_python删除某一行