BERT, RoBERTa, DistilBERT, XLNet,Albert

1 篇文章 0 订阅
1 篇文章 0 订阅
BERT

BERT 是一个双向Transformer,用于对大量未标记的文本数据进行预训练,以学习可用于微调特定机器学习任务的语言表示。尽管BERT在一些艰巨的任务上胜过一些NLP的最新技术,但其性能的提高主要归因于:双向的Transformer,基于大量训练数据的新颖的Masked Language Model和Next Structure Prediction预训练任务。当然同样重要的是谷歌强大的算力加持。
扩展Bert-wwm & Bert-wwm-ext

XLNet

XLNet是一个通过排列语言模型实现双向上下文信息的自回归模型。它通过随机排列输入序列而预测某个位置可能出现的词,进而训练出具有上下文的语境化词向量。
XLNet是采用通用得自回归预训练方法(AR模型),而基于DAE(去噪自编码器)得Bert模型采用得是降噪得自动编码方法(AE模型),bert和AR模型的区别主要是:

  1. 独立性假设
    bert中一个序列中会被mask掉不超过15%的单词,但是在预训练时的目标函数是基于mask值彼此独立、互不干扰的假设下进行计算的,而AR模型中不需要设置mask值,预训练时的目标函数也不必设立独立假设。同时,mask的设置会导致预训练-微调的数据上的不统一,这也是Bert的一个缺陷。
  2. 输入噪声
    Bert在预训练时对输入序列进行随机mask,这是一种输入噪声设定,但是在下游任务进行微调时却并没有对输入序列设置输入噪声,即随机mask,这引起了预训练-微调间的差异。与之相反,AR模型不设置输入噪声,因而不会有这种问题。
  3. 上下文依赖
    AR模型只考虑前向信息或者后向信息,而bert要考虑双向信息,结果就是,bert的目标函数允许模型被训练为能够更好地抓取双向信息。

XLNet与Bert比较
Bert隐藏了15%的词,用85%去预测15%的词。缺少了15%的词中的关联性(从而忽略了被 mask 位置之间的依赖关系)。
XLNet是通过整个上下文去预测某个词,这样的词的利用率更高,理论上效果更好。
XLNet 的核心思想是 PLM,排列原来的句子,然后预测末尾的单词。这样可以学习到单词之间的依赖关系,而且可以利用 token 前后向的信息。
XLNet PLM 的实现需要用到 Two-Stream Self-Attention,包含两个 Stream,Query Stream 用于预测,只包含当前位置的位置信息。而 Content Stream 保存了 token 的内容。
XLNet 还使用了 Transformer-XL 的优化方式(段循环&相对位置编码)。在这里插入图片描述
详情参见:
https://cloud.tencent.com/developer/article/1449495
https://www.pianshen.com/article/6717954811/
PLM:https://baijiahao.baidu.com/s?id=1654814515140351919&wfr=spider&for=pc
https://blog.csdn.net/u012526436/article/details/93196139
中文预训练模型下载

RoBERTa

RoBERTa模型层面没有改变Google的Bert,改变的只是预训练的方法。这是对BERT的retraining,增加了1000%的文本数据和相应的计算能力。为了改进训练过程,RoBERTa 从 BERT 的预训练中移除了下一句预测(Next Sentence Prediction,NSP)任务,并引入了Dynamic Masking(动态 Masking),以便masked token在训练期间发生变化。此外还发现在训练过程中使用更大的batch-training更有用。

更重要的是,RoBERTa使用160 GB的文本进行预训练,包括BERT中使用的16 GB的Books Corpus和English Wikipedia。 其他数据还包括Common Crawl News数据集(6300万篇文章,76 GB),Web文本语料库(38 GB)和Common Crawl的故事(31 GB)。加上一天的1024个Tesla 100 V GPU的出色表现,完成了对RoBERTa的预训练任务。
学习奥运精神,更高更快更强;最强预训练模型,(数据)更多(训练)更久(批次)更大

