各类预训练模型的改进-ROBERTa-ERNIE-XLNet-AlBert-ELECTRA等

各类预训练模型的改进-ROBERTa-ERNIE-XLNet-AlBert-ELECTRA等

看了蛮多原文还有解析的blog,想想还是记录一下比较好,之后忘了也好检索,应该会不断补充

ERNIE

原文有三篇,分别是ERNIR 1 / 2 / 3

常见的ERNIE有清华的和百度的,清华的是Enhanced language Representation with iNformatIve Entities,百度的是Enhanced Representation through Knowledge Integration,二者的想法都是在原有的bert基础上添加额外的知识,提高性能

清华ERNIE

清华的思路在bert的语言模型中,加入知识图谱中命名实体的先验知识,

image-20220110145000549

为了该目的,清华ERNIE也修改了相应的模型,具有the underlying textual encoder (T-Encoder)和the knowledgeable encoder (K-Encoder)

image-20220110145802703

具体的思路看原文和后面推荐的blog,整体上因为清华ERNIE改进了模型相对比较麻烦,后续好像也没有继续做了,相对的,更为出名的是百度的ERNIE

百度ERNIE

百度ERNIE的思路就更为直接,口号就是“简单可依赖”,没有对模型结构进行任何修改,采用的就是完全的BERT模型。作者想办法对masked language model进行修改,使得其分层次地对token进行mask。假如给定一句话:

Harry Potter is a series of fantasy novels written by J. K. Rowling

其中的Harry PotterJ. K. Rowling都是命名实体,如果MLM将其中某个字符mask掉了,比如将Harry Potter处理成[MASK] Potter这显然是不合理的,我们期望的是对某个实体一并地进行mask,如Fig 2.1所示。

img

Fig 2.1 BERT vs ERNIE在MLM模型中的mask机制。

当然,这只是entity-level的策略,除了基本的Basic-level策略外,在本文中,作者还引入了phrase-level的策略,具体我们见Fig 2.2所示。其中的Basic-level策略和传统MLM一样,随机对单词进行mask;Phrase-level策略更为精致一些,其用一些分块,分phrase算法将phrase进行分段后,然后以phrase为单位进行mask;entity-level策略就是通过NER算法将文本中的命名实体找出来后进行mask。

img

接下来还有ERNIE 2.0和3.0 可以看下面推荐的blog

推荐阅读:

ACL 2019 | 清华等提出ERNIE:知识图谱结合BERT才是「有文化」的语言模型 https://www.jiqizhixin.com/articles/2019-05-26-4

ERNIE - 清华 详解 - sergio的文章 - 知乎 https://zhuanlan.zhihu.com/p/103208601

『清华ERNIE』 与 『百度ERNIE』 的爱恨情仇 - 徐土豆的文章 - 知乎 https://zhuanlan.zhihu.com/p/351479345

SpanBERT

https://arxiv.org/abs/1907.10529

https://github.com/facebookresearch/SpanBERT

主要创新

  1. span Masking。和ERNIE一样,SpanBERT也认为对单个token进行random mask过于简单粗暴,丢失了很多词语信息。但不同的是,它不是按照固定的实体和短语,而是随机长度随机span的方式,效果更好。
  2. Span Boundary Objective (SBO)。利用span的左右两个边界词和当前词位置,来预测当前词。SpanBERT认为span边界词对理解span很重要,故引入了这一学习目标
  3. Single-Sequence Training。SpanBERT也分析了BERT中NSP的作用,认为NSP反而会降低模型performance。故去掉了NSP,而仅采用单个sequence。

推荐阅读:

NLP预训练模型3 — 预训练任务优化(ERNIE、SpanBERT等) - 谢杨易的文章 - 知乎 https://zhuanlan.zhihu.com/p/178919651

wait

针对BERT预训练任务的改进,也有其他思路和文章。比如

  1. ALBERT将NSP改为了SOP任务(sentence-order prediction),预测两句话顺序是否正确。一方面提升了任务难度。更重要的是,解决了NSP负样本带来的MLM任务噪声问题。但由于ALBERT更大的创新点在模型结构和轻量化方面,故放到模型结构优化中详细介绍。
  2. Roberta和SpanBERT一样,认为NSP反而有副作用,同样也是去掉了NSP。貌似Roberta和SpanBERT是FB同一个团队做的,两者的训练方式也是很相似。Roberta更为人所知的还是它的大数据大算力,故放到数据优化中讲解。
  3. ELECTRA针对MLM只能predict被mask的token,训练效率过低导致计算算力消耗过大的问题,提出了一个类似于GAN的生成-判别网络。它在判别任务中构建了RTD任务,判断语句中每个token是否被生成模型替换过,从而使得每个token都可以参与predict,大大提高了训练效率,加快了模型收敛,降低了算力消耗。ELECTRA是一个创新性很足的模型,提出了RTD预训练task。个人认为它更大的创新点还是在模型结构层面,故放到模型结构优化中进行讲解。
  4. StructBERT在span内打乱了token顺序,然后进行重构。提升了任务难度,并整合了语言结构。
  5. XLM构建了两个不同语言的基于机器翻译语料的sequence,在它的基础上进行MLM,从而提升了模型多语言理解能力。
  6. Roberta采用了dynamic masking动态掩码,将语料复制为10份,每一份一种随机mask,从而加入了一定的信息增益。
  7. XLNet提出了排列语言模型,从而将auto-encoder转变为了auto-regression。利用attention-mask和双流自注意力来实现。
  8. MASS和T5在seq2seq结构中,使用了MLM,也就是Seq2Seq MLM。在该结构中,encoder中的语句加入了mask,而在decoder中则需要生成这些mask。Seq2Seq MLM特别适合在生成任务中使用,比如摘要、翻译、问答等。

