AICon上海|与字节、阿里、腾讯等企业共同探索Agent 时代的落地应用 了解详情
写点什么

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:337834

评论

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

【性能优化实战】Android架构组件Room功能详解

欢喜学安卓

android 程序员 面试 移动开发

android 工作资料!职场中的中年危机

欢喜学安卓

android 程序员 面试 移动开发

立体车库数据管理被卡脖子?织信车库管理系统全面掌控车辆新状况

优秀

低代码

当企业遭遇分布式拒绝服务 (DDoS) 攻击时,第一时间该如何进行操作?

九河云安全

下一个颠覆的领域:区块链如何影响审计行业?(下)

CECBC

双非本化学跨专业,投岗阿里/滴滴后端三面,最终拿下offer

编程菌

Java 编程 程序员 面试 计算机

面试官:你了解JVM的锁优化吗?

百度开发者中心

Java 最佳实践 方法论 语言 & 开发

体验有奖 | 1 分钟 Serverless 部署掌上游戏机,“一行命令”找回小时候的乐趣!

Serverless Devs

态势感知一屏可视:数治安全,智理未来

一只数据鲸鱼

网络安全 数据可视化 数据监测 数字孪生

24岁,月薪35k!全靠这份阿里P5-P9知识核心手册+10W字面试题总结

Java架构追梦

Java 阿里巴巴 架构 面试

如何用EasyRecovery恢复U盘内损坏的数据

淋雨

文件恢复 硬盘数据恢复 Easyrecivery

FastApi-04-请求体-1

Python研究所

FastApi 8月日更

频繁出现的分布式拒绝服务 (DDoS) 攻击​,有什么办法可以抵御吗?

九河云安全

关于Spring注解开发教程,打包全送你

华为云开发者联盟

Java spring 容器 注解 组件

区块链技术如何有效应对气候变化

CECBC

分布式拒绝服务 (DDoS) 攻击对企业运维造成的影响分析

九河云安全

ironSource 在 2021 ChinaJoy 举办多场活动赋能中国开发者

从河南暴雨、疫情反弹看区块链“灾疫”治理

CECBC

「跨链网关的模块化进程」插件机制演化

趣链科技

FIL分币系统源码|分销商城功能开发模式介绍

Geek_23f0c3

fil Fil算力挖矿分币系统 Filecoin分销商城

DataPipeline荣膺CFS第十届财经峰会“2021数字化转型推动力奖”

DataPipeline数见科技

大数据 数据融合 数据管理

基于 Apache APISIX,新浪微博API网关的定制化开发之路

API7.ai 技术团队

Apache 网关 APISIX 微博

gitlab无法通过ssh拉代码

阿呆

#GitLab

【秋招面试专题解析】成功入职头条月薪35K

欢喜学安卓

android 程序员 面试 移动开发

迅捷录屏大师 Tech Support

凌天一击

你使用的SimpleDateFormat类还安全吗?

华为云开发者联盟

Java 安全 线程 高并发 SimpleDateFormat类

啃书一年多的我,推荐Python初学者不要在乱看书了,有这三本就妥妥的

冇先生

【吐血整理】大牛耗时一年最佳总结,让你的app体验更丝滑

欢喜学安卓

android 程序员 面试 移动开发

TRTC代码示例文档集合完毕!哪里不会点哪里!

腾讯云音视频

腾讯云 音视频 API sdk

编译脚本:编写CMakeFile(一)

正向成长

CMakeFile

Linux 网络管理技术 OSI 七层模型和 TCP/IP 四层模型

学神来啦

Linux 运维 IP

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