1. 静态Masking vs 动态Masking
原来Bert对每一个序列随机选择15%的Tokens替换成[MASK],为了消除与下游任务的不匹配,还对这15%的Tokens进行(1)80%的时间替换成[MASK];(2)10%的时间不变;(3)10%的时间替换成其他词。但整个训练过程,这15%的Tokens一旦被选择就不再改变,也就是说从一开始随机选择了这15%的Tokens,之后的N个epoch里都不再改变了。这就叫做静态Masking。
而RoBERTa一开始把预训练的数据复制10份,每一份都随机选择15%的Tokens进行Masking,也就是说,同样的一句话有10种不同的mask方式。然后每份数据都训练N/10个epoch。这就相当于在这N个epoch的训练中,每个序列的被mask的tokens是会变化的。这就叫做动态Masking。
那么这样改变是否真的有效果?作者在只将静态Masking改成动态Masking,其他参数不变的情况下做了实验,动态Masking确实能提高性能。
可以看出,修改版的静态mask与BERT原始静态mask效果相当;动态mask又与静态mask效果差不多,或者说略好于静态mask。
在这里插入图片描述
2. with NSP vs without NSP
原本的Bert为了捕捉句子之间的关系,使用了NSP任务进行预训练,就是输入一对句子A和B,判断这两个句子是否是连续的。在训练的数据中,50%的B是A的下一个句子,50%的B是随机抽取的。
而RoBERTa去除了NSP,而是每次输入连续的多个句子,直到最大长度512(可以跨文章)。这种训练方式叫做(FULL - SENTENCES),而原来的Bert每次只输入两个句子。实验表明在MNLI这种推断句子关系的任务上RoBERTa也能有更好性能。
在这里插入图片描述
3. 更大的mini-batch
原本的BERT-base 的batch size是256,训练1M个steps。RoBERTa的batch size为8k。为什么要用更大的batch size呢?(除了因为他们有钱玩得起外)作者借鉴了在机器翻译中,用更大的batch size配合更大学习率能提升模型优化速率和模型性能的现象,并且也用实验证明了确实Bert还能用更大的batch size。
在这里插入图片描述
4. 更多的数据,更长时间的训练
借鉴XLNet用了比Bert多10倍的数据,RoBERTa也用了更多的数据。性能确实再次彪升。当然,也需要配合更长时间的训练。
在这里插入图片描述
参考:
https://www.jianshu.com/p/eddf04ba8545
https://blog.csdn.net/ljp1919/article/details/100666563
中文预训练模型下载
wwm模型下载

DistilBERT是一种蒸馏(近似)版本的BERT。它保留了BERT大概97%的性能,但仅有一半的参数量。具体来说,它没有Token-type Embeddings和Pooler,仅保留了Google BERT的一半图层。DistilBERT使用了一种称为蒸馏的技术,它将Google的BERT近似为一个较小的神经网络。这个想法是,一旦训练了大型神经网络,就可以使用较小的网络来近似其完整的输出分布。这在某种意义上类似于后验近似。贝叶斯统计中用于后验逼近的关键优化函数之一是Kulback-Leiber散度,自然也被用于此。

Albert
ALBERT模型是BERT的改进版,与最近其他State of the art的模型不同的是,这次是预训练小模型,效果更好、参数更少。
它对BERT进行了三个改造 Three main changes of ALBert from Bert:

  1. 词嵌入向量参数的因式分解 Factorized embedding parameterization
 O(V * H) to O(V * E + E * H)
 如以ALBert_xxlarge为例,V=30000, H=4096, E=128
 那么原先参数为V * H= 30000 * 4096 = 1.23亿个参数
 现在则为V * E + E * H = 30000*128+128*4096 = 384+ 52= 436万,
 词嵌入相关的参数变化前是变换后的28倍。
  1. 跨层参数共享 Cross-Layer Parameter Sharing
参数共享能显著减少参数。共享可以分为全连接层、注意力层的参数共享;注意力层的参数对效果的减弱影响小一点。
  1. 段落连续性任务 Inter-sentence coherence loss.
    在ALBERT中,为了只保留一致性任务去除主题识别的影响,提出了一个新的任务 sentence-order prediction(SOP),SOP的正样本和NSP的获取方式是一样的,负样本把正样本的顺序反转即可。SOP因为实在同一个文档中选的,其只关注句子的顺序并没有主题方面的影响。并且SOP能解决NSP的任务,但是NSP并不能解决SOP的任务,该任务的添加给最终的结果提升了一个点。

4. 移除dropout
除了上面提到的三个主要优化点,ALBERT的作者还发现一个很有意思的点,ALBERT在训练了100w步之后,模型依旧没有过拟合,于是乎作者果断移除了dropout,没想到对下游任务的效果竟然有一定的提升。这也是业界第一次发现dropout对大规模的预训练模型会造成负面影响。
总结:
ALBERT实际上是通过参数共享的方式降低了内存,预测阶段还是需要和BERT一样的时间,如果采用了xxlarge版本的ALBERT,那实际上预测速度会更慢。
参考:
https://blog.csdn.net/u012526436/article/details/101924049
https://baijiahao.baidu.com/s?id=1654588517875312379&wfr=spider&for=pc
中文预训练模型下载
中文版下载地址
Base
https://storage.googleapis.com/albert_models/albert_base_zh.tar.gz
Large
https://storage.googleapis.com/albert_models/albert_large_zh.tar.gz
XLarge
https://storage.googleapis.com/albert_models/albert_xlarge_zh.tar.gz
Xxlarge
https://storage.googleapis.com/albert_models/albert_xxlarge_zh.tar.gz
ALBERT v2下载地址
Base
[Tar File]:
https://storage.googleapis.com/albert_models/albert_base_v2.tar.gz
[TF-Hub]:
https://tfhub.dev/google/albert_base/2
Large
[Tar File]:
https://storage.googleapis.com/albert_models/albert_large_v2.tar.gz
[TF-Hub]:
https://tfhub.dev/google/albert_large/2
XLarge
[Tar File]:
https://storage.googleapis.com/albert_models/albert_xlarge_v2.tar.gz
[TF-Hub]:
https://tfhub.dev/google/albert_xlarge/2
Xxlarge
[Tar File]:
https://storage.googleapis.com/albert_models/albert_xxlarge_v2.tar.gz
[TF-Hub]:
https://tfhub.dev/google/albert_xxlarge/2

  • 2
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值