吐槽贴:用ELECTRA、ALBERT之前,你真的了解它们吗?

文 | 苏剑林

单位 | 追一科技

编 | 兔子酱


在预训练语言模型中,ALBERT和ELECTRA算是继BERT之后的两个“后起之秀”。它们从不同的角度入手对BERT进行了改进,最终提升了效果(至少在不少公开评测数据集上是这样),因此也赢得了一定的口碑。

在平时的交流学习中,笔者发现不少朋友对这两个模型存在一些误解,以至于在使用过程中浪费了不必要的时间。在此,笔者试图对这两个模型的一些关键之处做下总结,供大家参考,希望大家能在使用这两个模型的时候少走一些弯路。

(注:本文中的“BERT”一词既指开始发布的BERT模型,也指后来的改进版RoBERTa,我们可以将BERT理解为没充分训练的RoBERTa,将RoBERTa理解为更充分训练的BERT。)

ALBERT

ALBERT来自论文《ALBERT: A Lite BERT for Self-supervised Learning of Language Representations》[1]。顾名思义它认为自己的特点就是Lite,那么这个Lite的具体含义是什么呢?不少国内朋友对ALBERT的印象是又小又快又好,事实真的如此吗?

特点

简单来说,ALBERT其实就是一个参数共享的BERT,相当于将函数改成了, 其中f代表模型的每一层,这样本来有n层参数,现在只有1层了,因此参数量大大减少,或者说保存下来的模型权重体积很小,这是Lite的第一个含义;然后,由于参数总量变少了,模型训练所需的时间和显存也会相应变小,这是Lite的第二个含义。此外,当模型很大时,参数共享将会是模型的一个很强的正则化手段,所以相比BERT没那么容易过拟合。这是ALBERT的亮点。

预测

要注意,我们没说到预测速度。很明显,在预测阶段参数共享不会带来加速,因为模型反正就是一步步前向计算,不会关心当前的参数跟过去的参数是否一样,而且就算一样也加速不了(因为输入也不一样了)。所以,同一规格的ALBERT和BERT预测速度是一样的,甚至真要较真的话,其实ALBERT应该更慢一些,因为ALBERT对Embedding层用了矩阵分解,这一步会带来额外的计算量,虽然这个计算量一般来说我们都感知不到。

训练

对于训练速度,虽然会有所提升,但是并没有想象中那么明显。参数量可以缩小到原来的1/n,并不意味着训练速度也提升为原来的n倍。在笔者之前的实验里边,base版本的ALBERT相比BERT-base,训练速度大概只是快10%~20%,显存的缩小幅度也类似。如果模型更小(tiny/small版),那么这个差距将会进一步缩小。换句话说,ALBERT的训练优势只有在大模型才明显,对于不大的模型,这个优势依然是难以有明显感知的。

效果

至于效果,其实ALBERT的原论文已经说得很清楚,如下表所示。

