【NLP】ALBERT粗读

前几天看没事看了眼GLUE榜单就发现了ALBERT这个模型,去arxiv搜了下没搜到,还在想何时放出来,没想到在Openreview上。。html

ALBERT原文 openreview.net

Google一出手就是不同,再也不是BERT+的模式,而是作了个大改动。node

先来感觉一下刷榜的乐趣,GLUEgit

SQuADgithub

RACE可能没找对,没看到。网络

1. 模型简介

ALBERT主要对BERT作了3点改进,缩小了总体的参数量,加快了训练速度,增长了模型效果。分布式

接下来介绍这三点改进。svg

1.1 Factorized embedding parameterization

在BERT、XLNet、RoBERTa中,词表的embedding size(E)和transformer层的hidden size(H)都是相等的,这个选择有两方面缺点:学习

  1. 从建模角度来说,wordpiece向量应该是不依赖于当前内容的(context-independent),而transformer所学习到的表示应该是依赖内容的。因此把E和H分开能够更高效地利用参数,由于理论上存储了context信息的H要远大于E
  2. 从实践角度来说,NLP任务中的vocab size原本就很大,若是E=H的话,模型参数量就容易很大,并且embedding在实际的训练中更新地也比较稀疏。

所以做者使用了小一些的E(6四、12八、25六、768),训练一个独立于上下文的embedding(VxE),以后计算时再投影到隐层的空间(乘上一个ExH的矩阵),至关于作了一个因式分解。spa

从后续的实验中来看,E的大小与实验效果也不是彻底正相关,所以其余实验中E都取的128。.net

1.2 Cross-layer parameter sharing

跨层参数共享,就是无论12层仍是24层都只用一个transformer。这在以前读过Universal Transformer就有了,可是觉得会火,由于作语言模型的效果比标准Transformer好。结果没什么人用,此次被提起来了。


做者对比了每层输入输出的L2距离和类似度,发现了BERT的结果比较震荡,而ALBERT就很稳定,可见ALBERT有稳定网络参数的做用。

1.3 Inter-sentence coherence loss

后BERT时代不少研究(XLNet、RoBERTa)都发现next sentence prediction没什么用处,因此做者也审视了一下这个问题,认为NSP之因此没用是由于这个任务不只包含了句间关系预测,也包含了主题预测,而主题预测显然更简单些(好比一句话来自新闻财经,一句话来自文学小说),模型会倾向于经过主题的关联去预测。所以换成了SOP(sentence order prediction),预测两句话有没有被交换过顺序。实验显示新增的任务有1个点的提高:

2. 总结

刚开始看这篇文章是很惊喜的,由于它直接把同等量级的BERT缩小了10倍+,让普通用户有了运行GPT二、威震天的可能。可是仔细看了实验后才发现体量的减少是须要付出代价的:

能够仔细看一下model的量级,而且注意一下这个speedup是训练时间而不是inference时间(由于数据少了,分布式训练时吞吐上去了,因此ALBERT训练更快),但inference仍是须要和BERT同样的transformer计算。

能够得出的结论是:

  1. 在相同的训练时间下,ALBERT获得的效果确实比BERT好
  2. 在相同的Inference时间下,ALBERT base和large的效果都是没有BERT好的,并且差了2-3个点,做者在最后也提到了会继续寻找提升速度的方法(sparse attention和block attention)

鱼与熊掌不可兼得,尤为是对于工程落地而言,须要在速度与效果之间寻找一个trade-off。

另外,结合Universal Transformer能够想到的是,在训练和inference阶段能够动态地调整transformer层数(告别十二、2四、48的配置吧)。同时能够想办法去避免纯参数共享带来的效果降低,毕竟越深的transformer层所学到的任务相关信息越多,能够改进transformer模块,加入记忆单元、每层的个性化embedding。

相关文章
相关标签/搜索