ALBert: 轻量级Bert

2020 年 8 月 31 日 AINLP

最近要开始使用Transformer去做一些事情了,特地把与此相关的知识点记录下来,构建相关的、完整的知识结构体系,

以下是要写的文章,本文是这个系列的第六篇:

背景

近年来,预训练的趋势从学习embedding变成了学习整个网络,即Word2vec到Bert的变迁。

另一个趋势则是大模型对最后的效果非常重要。而想要在真实的场景中使用,则需要小一些的模型,因而,知识蒸馏变得比较流行。

之前在卷积上,把层次加深到一定程度后如果没有结构上的创新(ResNet等)就不能再进一步提升效果。与之类似,在Bert上,把模型大小调整到一定程度也无法再继续使效果变好,反而会变差。如下图所示:

把hidden size从1024调整到2048会使得效果反而变差。

这个结论虽然在论文中得到了,但是没有考虑到数据的增长,后面有大量的论文通过增加数据训练更大的模型。

于是,ALBert中采用了三种手段来提升效果,其中,前两个方法通过模型上的改进降低了模型的大小。

  • Embedding矩阵分解
  • 层次间的参数共享
  • 损失函数添加句子顺序预测的loss

Embedding矩阵分解

原始的Bert,因为要做残差,所以每层的Hidden size都是一样的,同时也使得Embedding size和hidden size一样。但是,因为词表比较大,Bert中用的是3w的word piece,这样会导致模型的参数中,embedding会占一大部分。

从模型的角度来说,Embedding的参数学习的是上下文无关的表达,而Bert的模型结构则学习的是上下文相关的表达。在之前的研究成果中表明,Bert及其类似的模型的好效果更多的来源于上下文信息的捕捉,因而,embedding占据这么多的参数,会导致最终的参数非常稀疏。

因而,我们不用这么大的Embedding size,而是用一个较小的size,但是这样就没法在第一层去做残差了。没有关系,我们可以用另一个参数矩阵来把embedding size投射到hidden size上来。即假设V是词表大小,E是embedding size,H是hidden size,那么原始的Bert中E=H, 参数数目为VxH,而做了分解之后参数数据为VxE+ExH, 因为E远小于H,所以做了分解后这一部分的参数变少了很多。

层次间的参数共享

Bert的层次很深,至少在10层以上,这样,层次间的参数如果能共享的话,会使得参数量大大减少。

不仅如此,在共享了参数之后,会使得模型更加稳定,这方面的表现就是模型的每层的输入和输出之间的L2距离更小了。如下图所示:

当然,关于参数共享,也有很多选项:

  • 全部共享
  • 只共享全连接层
  • 只共享多头注意力层
  • 不共享

句子顺序预测损失

在原始的Bert中,除了masked language model之外,还需要学习下一个句子的预测,在这个任务中,正例是两个连续的句子AB,反例则是两个句子AC,其中C来自于另外的文章。

这个loss已经在很多论文中被怀疑无效或者可以提升了。在论文中,怀疑它不好的原因就是它太简单了。于是,论文设计了一个更难的任务,即两个连续的句子AB,判断它是正序还是逆序,即是AB还是BA。

实验效果

ALBERT和Bert的比较如下图,可以看到,相同的设置,ALBert比Bert略差,但是参数量会减少一个量级。可以看到,达到Bert-large的效果,ALBert-xlarge需要的参数从334M减少到了60M。

word embedding大小的影响如下图,可以看到在参数不共享的条件下,增大embedding可以带来微小的提升,在参数共享的条件下,embedding=128的时候反而最好。

参数共享设置的影响如下图。可以看到,全连接层的share带来的损失更大。

不同的句子损失的影响如下图,SOP是sentence order prediction的缩写。可以看到SOP训练好了,NSP结果自然也好,反之则没有。所以SOP是NSP的比较好的扩展。

除了论文的创新点的实验之外,论文中还有很多其他的实验结果。比如模型层次数目的影响:

hidden size的影响:

相同训练时间下,Bert-large和AlBert-xxlarge的效果

在共享了参数之后,加到12层即可,没有必要加到24层了。

添加数据或者去掉dropout对模型训练的影响。

加入新数据的影响

去掉dropout的影响。

总结

虽然ALBert解决了模型大小的问题,但是计算量的问题并没有解决,因为层次间参数共享并不会省略计算。因而,这块还可以尝试sparse attention或者block attention等。

还可以通过hard example mining与more efficient language modeling training来进一步提升模型的表达能力。

虽然句子顺序预测效果不错,不过在这个方向上还有更多可以挖掘的地方。

参考文献

  • [1]. Lan Z, Chen M, Goodman S, et al. ALBERT: A lite BERT for self-supervised learning of language representations[J]. arXiv preprint arXiv:1909.11942, 2019.

  • [2]. Taku Kudo and John Richardson. SentencePiece: A simple and language independent subword tokenizer and detokenizer for neural text processing. In Proceedings of the 2018 Conference on Empirical Methods in Natural Language Processing: System Demonstrations, pp. 66–71, Brussels, Belgium, November 2018. Association for Computational Linguistics. doi: 10.18653/v1/D18-2012. URL https://www.aclweb.org/anthology/D18-2012.

  • [3]. Mandar Joshi, Danqi Chen, Yinhan Liu, Daniel S Weld, Luke Zettlemoyer, and Omer Levy. SpanBERT: Improving pre-training by representing and predicting spans. arXiv preprint arXiv:1907.10529, 2019.


