写点什么

BERT、RoBERTa、DistilBERT 与 XLNet,我们到底该如何选择?

  • 2019-10-26
  • 本文字数:2069 字

    阅读完需:约 7 分钟

BERT、RoBERTa、DistilBERT与XLNet,我们到底该如何选择?


谷歌 BERT 以及其它基于 transformer 的模型近来席卷整个 NLP 领域,并在多项任务当中全面超越原有最强技术方案。最近,谷歌又对 BERT 进行了多项改进,迎来一系列相当强势的提升。在本文中,我们将共同探讨各类 BERT 相关模型的相似与不同,希望帮助大家结合自身需求找到最理想的选项。

BERT

BERT 是一种双向 transformer,旨在利用大量未标记文本数据进行预训练,从而学习并掌握某种语言表达形式。更重要的是,这种表达形式还可以针对特定机器学习任务进行进一步调优。虽然 BERT 在多项任务中都带来了超越以往最强 NLP 技术的实际表现,但其性能的提升,主要还是归功于双向 transformer、掩蔽语言模型与下一结构预测(Next Structure Prediction),外加谷歌本身强大的数据资源与计算能力。


最近,NLP 业界又出现了多种旨在改进 BERT 预测指标或计算速度的新方法,但却始终难以同时达成这两大提升目标。其中 XLNet 与 RoBERTa 推动性能更上一层楼,而 DistilBERT 则改善了推理速度。下表为各种方法之间的特性比对:



BERT 及近期几种相关方法的改进效果比对: GPU 时间为估算值(使用 4 个 TPU Pod 进行周期为 4 天的初始训练);使用大量小批次数据,在较长的训练周期内,各方法的学习速度、步长以及掩蔽过程都有所不同; 除特殊说明,相关数据来自原始论文。

XLNet

XLNet 是一种大型双向 transformer,采用的是一种经过改进的训练方法。这种训练方法能够利用规模更大的数据集与更强的计算能力在 20 项语言任务中获得优于 BERT 的预测指标。


为了改进训练方法,XLNet 还引入了转换语言建模,其中所有标记都按照随机顺序进行预测。这就与 BERT 的掩蔽语言模型形成了鲜明对比。具体来讲,BERT 只预测文本中的掩蔽部分(占比仅为 15%)。这种方法也颠覆了传统语言模型当中,所有标记皆按顺序进行预测的惯例。新的方法帮助模型掌握了双向关系,从而更好地处理单词之间的关联与衔接方式。此外该方法还采用 Transformer XL 作为基础架构,以便在非排序训练场景下同样带来良好的性能表现。


XLMet 已经利用超过 130 GB 文本数据配合 512 块 TPU 芯片进行了两天半的训练,这两项指标在规模上都超过了 BERT。

RoBERTa

RoBERTa 是 Facebook 公司推出的,经过健壮性优化的 BERT 改进方案。从本质上讲,RobERTa 在 BERT 的基础上进行了再次训练,并在改善训练方法之余将数据总量与计算资源提升了 10 倍。


为了优化训练过程,RoBERTa 移除了 BERT 预训练中的下一语句预测(NSP)任务,转而采用动态掩蔽以实现训练轮次中的掩蔽标记变更。此外,Facebook 还证实,更大批准的训练规模确实能够提升模型性能。


更重要的是,RoBERTa 利用 160 GB 文本进行预训练,其中包括 16 GB 文本语料库以及 BERT 所使用的英文版维基百科。其余部分则包括 CommonCrawl News 数据集(包含 6300 万篇文章,总计 76 GB)、Web 文本语料库(38 GB)以及来自 Common Crawl 的故事素材(31 GB)。这一素材组合在 1024 个 V100 Tesla 上运行了整整一天,共同为 RoBERTa 提供了坚实的预训练基础。


如此一来,RoBERTa 在 GLUE 基准测试当中顺利带来优于 BERT 与 XLNet 的性能结果:



RoBERTa 性能比较结果。


在另一方面,为了缩短 BERT 及相关模型的计算(训练、预测)时长,合乎逻辑的尝试自然是选择规模较小的网络以获得类似的性能。目前的剪枝、蒸馏与量化方法都能实现这种效果,但也都会在一定程度上降低预测性能。

DistilBERT

DistilBERT 对 BERT 的一套蒸馏(近似)版本进行学习,性能可达 BERT 的约 95%,但所使用的参数总量仅为 BERT 的一半。具体来讲,DistilBERT 放弃了其中的标记类型与池化层,因此总层数仅相当于谷歌 BERT 的一半。DistilBER 采用了蒸馏技术,即利用多个较小的神经网络共同构成大型神经网络。其中的原理在于,如果要训练一套大型神经网络,不妨先利用小型神经网络预估其完整的输出分布。这种方式有点类似于后验近似。正因为存在这样的相似性,DistilBERT 自然也用到了贝叶斯统计中用于后验近似的关键优化函数之一——Kulback Leiber 散度。


