[NLP] ALBERT - 更轻量的BERT模型

1. 简介

  • 一般来说,增加模型的参数量能够提升最终的效果。但是由于机器GPU/TPU资源的限制模型参数量不可能无限制的增加。ALBERT模型主要解决的问题是:减小模型的参数,使得模型获得和BERT同样的效果甚至更优。 最终模型的训练速度和推理速度并没有明显的提升反而降低了些,所以论文最终作者提到在这两方面还需要改进。
ALBERT、BERT模型参数数量对比.png

ALBERT、BERT验证集效果对比.png

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默认采用的是共享所有的参数。并且论文中实验显示,通过不同层的参数共享模型的稳定性更好。
参数共享作用.png

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

你可能感兴趣的:([NLP] ALBERT - 更轻量的BERT模型)