欢迎加入预训练模型交流群
进群请添加AINLP小助手微信 AINLPer(id: ainlper),备注预训练模型

推荐阅读

这个NLP工具,玩得根本停不下来

征稿启示| 200元稿费+5000DBC(价值20个小时GPU算力)

完结撒花!李宏毅老师深度学习与人类语言处理课程视频及课件(附下载)

从数据到模型,你可能需要1篇详实的pytorch踩坑指南

如何让Bert在finetune小数据集时更“稳”一点

模型压缩实践系列之——bert-of-theseus,一个非常亲民的bert压缩方法

文本自动摘要任务的“不完全”心得总结番外篇——submodular函数优化

Node2Vec 论文+代码笔记

模型压缩实践收尾篇——模型蒸馏以及其他一些技巧实践小结

中文命名实体识别工具(NER)哪家强?

学自然语言处理,其实更应该学好英语

斯坦福大学NLP组Python深度学习自然语言处理工具Stanza试用

关于AINLP

AINLP 是一个有趣有AI的自然语言处理社区,专注于 AI、NLP、机器学习、深度学习、推荐算法等相关技术的分享,主题包括文本摘要、智能问答、聊天机器人、机器翻译、自动生成、知识图谱、预训练模型、推荐系统、计算广告、招聘信息、求职经验分享等,欢迎关注!加技术交流群请添加AINLPer(id:ainlper),备注工作/研究方向+加群目的。


阅读至此了,分享、点赞、在看三选一吧🙏

登录查看更多
2

相关内容

BERT全称Bidirectional Encoder Representations from Transformers,是预训练语言表示的方法,可以在大型文本语料库(如维基百科)上训练通用的“语言理解”模型,然后将该模型用于下游NLP任务,比如机器翻译、问答。
Transformer文本分类代码
专知会员服务
116+阅读 · 2020年2月3日
BERT进展2019四篇必读论文
专知会员服务
66+阅读 · 2020年1月2日
【Google论文】ALBERT:自我监督学习语言表达的精简BERT
专知会员服务
22+阅读 · 2019年11月4日
绝对干货!NLP预训练模型:从transformer到albert
新智元
13+阅读 · 2019年11月10日
基于知识蒸馏的BERT模型压缩
大数据文摘
18+阅读 · 2019年10月14日
一文详解Google最新NLP模型XLNet
PaperWeekly
17+阅读 · 2019年7月1日
一步步理解BERT
AINLP
34+阅读 · 2019年6月19日
站在BERT肩膀上的NLP新秀们(PART III)
AINLP
11+阅读 · 2019年6月18日
站在BERT肩膀上的NLP新秀们(PART II)
AINLP
35+阅读 · 2019年6月8日
站在BERT肩膀上的NLP新秀们:XLMs、MASS和UNILM
PaperWeekly
16+阅读 · 2019年6月6日
BERT大火却不懂Transformer?读这一篇就够了
大数据文摘
11+阅读 · 2019年1月8日
谷歌BERT模型深度解析
AINLP
42+阅读 · 2018年11月15日
Arxiv
5+阅读 · 2019年10月31日
Revealing the Dark Secrets of BERT
Arxiv
4+阅读 · 2019年9月11日
Arxiv
6+阅读 · 2019年7月11日
How to Fine-Tune BERT for Text Classification?
Arxiv
13+阅读 · 2019年5月14日
Conditional BERT Contextual Augmentation
Arxiv
8+阅读 · 2018年12月17日
Arxiv
22+阅读 · 2018年8月30日
VIP会员
相关资讯
绝对干货!NLP预训练模型:从transformer到albert
新智元
13+阅读 · 2019年11月10日
基于知识蒸馏的BERT模型压缩
大数据文摘
18+阅读 · 2019年10月14日
一文详解Google最新NLP模型XLNet
PaperWeekly
17+阅读 · 2019年7月1日
一步步理解BERT
AINLP
34+阅读 · 2019年6月19日
站在BERT肩膀上的NLP新秀们(PART III)
AINLP
11+阅读 · 2019年6月18日
站在BERT肩膀上的NLP新秀们(PART II)
AINLP
35+阅读 · 2019年6月8日
站在BERT肩膀上的NLP新秀们:XLMs、MASS和UNILM
PaperWeekly
16+阅读 · 2019年6月6日
BERT大火却不懂Transformer?读这一篇就够了
大数据文摘
11+阅读 · 2019年1月8日
谷歌BERT模型深度解析
AINLP
42+阅读 · 2018年11月15日
相关论文
Arxiv
5+阅读 · 2019年10月31日
Revealing the Dark Secrets of BERT
Arxiv
4+阅读 · 2019年9月11日
Arxiv
6+阅读 · 2019年7月11日
How to Fine-Tune BERT for Text Classification?
Arxiv
13+阅读 · 2019年5月14日
Conditional BERT Contextual Augmentation
Arxiv
8+阅读 · 2018年12月17日
Arxiv
22+阅读 · 2018年8月30日
Top
微信扫码咨询专知VIP会员