备注:在贝叶斯统计中,我们趋近的是真实后验值(来自数据);但在蒸馏中,我们只能趋近由大型网络学习得出的后验值。

那么,到底该用哪种方法?

如果大家希望获得更快的推理速度,并能够接受在预测精度方面的一点点妥协,那么 DistilBERT 应该是最合适的选项。但是,如果各位高度关注预测性能,那么 Facebook 的 RoBERTa 无疑才是理想方案。


从理论角度看,XLNet 基于排序的训练方法应该能够更好地处理依赖关系,并有望在长期运行中带来更好的性能表现。


然而谷歌 BERT 本身已经拥有相当强大的基准性能,因此如果各位没有特别的需求,那么继续使用原始 BERT 模型也是个好主意。

总结

可以看到,大多数性能提升方式(包括 BERT 自身)都专注于增加数据量、计算能力或者训练过程。虽然这些方法确有价值,但往往要求我们在计算与预测性能之间做出权衡。目前,我们真正需要探索的,显然是如何利用更少的数据与计算资源,帮助模型实现性能提升。


原文链接:


https://towardsdatascience.com/bert-roberta-distilbert-xlnet-which-one-to-use-3d5ab82ba5f8


2019-10-26 14:337775

评论

发布
暂无评论
发现更多内容

腾讯大牛亲自带你学:Java安全weblogic T3协议漏洞!

比伯

Java 编程 架构 面试 计算机

程序员开发指南!1-3年的Android开发工程师看过来,经典好文

欢喜学安卓

android 程序员 面试 移动开发

ZooX首发双向电动无人车,会成为自动驾驶出行的主流吗?

脑极体

LeetCode题解:剑指 Offer 40. 最小的k个数,sort,JavaScript,详细注释

Lee Chen

算法 大前端 LeetCode

浅谈如何做客户端性能测试

行者AI

性能测试

3D 可视化突发公共卫生事件 ,防护效率高达90%

一只数据鲸鱼

疫情 物联网 数据可视化 数据监测 3D可视化

工具词典:精力管理

lidaobing

精力管理 张遇升 28天写作

Alibaba面试官:“这该死的程序员,知识竟如此渊博!”

Java架构之路

Java 程序员 架构 面试 编程语言

阿里P8大牛手把手教你!高级Android晋升之View渲染机制,先收藏了

欢喜学安卓

android 程序员 面试 移动开发

(经验分享)作为一名普通本科计算机专业学生,我大学四年到底走了多少弯路

Java鱼仔

Java 程序员 面试 大学生

创建493个测试账户,被公司索赔527万 | 法庭上的 CTO(14)

赵新龙

CTO 法庭上的CTO

这个问题值得讨论吗?

Alan

沟通 团队文化 七日更 28天写作

区块链食品溯源系统开发,农产品溯源小程序搭建

13530558032

ModelArts黑科技揭秘|弹性训练,让训练资源张弛有度

华为云开发者联盟

学习 华为云

圣诞狂欢,保险师APP赋能精细、个性化的运营服务

DT极客

混合用工、被拖欠工资的 CTO | 法庭上的 CTO(16)

赵新龙

CTO 法庭上的CTO

劫持Chrome浏览器“获利”8000万元 | 法庭上的CTO(13)

赵新龙

CTO 法庭上的CTO

“有点技术之外,基本什么都没有”的CTO | 法庭上的CTO(15)

赵新龙

CTO 法庭上的CTO

智慧平安小区整体解决方案,智慧社区管控系统开发

13530558032

第八课性能优化作业-判断合并链表

Geek_michael

极客大学架构师训练营

大佬带你看源码!阿里内部Android笔记火爆IT圈,3面直接拿到offer

欢喜学安卓

android 程序员 面试 移动开发

这份阿里P8级别内部疯传的“Linux私房菜”让你一次吃个饱

Java架构之路

Java 程序员 架构 面试 编程语言

为新基建按下加速键:从openEuler看中国操作系统的产业生态未来

脑极体

甲方日常 75

句子

工作 随笔杂谈 日常

大作业一

黄立

如何通过一个SDK轻松搞定人脸识别,拯救初入职场的程序猿

华为云开发者联盟

人脸识别 智能 识别

窝家恶补三月,字节跳动三面,终于喜提offer!分享面试感受

Java架构之路

Java 程序员 架构 面试 编程语言

字节面试坎坷之路,第一次二面凉了!捞起来之后一面就凉了;我太难了呀!

Java架构之路

Java 程序员 架构 面试 编程语言

CEG挖矿系统APP开发|CEG挖矿软件开发

系统开发

Java程序员晋升之路:“Java高级核心知识全面解析”

Java架构之路

Java 程序员 架构 面试 编程语言

业务架构设计迭代演进思路

程序员架构进阶

架构 中台 业务架构

BERT、RoBERTa、DistilBERT与XLNet,我们到底该如何选择?_语言 & 开发_Suleiman Khan_InfoQ精选文章