Bert及其变种和应用场景

目录

 

RoBERTa: 

Soft-Masked BERT

Distil-LSTM

TinyBERT

FastBERT

StructBert


 

  • ALBERT

     https://zhuanlan.zhihu.com/p/87562926

  •      Factorized embedding parameterization

  •      Cross-layer parameter sharing

本文提出的另一个减少参数量的方法就是层之间的参数共享,即多个层使用相同的参数。参数共享有三种方式:只共享feed-forward network的参数、只共享attention的参数、共享全部参数。ALBERT默认是共享全部参数的,在后续实验结果中我们可以看到几种方式的模型表现。

如下图所示,实验表明加入参数共享之后,每一层的输入embedding和输出embedding的L2距离和余弦相似度都比BERT稳定了很多。这证明参数共享能够使模型参数更加稳定。

  •      Inter-sentence coherence loss

除了减少模型参数外,本外还对BERT的预训练任务Next-sentence prediction (NSP)进行了改进。在BERT中,NSP任务的正例是文章中连续的两个句子,而负例则是从两篇文档中各选一个句子构造而成。在先前的研究中,已经证明NSP是并不是一个合适的预训练任务。本文推测其原因是模型在判断两个句子的关系时不仅考虑了两个句子之间的连贯性(coherence),还会考虑到两个句子的话题(topic)。而两篇文档的话题通常不同,模型会更多的通过话题去分析两个句子的关系,而不是句子间的连贯性,这使得NSP任务变成了一个相对简单的任务。

因此本文提出了Sentence-order prediction (SOP)来取代NSP。具体来说,其正例与NSP相同,但负例是通过选择一篇文档中的两个连续的句子并将它们的顺序交换构造的。这样两个句子就会有相同的话题,模型学习到的就更多是句子间的连贯性。

 

  • RoBERTa

 https://zhuanlan.zhihu.com/p/103205929 ;  https://zhuanlan.zhihu.com/p/254821426

使用动态mask

FULL-SENTENCES without NSP

更大的bs

更大的byte-level BPE
 

https://arxiv.org/pdf/1907.11692.pdf

  • Soft-Masked BERT

修正网络是一个基于BERT的序贯多类标记模型

DistilBERT:
原理:这个的做法就是用蒸馏12层的BERT得到6层的DistilBERT,首先预训练好BERT,然后用训练BERT的大规模预料来蒸馏12层的BERT得到。
效果:速度快60%,参数减少40%,同时效果保留了97%。
可行性:因为该任务是一个通用的蒸馏BERT,所以即插即用。并且已经有蒸馏好的中文模型。
论文地址:https://arxiv.org/abs/1910.01108
相关资料:https://medium.com/huggingface/distilbert-8cf3380435b5
代码地址:https://github.com/huggingface/transformers/tree/master/examples/distillation

  • Distil-LSTM


原理:这个做法是将BERT学习到的知识通过蒸馏迁移到LSTM中,针对特定分类任务设计的模型。首先对于特定任务(我们假设文本分类),Teacher选择预训练且微调好的BERT模型,然后用特定任务的数据集进行蒸馏到Student模型LSTM,为了保证数据集是足够大的,还加入了数据增广。
效果:在一些简单的分类任务上精度下降3%,速度提升近400倍。与上一个模型相比,DistilBERT 模型的效果相对更好,而 Distilled BiLSTM 压缩得更小。
可行性:速度提升最快,但是为简单的下游分类任务设计的,对我们关系抽取(可以当作序列标注)任务是否有帮助持疑问;此外,这是一个为特定任务设计的,没有可以直接拿来用的,需要要充分的特定任务预语料。
论文地址:https://arxiv.org/abs/1903.12136
代码地址:https://github.com/qiangsiwei/bert_distill

  • TinyBERT


原理:这个主要是专门为 Transformer 网络设计的知识蒸馏方法。并采用的是一个两阶段学习框架,第一个阶段,TinyBERT 在大量的 general 数据集上,利用预训练 BERT 蒸馏出一个通用TinyBERT;第二个阶段,TinyBERT 采用数据增强,用微调后的 BERT 训练一个 task specific 模型。
效果:相较于完整的 BERT,性能下降 3 个点,但是推理性能却得到了巨大提升,快了9倍多。
可行性:效果要比DistilBERT好,但是华为官方只公布了英文蒸馏好的模型。所以如果想适用于我们的中文关系抽取任务,有两个方法:1. 在大量的中文数据集上,训练一个中文通用tinybert,然后再针对我们任务,蒸馏微调Tinybert。但是这么做的话,需要大量的中文通用数据集,还需要充足的特定任务数据集。2. 省略第一步。a. 制作任务相关数据集; b. fine-tune teacher BERT; c. 固定 teacher BERT 参数,蒸馏得到 TinyBERT。这里也需要充足的特定任务数据集。
论文:https://arxiv.org/abs/1909.10351
相关资料:https://www.jiqizhixin.com/articles/2019-12-05-3
代码地址:https://github.com/huawei-noah/Pretrained-Language-Model/tree/master/TinyBERT

  • FastBERT


原理:主要思想是自适应调整每个样本的计算量,容易的样本通过一两层就可以预测出来,较难的样本则需要走完全程。步骤:使用预训练好的bert,跟普通训练一样finetune模型。然后freeze主干网络和最后层的teacher分类器,每层的子模型拟合teacher分类器(KL散度为loss);inference阶段,根据样本输入,子分类器置信度高则提前返回。
效果:度可以提升1-10倍,且精度下降全部在0.11个点之内,甚至部分任务上还有细微提升。优于DistillBERT,无论是性能还是速度。
可行性:为文本分类任务设计,我们如果改造也不容易,首先需要将简单的单层分类器改为多个双向LSTM进行分类,然后我们的置信度也不好表示,并且我们也需要大量的特定任务数据。
论文地址(ACL2020): https://arxiv.org/pdf/2004.02178.pdf
代码地址(Pytorch): https://github.com/BitVoyage/FastBERT

  • StructBert

小的预训练模型
此外还有一些预训练好的小语言模型可以即插即用,如albert_chinese_tiny,也在很多榜单上刷榜,且模型小,速度快。
一些其他资料:
https://huggingface.co/voidful/albert_chinese_tiny
https://github.com/brightmart/albert_zh
https://github.com/huggingface/transformers/tree/master/examples/distillation
https://zhuanlan.zhihu.com/p/245634608
https://zhuanlan.zhihu.com/p/94359189?utm_source=wechat_timeline
https://blog.csdn.net/weixin_43378396/article/details/106753376

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值