参数共享会限制模型的表达能力,因此ALBERT的xlarge版才能持平BERT的large版,而要稳定超过它则需要xxlarge版,换句话说,只要版本规格小于xlarge,那么同一规格的ALBERT效果都是不如BERT的。中文任务上的评测结果也是类似的,可以参考CLUE[2]和 追一的评测[3]。而且笔者之前还做过更极端的实验:加载ALBERT的权重,但是放开参数共享的约束,把ALBERT当BERT用,效果也会有提升!(参考《抛开约束,增强模型:一行代码提升albert表现》[4]。所以,小规格ALBERT不如BERT基本是实锤的了

结论

所以,总结出来的建议就是:

  • 如果不到xlarge版,那么没必要用ALBERT。

  • 同一速度的ALBERT效果比BERT差。

  • 同一效果的ALBERT速度比BERT慢。

现在BERT也都有tiny/small版了,比如我司开源的[5],基本上一样快而且效果更好,除非你是真的需要体积小这个特点。

那xlarge版是什么概念?有些读者还没尝试过BERT,因为机器跑不起来;多数读者显存有限,只跑过base版的BERT,没跑过或者跑不起large版的。而xlarge是比large更大的,对设备的要求更高,所以说白了,对于大部分读者来说都没必要用ALBERT的

那为什么会有ALBERT又快又好的说法传出来呢?除了一些自媒体的不规范宣传外,笔者想很大程度上是因为brightmart同学的推广了。

不得不说,brightmart同学为ALBERT在国内的普及做出来不可磨灭的贡献,早在ALBERT的英文版模型都还没放出来的时候,brightmart就训练并开源了ALBERT中文版albert_zh[6] ,并且还一鼓作气训练了tiny、small、base、large、xlarge多个版本,当时BERT就只有base和large版本,而ALBERT有tiny和small版本,大家一试发现确实比BERT快很多,所以不少人就留下了ALBERT很快的印象。事实上ALBERT很快跟ALBERT没什么关系,重点是tiny/small,对应的BERT tiny/small也很快...

当然,你可以去思考ALBERT参数共享起作用的更本质的原因,也可以去研究参数共享之后如何提高预测速度,这些都是很有价值的问题,只是不建议你用低于xlarge版本的ALBERT。

ELECTRA

ELECTRA来自论文《ELECTRA: Pre-training Text Encoders as Discriminators Rather Than Generators》[7]。说实话,ELECTRA真是一个一言难尽的模型,它刚出来的时候让很多人兴奋过,后来正式发布开源后又让很多人失望过,目前的实战表现虽然不能说差,却也不能说多好。

特点

ELECTRA的出发点是觉得BERT的MLM模型随机选择一部分Token进行Mask的这个操作过于简单了,想要增加一下它的难度。所以它借鉴了GAN的思想,用普通的方式训练一个MLM模型(生成器),然后根据MLM模型对输入句子进行采样替换,将处理后的句子输入到另外一个模型(判别器)中,判断句子哪些部分是被替换过的,哪些部分是被没被替换的。生成器和判别器是同步训练的,因此随着生成器的训练,判断难度会慢慢增加,直观想象有利于模型学到更有价值的内容。最后只保留判别器的Encoder来用,生成器一般就不要了。

由于这种渐进式的模式使得训练过程会更有针对性,所以ELECTRA的主要亮点是训练效率更高了,按照论文的说法能够用1/4的时间甚至更少来达到同样规格的BERT的效果,这是ELECTRA的主要亮点。

理论

然而,在笔者看来,ELECTRA是一个在理论上站不住脚的模型

为什么这样说呢?ELECTRA的思想源于GAN,但是在CV中,我们有把训练好的GAN模型的判别器拿来Finetune下游任务的例子吗?至少笔者没看到过。事实上,这是理论上不成立的,拿原始GAN来说,它的判别器最优解是 其中p(x),q(x)分别是真假样本的分布。假设训练是稳定的,并且生成器具有足够强的拟合能力,那么随着模型的训练,假样本会逐渐趋于真样本,所以q(x)趋于p(x),那么D(x)就趋于常数1/2。也就是说,理论上最后的判别器只是一个常值函数,你怎么能保证它提取出好的特征来呢?

虽然ELECTRA不完全是GAN,但在这一点上是一致的,所以ELECTRA强调作为生成器的MLM模型不能太过复杂(不然像上面说的判别器就退化为常数了),论文说是在生成器的大小在判别器的1/4到1/2之间效果是最好的。这就开始“玄学” 起来了,刚才我们只论证了太好不行,没法论证为什么差一点就行,也没法论证差多少才行,以及不清楚为什么生成器和判别器同步训练会更好,现在这些都变成了纯粹“炼丹”的东西了。

效果

当然,我说它理论上站不住脚,并不是说它效果不好,更不是说相关评测造假了。ELECTRA的效果还算过得去,只不过是让我们经历了一个“期望越大,失望越大”的过程罢了。

ELECTRA的论文首先出现在ICLR2020的投稿中,当时的结果让大家都很震惊,大概就是small版的ELECTRA模型远超small版的BERT,甚至直逼base版,而base版的ELECTRA达到了large版BERT的水平。结果当代码和权重放出后[8]上所显示的成绩却让人“大跌眼镜”——基本下降了2个百分点。后来作者出来澄清了,说论文上写的是dev集而Github上写的是test集,大家才稍微理解了一点,不过这样的话,ELECTRA相比BERT在效果上就变得没有什么亮点了。(参考《ELECTRA: 超越BERT, 19年最佳NLP预训练模型》[9]到《谈谈我对ELECTRA源码放出的看法》[10])

事实上,ELECTRA在中文任务上的评测更加准确地反映了这一点,比如哈工大开源的Chinese-ELECTRA[11]中,ELECTRA在各个任务上与同级别的BERT相差无几了,有个别任务有优势,但是并未出现那种“碾压式”的结果。

失彼

可能有读者会想,就算效果差不多,但人家预训练快了,好歹也是个优点嘛,这点确实不否认。但是这两天Arxiv的一篇新论文表明,ELECTRA的“效果差不多”可能只是在简单任务上的假象,如果构建复杂一点的任务,它还是会被BERT“吊打”。

这篇论文的名字是《Commonsense knowledge adversarial dataset that challenges ELECTRA》[12],作者基于SQuAD 2.0数据集用同义词替换的方式构建了一个新的数据集QADS,然后按照作者的测试,在SQuAD 2.0上能达到88%的ELECTRA large模型在QADS上只有22%了,而有意思的是BERT都能做到60%多。当然这篇论文看起来还很粗糙,还没得到权威肯定,所以也不能尽信,但其结果已经能引起我们对ELECTRA的反思了。之前论文《Probing Neural Network Comprehension of Natural Language Arguments》[13]的一个“not”就把BERT拉下了神坛,看来ELECTRA也会有这种问题,而且可能还更严重。

抛开其它证据不说,其实笔者觉得,ELECTRA最终抛弃了MLM本身就是一个“顾此失彼”的操作:你说你的出发点是MLM太简单,你就想办法提高MLM难度就是了,你把MLM换成判别器干嘛呢?直接用一个生成器网络来改进MLM模型(而不是将它换成判别器)是有可能,前段时间微软的论文《Variance-reduced Language Pretraining via a Mask Proposal Network》[14]就提供了这样的一种参考方案,它让生成器来选择要Mask掉的位置,而不是随机选,虽然我没有重复它的实验,但它的整个推理过程都让人觉得很有说服力,不像ELECTRA纯拍脑袋的感觉。此外,笔者还想再强调一下,MLM是很有用的,它不单单是以一个预训练任务,比如《必须要GPT3吗?不,BERT的MLM模型也能小样本学习》[15]

结论

所以,说了那么多,结论就是:ELECTRA的预训练速度是加快了,但从目前的实验来看,它相比同级别的BERT在下游任务上的效果并没有突出优势,可以试用,但是效果变差了也不用太失望。此外,如果你需要用到MLM部分的权重(比如用来做UniLM的文本生成,参考这里[16],那么也不能用ELECTRA,因为ELECTRA的主体是判别器,它不是MLM模型;而ELECTRA中作为生成器的MLM模型,则比判别器简化,可能存在拟合能力不足、学习不充分等问题,并不是一个很好的预训练MLM模型。

至于ELECTRA背后的思想,即针对MLM随机Mask这一步过于简单进行改进,目前看来方向是没有错误的,但是将生成式模型换成判别式模型的有效性依然还需要进一步验证,如果有兴趣深入分析的读者,倒是可以进一步思考研究。

文章小结

本文记录了笔者对ALBERT和ELECTRA的看法与思考,主要是综合笔者自己的一些实验结果,以及参考了一些参考文献,希望比较客观地表达清楚这两个模型的优缺点,让读者在做模型选择的时候心里更有底一些。这两个模型在特定的场景下都有其可取之处,但也存在一些限制,清楚这些限制及其来源有助于读者更好地使用这两个模型。

笔者没有刻意中伤某个模型的意思,如果有什么理解不当之处,欢迎大家留言讨论。

后台回复关键词【入群

加入卖萌屋NLP/IR/Rec与求职讨论群

有顶会审稿人、大厂研究员、知乎大V和妹纸

等你来撩哦~

参考文献

[1]ALBERT:https://arxiv.org/abs/1909.11942

[2]CLUE: https://github.com/CLUEbenchmark/CLUE

[3]追一评测: https://github.com/ZhuiyiTechnology/pretrained-models

[4]抛开约束,增强模型:一行代码提升albert表现》: https://spaces.ac.cn/archives/7187

[5]追一开源: https://github.com/ZhuiyiTechnology/pretrained-models

[6]albert_zh: https://github.com/bojone/albert_zh

[7]ELECTRA: https://arxiv.org/abs/2003.10555

[8]electra github: https://github.com/google-research/electra

[9]《ELECTRA: 超越BERT, 19年最佳NLP预训练模型》: https://zhuanlan.zhihu.com/p/89763176

[10]谈谈我对ELECTRA源码放出的看法》: https://zhuanlan.zhihu.com/p/112813856

[11]Chinese-ELECTRA: https://github.com/ymcui/Chinese-ELECTRA

[12]《Commonsense knowledge adversarial dataset that challenges ELECTRA》: https://arxiv.org/abs/2010.13049

[13]Probing Neural Network Comprehension of Natural Language Arguments》: https://arxiv.org/abs/1907.07355

[14]《Variance-reduced Language Pretraining via a Mask Proposal Network》: https://arxiv.org/abs/2008.05333

[15]必须要GPT3吗?不,BERT的MLM模型也能小样本学习》: https://spaces.ac.cn/archives/7764

[16]从语言模型到Seq2Seq:Transformer如戏,全靠Mask: https://spaces.ac.cn/archives/693

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/479780.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

LeetCode 56. 合并区间(优先队列)

文章目录1. 题目信息2. 解题2.1 报错的答案2.2 优先队列解题1. 题目信息 给出一个区间的集合,请合并所有重叠的区间。 示例 1:输入: [[1,3],[2,6],[8,10],[15,18]] 输出: [[1,6],[8,10],[15,18]] 解释: 区间 [1,3] 和 [2,6] 重叠, 将它们合并为 [1,6]. 示例 2:输入…

论文浅尝 | 基于复杂查询图编码的知识库问答

论文笔记整理:谭亦鸣,东南大学博士生,研究方向为知识库问答。来源:EMNLP 2018链接:https://www.aclweb.org/anthology/D18-1242文章表示,复杂问答所面对的问题往往包含多种实体和关系(来自知识库…

阿里Java架构师精通资料:性能优化+亿级并发架构汇总+架构选型

分布式并发架构 微服务、Docker容器的基本原理、架构设计,以及应用场景。 缓存:Redis、Memcached、CDN、本地缓存 搜索引擎的选型:Lucene、Solr等选型与比较 应用服务器雪崩:长事务、SQL超时、同步接口引起的雪崩场景&#xff…

Google Cloud TPUs支持Pytorch框架啦!

文 | Sherry在2019年PyTorch开发者大会上,Facebook,Google和Salesforce Research联合宣布启动PyTorch-TPU项目。项目的目标是在保持PyTorch的灵活性的同时让社区尽可能容易地利用云TPU提供的高性能计算。团队创建了PyTorch/XLA这个repo,它可以…

LeetCode 231. 2的幂 LeetCode 338. 比特位计数(2进制1的个数)

文章目录1. 题目信息2. 解题拓展:求一个数n的2进制有多少个1?LeetCode 3381. 题目信息 给定一个整数,编写一个函数来判断它是否是 2 的幂次方。 示例 1:输入: 1 输出: true 解释: 20 1 示例 2:输入: 16 输出: true 解释: 24 16 示例 3:输…

最全阿里架构师P系列解读:P5-P8的技能要求和薪资结构

2018年持续一整年的架构设计分享,2019年我希望持续分享的同时,能真正意义上帮助到部分读者成为一名架构师。 学习的同时请千万别:只见树木,不见森林。 所以我会让大家先俯瞰完整的森林,我们再从树木开始,…

NeurIPS’20 | 长尾问题太严重?半监督和自监督就可以有效缓解!

文 | Yuzhe Yang源 | 知乎来给大家介绍一下我们的最新工作,目前已被NeurIPS 2020接收:Rethinking the Value of Labels for Improving Class-Imbalanced Learning。这项工作主要研究一个经典而又非常实际且常见的问题:数据类别不平衡&#xf…

论文浅尝 | 知识图谱中的链接预测:一种基于层次约束的方法

论文笔记整理:张良,东南大学博士生,研究方向为知识图谱,自然语言处理。链接:https://ieeexplore.ieee.org/stamp/stamp.jsp?tp&arnumber8450054本文主要关注KG上的 Link prediction 问题,以往的方法在…

阿里P8架构师谈:架构设计经验汇总

架构设计更多的是实践经验总结,以下架构设计经验,我会陆续补充完整。 一:数据库拆分原则 阿里P8架构师谈:架构设计之数据库拆分六大原则 二:缓存选择原则 阿里P8架构师谈:分布式缓存的应用场景、选型比较…

陈丹琦“简单到令人沮丧”的屠榜之作:关系抽取新SOTA!

文 | JayLou娄杰大家好,我是卖萌屋的JayJay,好久不见啦~最近在「夕小瑶知识图谱与信息抽取」群里和群友交流时,JayJay发现了来自陈丹琦大佬(女神)的一篇最新的关系抽取SOTA《A Frustratingly Easy Approach…

肖仰华 | 知识图谱落地的基本原则与最佳实践

本文转载在公众号:知识工场。肖仰华博士,复旦大学计算机科学与技术学院教授,博士生导师,知识工场实验室负责人。此文内容取自肖仰华教授在华为、CCF等场合所做报告,完整内容见书籍《知识图谱:概念与技术》的…

预训练模型应用工具 PaddleHub情感分析、对话情绪识别文本相似度

文章目录1. 预训练模型的应用背景1.1 多任务学习与迁移学习1.2 自监督学习2. 快速使用PaddleHub2.1 通过Python代码调用方式 使用PaddleHub2.1.1 CV任务原图展示人像扣图人体部位分割人脸检测关键点检测2.1.2 NLP 任务2.2 通过命令行调用方式 使用PaddleHub3. PaddleHub提供的预…

NIPS’20 Spotlight | 精准建模用户兴趣,广告CTR预估准确率大幅提升!

源 | 京东零售技术在以人工智能技术为支持的推荐、搜索、广告等业务中,点击率预估(CTR)一直是技术攻坚的核心,同时也是人工智能技术在业务落地中最难实现的技术方向之一。第一期介绍了视觉信息使用帮助提高点击率预估的准确度&…

史上最强大型分布式架构详解:高并发+数据库+缓存+分布式+微服务+秒杀

分布式架构设计是成长为架构师的必备技能,涵盖的内容很广,今天一次打包分享,文末有:最全分布式架构设计资料获取方式~ 负载均衡 负载均衡的原理和分类 负载均衡架构和应用场景 分布式缓存 常见分布式缓存比较:memcac…

论文浅尝 | 面向多语言语义解析的神经网络框架

论文笔记整理:杜昕昱,东南大学本科生。来源:ACL2017链接:https://aclweb.org/anthology/P17-2007论文训练了一个多语言模型,将现有的Seq2Tree模型扩展到一个多任务学习框架,该框架共享用于生成语义表示的解…

LeetCode 46. 全排列(回溯)

文章目录1. 题目信息2. 解题2.1 利用hash map解决2.2 改用bool数组判断是否出现过1. 题目信息 给定一个没有重复数字的序列,返回其所有可能的全排列。 示例:输入: [1,2,3] 输出: [[1,2,3],[1,3,2],[2,1,3],[2,3,1],[3,1,2],[3,2,1] ]来源:力扣&#xf…

谷歌师兄的刷题笔记分享!

高畅现在是谷歌无人车部门(Waymo)的工程师,从事计算机视觉和机器学习方向。他在美国卡内基梅隆大学攻读硕士学位时,为了准备实习秋招,他从夏天开始整理某 code 上的题目,几个月的时间,刷了几百道…

【深度揭秘】百度、阿里、腾讯内部岗位级别和薪资结构,附带求职建议!

“ 最近很忙,文章没有及时更新。。 最近被问得最多就是想进入BAT等一线互联网公司,应该怎么办? 我先从BAT等这样的公司看看他们的招聘需求谈起,再结合这样的公司需要对技术的要求是什么,最后结合我的建议&#xff0…

LeetCode 47. 全排列 II(回溯+搜索剪枝)

文章目录1. 题目信息2. 解题1. 题目信息 给定一个可包含重复数字的序列,返回所有不重复的全排列。 示例:输入: [1,1,2] 输出: [[1,1,2],[1,2,1],[2,1,1] ]来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problem…

会议 | 2019 全国知识图谱与语义大会 (CCKS 2019)

会议注册:http://www.ccks2019.cn/?page_id53会议地址与住宿:http://www.ccks2019.cn/?page_id366OpenKG开放知识图谱(简称 OpenKG)旨在促进中文知识图谱数据的开放与互联,促进知识图谱和语义技术的普及和广泛应用。点击阅读原文…