NLP预训练模型3 -- 预训练任务优化(ERNIE、SpanBERT等)

系列文章,请多关注
NLP预训练模型1 – 综述
NLP预训练模型2 – BERT详解和源码分析
NLP预训练模型3 – 预训练任务优化(ERNIE、SpanBERT)
NLP预训练模型4 – 训练方法优化(RoBERTa、T5
NLP预训练模型5 – 模型结构优化(XLNet、ALBERT、ELECTRA)
NLP预训练模型6 – 模型轻量化(ALBERT、Q8BERT、DistillBERT、TinyBERT等)

1 背景

前面一篇文章 NLP预训练模型2 – BERT详解和源码分析 中,我们从模型结构、实现源码、实验结果等角度,分析了预训练语言中大名鼎鼎的BERT模型。BERT大幅刷新的GLUE得分,提高了7.7个点之多,甚至有些中文NLP任务上达到了人类水平。那是不是在预训练模型方面就没法进行其他创新了呢,答案显然是否定的。前文中我们也提到了BERT存在的很多缺点,从预训练任务、模型结构、语料数据、模型轻量化等方面我们都可以进行深度优化。本文我们就先从预训练任务的优化讲起。

BERT是一个multi-mask任务,包括mask language model和next sequence prediction两个任务。两个任务有哪些缺点和改进点呢,主要有

  1. MLM直接对单个token进行随机mask,丢失了短语和实体信息,这一点对中文尤其明显,百度ERNIE对其进行了改进
  2. MLM仅预测被mask的token,其他token没有参与到预测中。而GPT等语言模型可以对每个token进行预测。导致MLM训练效率偏低,训练时间过长。这一点BERT论文自己也提到了,ELECTRA围绕这一点进行了改进。
  3. NSP任务可以学到sequence level信息,但仅为一个二分类,且负样本构造过于简单,导致模型不能充分训练。之前BERT的消融分析中也看到了,NSP对下游任务的作用比MLM要小。SpanBERT、ALBERT、Roberta均提到了这一点,并进行了相关改进,或者干脆弃用NSP。

过去的2019年,关于BERT改进的文章层出不穷,目前已经有50+ PLMs了。每篇文章从多个不同角度进行了优化,可能既包括预训练任务优化,又包括数据优化。我们按照文章主要出发点来进行归类,但不代表他们就仅仅针对单个点。预训练任务优化方面,我们主要分析ERNIE(百度那篇)和SpanBERT。

2 ERNIE

在这里插入图片描述论文信息:2019年4月,百度
论文地址 https://arxiv.org/abs/1904.09223
预训练模型和GitHub地址 https://github.com/PaddlePaddle/ERNIE

2.1 主要贡献

文章提到主要有三个贡献

  1. 提出了短语和实体级别的mask方式,通过此方法融合了外部知识。
  2. 5个中文NLP任务上超过当前SOTA,包括bert,大部分任务都超过了不止一个百分点。
  3. 发布了ERNIE中文预训练模型,从而在下游任务任务中可以造福后来者。

2.2 主要创新

主要创新有

  1. 知识融合和MLM任务。利用短语和实体级别的mask方式,来融合外部知识
  2. 添加更多优质中文语料。加入了百度百科、百度新闻、百度贴吧等中文语料,使得在中文NLP任务上效果更好
  3. DLM。对Dialog的角色,进行了Dialog embedding,从而加强模型在Dialog上的效果(如百度贴吧)。

2.2.1 知识融合和MLM任务

ERNIE 将实体(Entity-Level)和短语(Phrase-Level)进行mask,让预训练模型学习到外部知识,从而不需要通过knowledge embedding来引入外部知识。这种方法可以让模型隐式地学到实体知识、实体与实体关系、语义依赖等

ERNIE的模型结构和BERT基本相同,

  1. tokenize预处理同样采用word piece,CLS SEP PAD等特殊token的应用基本相同
  2. embedding层同样是token、segment、position三个embedding相加
  3. encoding层也是采用的Transformer Encoder,为了和BERT-base进行对比,也采用12层、12多头、隐层大小768

MLM方面,采用了三种mask策略

  1. Basic-Level mask。这种方法和BERT基本相同,中文以汉字为基础token,进行15%的随机mask
  2. Phrase-Level mask。通过分词工具来获得中文短语,通过词汇分析来判断英文短语(如"a lot of")。随机选择一些短语进行mask,然后predict整个短语
  3. Entity-Level mask。先分析sequence中的人名、地名、机构名等实体,对他们进行随机mask,然后predict整个实体。在这里插入图片描述

文章也对三种mask方式进行了消融分析,加入短语级别和实体级别后,ACC不断提升。如下图。在这里插入图片描述

2.2.2 添加更多优质中文语料

ERNIE添加了中文维基百科、百度百科、百度新闻、百度贴吧语料,分别包括的sentences数目为21M, 51M, 47M, 54M。

  1. BERT的英文语料,包括800M words的BooksCorpus,和包含2,500M words的英语Wikipedia。ERNIE中文语料共173M sentences。每个sentence平均30 words来估计,可以达到5000M words量级,还是相当充足的。
  2. 语料类型丰富,百科包含大量实体和短语信息,且内容质量很高。百度新闻则有利于模型学习新实体和新短语,百度贴吧则有利于模型学习口语表达,提升泛化能力。

文章也对这些语料进行了消融分析,可见三种不同的语料均对模型performance提升至关重要。在这里插入图片描述

2.2.3 DLM

对于Dialog对话,ERNIE针对对话角色进行了Dialog embedding。如下在这里插入图片描述如上图,Dialog Embedding添加了对话角色信息,从而使模型可以提升在多轮对话中的performance。

2.3 实验结果

在5个中文NLP任务上进行了实验,均超过BERT,有些甚至提升1%以上。如下在这里插入图片描述

3 SpanBERT

在这里插入图片描述
论文信息:2019年7月,Facebook & 华盛顿大学
论文地址 https://arxiv.org/abs/1907.10529
预训练模型和GitHub地址 https://github.com/facebookresearch/SpanBERT

3.1 主要创新

  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。

3.1.1 span Masking

mask方法

随机挑选span分为两步。

  1. 先按照几何分布,随机选择span长度。几何分布为_p=0.2_,最大值10。故span平均长度为3.8
  2. 然后在sequence中随机选择span起点,从而得到一个span。span起点必须是一整个词的起点(不能是中间的sub word)。

最终仍然保持总共15%的token被mask,并按照80% 10% 10%的方式进行[mask]替换、随机替换和保持不变。策略和BERT相同,只不过token level改为了span level。span masking例子如下。
在这里插入图片描述

mask效果对比

文章也对不同的mask方式做了对比分析,主要有单个subword mask,整词mask,实体mask,短语mask和span mask几种方式。可见大部分任务上,span masking均是最优的。
在这里插入图片描述

3.1.2 Span Boundary Objective (SBO)

SpanBERT认为span边界词对理解span中的词语意义重大,故提出了一个新的训练目标,也就是SBO。它利用两个边界词的encoding和当前词的position,来预测当前词。实现方式为

  1. 将span左右两个边界词的encoding,和要预测的span中的词的position embedding,concat起来
  2. 经过两层DNN、gelu和归一化,得到预测词的最终向量
  3. 将SBO loss和MLM loss加起来,作为multi-task learning。


在这里插入图片描述
在这里插入图片描述

3.1.3 Single-Sequence Training

SpanBERT认为BERT的NSP反而会降低模型的performance,原因有二

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

3.2 实验结果

3.2.1 抽取式QA、指代消解、关系抽取等与span相关的任务

SpanBERT学习span信息,对抽取式QA、指代消解、关系抽取等与span相关的任务上帮助很大。下面为在抽取式QA SQuAD上的结果
在这里插入图片描述
其中

  1. Google BERT即为原版BERT。
  2. Our BERT采用了原版BERT的结构,对训练过程进行了优化,比如dynamic masking动态掩码、模型超参优化等。
  3. Out BERT-1seq则仅仅去掉NSP,没有加入span masking和SBO。
  4. SpanBERT为加入全部三个改进点,即span masking、SBO、去掉NSP。

可见

  1. 在span类型的任务上,SpanBERT比原版BERT效果好很多,performance大幅提升
  2. 去掉NSP可以带来一定performance提升

3.2.2 span相关度不大任务

文章也在span关联度不大任务上进行了实验,比如GLUE,发现大部分任务效果仍然比BERT好。平均得分提高了2.4个百分点,效果还是杠杠的。
在这里插入图片描述

3.2.3 消融实验

文章也分析了三个创新点各自的作用。如下图所示
在这里插入图片描述
以GLUE任务为例,去掉NSP可以提高0.4个百分点,加入SBO可以提高0.2个百分点。三个创新点均能带来效果的提升。

4 其他预训练任务优化方法

针对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特别适合在生成任务中使用,比如摘要、翻译、问答等。

其他更多的优化方法,就不一一列举了。从训练任务角度来优化预训练模型,还是十分关键和有效的。在我们自己的业务场景中,很多时候训练任务也不一定是很清晰的,我们也一定要注意训练任务的建模方式。

系列文章,请多关注
NLP预训练模型1 – 综述
NLP预训练模型2 – BERT详解和源码分析
NLP预训练模型3 – 预训练任务优化(ERNIE、SpanBERT)
NLP预训练模型4 – 训练方法优化(RoBERTa、T5
NLP预训练模型5 – 模型结构优化(XLNet、ALBERT、ELECTRA)
NLP预训练模型6 – 模型轻量化(ALBERT、Q8BERT、DistillBERT、TinyBERT等)

猜你喜欢

转载自blog.csdn.net/u013510838/article/details/106951646