RoBERTa

https://arxiv.org/abs/1907.11692

https://github.com/pytorch/fairseq

2.1.1 Dynamic Masking

BERT在预处理阶段,对sequence进行了随机mask。训练时,同一个sequence中的mask,在不同的epochs中是不会改变的,也就是static masking静态掩码。这种固定mask的方式,不利于学习到更多不同信息。RoBERTa采用了动态掩码,dynamic Masking的方式,步骤为

  1. 将原始语料复制10份
  2. 每一份语料随机选择15%的token进行mask,[mask]、replace、keep的比例仍然为80%、10%、10%。

通过这种类似于cross-validation的方式,使得每一份语料产生了不同的mask,从而可以学习到更多不同信息。总共训练40个epochs,10份语料的情况下,每份语料应用到4个epochs中。这种方式就叫dynamic masking。 动态掩码是否有效果呢,实验证明,还是能提高一点performance的。

img

如上所示,效果不算很明显,原因应该是BERT包含的数据本身就很大了,信息量已经很充足了,故dynamic masking带来的信息增益不是很明显。

2.1.2 without NSP

在SpanBERT中,我们也提到过NSP反而会带来一定的副作用,主要原因为

  1. 两个语句拼接起来降低了单个语句长度(可能被截断),而长语句有利于模型学到更多信息,有利于预测mask
  2. NSP中的负样本,与当前语句关联度不大,不利于预测当前语句的mask。也就是NSP使得MLM任务引入了噪声

RoBERTa对有没有NSP,以及如何构建sequence,也进行了充足的实验,如下

img

作者进行了四种不同的sequence构造方法,进行了对比实验,如下:

  1. SEGMENT-PAIR + NSP:原始BERT的做法,仍然采用MLM + NSP,segment为来自同一个文档,或不同文档的多个句子,最后按512截断。两部分构成pair。
  2. SENTENCE-PAIR + NSP:MLM + NSP,两个来自同一文档或不同文档的,单个句子。这样会大大缩短sequence的长度,经常远远小于512 token。从上表也可以看到,其效果最差。故尽量使sequence长度更长,容纳更多信息,有助于提升模型performance
  3. FULL-SENTENCES:去掉了NSP,不构造语句对pair。来自同一文档或不同文档的多个句子,按照512截断。从实验中可见,去掉NSP有助于提升模型效果,原因就是最上面分析的两点。
  4. DOC-SENTENCES:去掉了NSP,与FULL-SENTENCES不同的是,它的句子全部来自于同一个文档。从实验中可见,来自同一文档效果更好,这是因为减少了MLM的噪音

RoBERTa的各种实验,基本是给NSP判了死刑。后面越来越多文章,都要么舍弃了NSP,要么对其进行了改造。

2.1.3 超参优化,增大batch size

RoBERTa对超参也进行了充分实验,增大batch size和训练迭代次数,有助于提升模型performance。

img

在相同总训练step的情况下,batch size的增加可以提升模型效果。这也很容易理解,数据量大的情况下,适当增加batch size可以有助于模型跳出局部最优点,单次训练信息量更充足,视野更宽阔。甚至有人还在尝试32k的batch size,只能说有矿真好。 作者对总训练次数steps也做了分析,如下表,在相同data和batch size情况下,对比了总训练次数steps,分别在100k、300k、500k下的效果,最后还是steps=500k效果最好。毕竟训练充分,大力出奇迹嘛。但也要注意不要过拟合了。

img

2.1.4 增大数据量

原始BERT采用了BooksCorpus和English Wiki语料,总共16GB。XLNet认为是13G,主要差别在于二者English Wiki的预处理过滤方法不同,可以基本认为是一个意思。RoBERTa将原始语料增大到了160GB。主要包括

  1. BERT原始语料,16GB。原始语料来自BooksCorpus和English Wiki,质量很高。
  2. CC-NEWS,76GB。新闻语料实时性很强,有助于学习到很多新的实体和知识。
  3. OPENWEBTEXT,38GB。社区新闻语料,有助于学习到真实人类口语化表达,以及新的知识。提升模型泛化能力
  4. STORIES,31GB。故事风格的语料。

增大数据量带来的效果还是很明显的,上面那张表中对比了16GB和160GB语料下的模型效果。增大数据量能带来一定的模型效果提升。

2.1.5 文本编码

原始BERT采用字符级别的BPE编码,英文vocab size为30k。容易出现UNK问题,影响模型效果。RoBERTa采用了Byte级别的BPE词汇表,vocab size为50k。vocab size的增加使得模型参数量有所增加,BERT-base增加了15M,BERT-large增加了20M。但也提升了一定的效果。

2.2 实验结果

RoBERTa大力出奇迹,朴实无华的方法,带来了模型效果较大的提升,在GLUE上的表现远超BERT,如下表。

img

同时在SQuAD和RACE上效果也是比BERT,提升了很多。

img

RoBERTa虽然创新点不是很fancy,其大力出奇迹的方法也没法复现,但确实大大提升了下游任务的performance。也使得各种比赛中,RoBERTa的应用越来越广泛。

推荐阅读

NLP预训练模型4 — 训练方法优化(RoBERTa、T5) - 谢杨易的文章 - 知乎 https://zhuanlan.zhihu.com/p/178937674

ALBERT

XLNet

ELECTRA

0%