1. 简介
- 一般来说,增加模型的参数量能够提升最终的效果。但是由于机器GPU/TPU资源的限制模型参数量不可能无限制的增加。ALBERT模型主要解决的问题是:减小模型的参数,使得模型获得和BERT同样的效果甚至更优。 最终模型的训练速度和推理速度并没有明显的提升反而降低了些,所以论文最终作者提到在这两方面还需要改进。
2. ALBERT改进之处
- ALBERT和BERT模型采用了相同的结构,主要的改进之处在三个方面:
2.1 Factorized embedding parameterization
- 很多BERT相关的模型比如RoBERT,XLNET等,将词表emb size的大小和网络中hidden size的大小,设置的是一样的。这样embedding层的网络参数数量为:,为了减小embedding层网络参数ALBERT中将和设置的不一样,通常来说不能设置的太大,而应该将设置的比较大。最终embedding层的参数数量从减小到,当的大小远大于的时候,参数数量减小更加明显。
2.2 Cross-layer parameter sharing
- 将transformer不同层之间的参数进行共享,常见的比如共享feed forward层参数或者attention层的参数,或者全部参数都共享。ALBERT默认采用的是共享所有的参数。并且论文中实验显示,通过不同层的参数共享模型的稳定性更好。
2.3 Inter-sentence coherence loss
- 我们知道原始BERT模型中使用了两个loss:MLM loss和NSP loss。很多其他实现都显示NSP(Next Sentence Prediction)任务起到的作用并不是那么大,因此ALBERT将NSP任务换成了SOP(Sentence Order Prediction)。NSP和SOP任务都是一个二分类任务,这两个任务的主要区别在于负样本的构造。NSP任务的负样本是,在其他文档中随机采样一个句子,而 SOP任务负样本的构造是将两个句子反过来。NSP任务能够学习到句子之间的主题相似性,而SOP任务能够学习到句子之间的语义连贯性,这种关系的学习更加的困难。
参考论文
- ALBERT模型论文及代码
https://paperswithcode.com/paper/albert-a-lite-bert-for-self-supervised - [SentencePiece论文] SentencePiece: A simple and language independent subword tokenizer
and detokenizer for Neural Text Processing
https://aclanthology.org/D18-2012.pdf
参考资料
- 官方tensorflow代码
https://github.com/google-research/ALBERT - 中文预训练ALBERT
https://github.com/brightmart/albert_zh - ALBERT 论文解读
https://zhuanlan.zhihu.com/p/88099919 - BERT 的优秀变体:ALBERT 论文图解介绍
https://www.6aiq.com/article/1589833968655