6.5bert的家族成员-百度的ERNIE,ERNIE2.0,清华的ERNIE,RoBERTa,BERT-WWM,UniLM,MASS,TinyBERT,ELECTRA,SpanBERT
Posted 炫云云
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了6.5bert的家族成员-百度的ERNIE,ERNIE2.0,清华的ERNIE,RoBERTa,BERT-WWM,UniLM,MASS,TinyBERT,ELECTRA,SpanBERT相关的知识,希望对你有一定的参考价值。
语言模型的预训练已导致显着的性能提升,但是不同方法之间的仔细比较是具有挑战性的。 训练在计算上很昂贵,通常是在不同大小的私人数据集上进行的,超参数的选择对最终结果有重大影响。不同的训练方式又诞生出不同的模型,有的模型还在参数上进行优化,使得模型更轻更快,来看看都有哪些不同的预训练模型吧
下面是这篇文章的总结:
百度的ERNIE
ERNIE12将BERT中的随机masking改为实体或短语级别(entity or phrase)的masking(引入知识,Knowledge Integration),使得模型能够从中学习到更多句法语义知识,在许多中文任务上取得SOTA。
上图直观地显示了BERT和ERNIE的采取的不同的masking策略,这是ERNIE引入知识(Knowledge Inegration)的主要手段,介绍如下:
- Basic-Level Masking:这就是BERT中采用的token粒度的随机masked,只能学习到基本的语义信息,对于深层语义信息比较难建模。
- Phrase-Level Masking:短语是几个字词组成的概念单元。英文中可通过词法分析(lexical analysis and chunking tools)获取短语边界,中文中可以使用分词工具获取word/phrase信息。然后,随机masked掉一些phrase。
- Entity-Level Masking:通过命名实体识别(Named Entity Recognition)将实体识别出来,并随机masked掉一些entity。
对话语言模型
上文中的 Knowledge Masking 策略应用于一般的句子型语料,而 ERNIE 在训练数据中增加了问答形式下的对话型文本。针对这一类特殊的文本输入,ERNIE 特别地采用另一种 Masking 模型,对话语言模型DLM将 Masked Language Model 取而代之.
DLM 中,不再构建如同 “[CLS] + Sentence_A + [SEP] + Sentence_B + [SEP]
” 的句子对,而是如同 “[CLS] + Query + [SEP] + Response_A + [SEP] + Response_B + [SEP]
” 的对话三元组,是否上下文连续的二分类训练目标转为预测该对话是否真实 (real/fake)。三元组随机地采用 QRQ、QRR、QQR
其中一种构建形式,上面的例子便是其中的 QRR
。为了给处理后的数据添加噪声,部分的 Query 和 Response 使用不相关的语句进行随机替换,以强制模型学习对话中的语境关联。
在训练一般语料时,ERNIE 采用 Knowledge Masking Strategies 改造后的 Masked LM;而在训练对话型语料时,ERNIE 采用 DLM;两者交替使用。
ERNIE 2.0
ERNIE34发布了2.0版本,支持增量引入不同角度的自定义预训练任务,通过多任务学习(multi-task learning)的方式,更加充分地捕捉语料中词法、语法、语义等信息。成绩自然也再创新高。
亮点:融合了持续学习(continual Learning)、多任务学习、知识引入等多种套路。
模型框架
首先使用一个简单任务训练一个初始模型,然后不断添加新任务,新任务的训练都是在之前的模型上进行的,使得知识不断累积。而且可以同时进行多任务预训练,如下图:
这些任务并非强制性地加入到训练流程中,而是可以针对下游任务,有选择性地挑选一些加入模型。需要注意的是,每次添加任务都需要重新进行一次完整的训练。在开始训练前,每一个任务都会得到一套独立的编码,称为 Task Embedding
,附加在原始的语料输入上。在应用于下游任务的微调时,这一套编码会用于模型的初始化。完整的 ERNIE 2.0 架构如下图所示:
需要指出的是,在多数情况下 ERNIE 2.0 输入的是由两个句子组成的句子对 (如同 BERT 中那样),但在应用于对话型数据时使用 ERNIE 中的 对话语言模型 (Dialogue Language Model),构建对话三元组.
多任务预训练的模式使得模型能够在下游任务中具备更优秀的表现;但相对地,模型的可迁移性将会下降。由于部分任务专门针对特定下游任务设计,当模型的应用场景发生变化时,可能将不得不重新进行预训练以保证模型效果。
Word-aware Pretraining Tasks
多任务中的第一类,用于捕捉词汇 (lexical) 级别的信息。
-
Knowledge Masking:沿袭 ERNIE 1.0 中的 Knowledge Masking Strategies,预测被 Mask 的对象。
-
Capitalization Prediction :预测对象是否大小写 (cased/uncased);ERNIE 2.0 认为大写开头的词汇具备特定的含义,例如人名、地名、机构名等,这将对命名实体识别一类的下游任务有所帮助。
-
Token-Document Relation Prediction:预测对象是否在文档中其它文段有出现;正案例通常包含文档的关键词以及语言通用词,因此添加这一任务有助于模型将更多的注意力放在这一类词汇上。
Structure-aware Pretraining Tasks
这一类用于捕捉语料中语法 (syntactic) 级别的信息,有助于模型应用在自然语言推理、问答等领域。
- Sentence Recording : 针对文档中的每一个段落, 以句子为单位划分为 1 ∼ m 1 \\sim m 1∼m 段, 而后对整个文档所有文段进行打乱排列, 对每一个文段预测原始位置,成为 k k k 分类问题 ( k = ∑ n = 1 m n ! ) 。 \\left(k=\\sum_{n=1}^{m} n !\\right)_{。} (k=∑n=1mn!)。
- Sentence Distance : 取代 Next Sentence Prediction, 预测输入句子对的相对距离:三分类问题, 0 代表两个句子在同一篇文档且距离相近, 1 代表两个句子在同一片文档但距离较远, 2 代表两个句子在不同文档。
Semantic-aware Pretraining Tasks
最后一类用于提取语义 (semantic) 类的信息。
- Discourse Relation :预测两个句子之间的语法及修辞关联。
- IR Relevance :专门为百度搜索引擎日志设计的任务,预测 Query-Title 对的相关性;三分类问题,0 、1 、2 分别代表强相关、弱相关以及不相关;这将有助于标题自动生成以及文本摘要类任务。
清华的ERNIE
已有的预训练语言模型很少考虑知识信息,具体而言即知识图谱(knowledge graphs,KG),知识图谱能够提供丰富的结构化知识事实,以便进行更好的知识理解。简而言之,预训练语言模型只知道语言相关的「合理性」,它并不知道语言到底描述了什么,里面是不是有什么特殊的东西。
ERNIE56789的目标是:以知识图谱中的多信息实体(informative entity)作为外部知识改善语言表征。该模型可以同时充分利用词汇、句法和知识信息。
但是如何把知识图谱中的外部知识组合到语言表征模型中?
原文中所提到的两个挑战:
1)结构化的知识编码:如何从给定的文本高效地抽取并编码对应的知识图谱事实是非常重要的,这些 KG 事实需要能用于语言表征模型。
2)异质信息融合:语言表征的预训练过程和知识表征过程有很大的不同,它们会产生两个独立的向量空间。因此,如何设计一个特殊的预训练目标,以融合词汇、句法和知识信息就显得非常重要了。
- 对于挑战一,解决方法是:
- 首先识别文本中的命名实体,然后将这些提到的实体与知识图谱中的实体进行匹配。
研究者并不直接使用 KG 中基于图的事实,相反他们通过论文9中提出的知识嵌入算法(TransE)编码 KG 的图结构,并将多信息实体嵌入作为 ERNIE 的输入。基于文本和知识图谱的对齐,ERNIE 将知识模块的实体表征整合到语义模块的隐藏层中。
- 对于挑战二,作者的解决方案是:
- 提出了一种知识型编码器(K-Encoder)用于对知识表征和语言表征这两个独立的向量空间进行融合。
模型的整体结构如下:
ERNIE 的整个模型架构由两个堆叠的模块构成:
(1)底层的文本编码器(T-Encoder),负责获取输入 token 的词法和句法信息;T-Encoder和BERT中的Encoder结构相同,这里的Transformer使用了6层(N=6)。
(2)上层的知识型编码器(K-Encoder),负责将额外的 token 的知识信息整合进来自底层的文本信息,这样就可以在一个统一的特征空间中表征 token 和实体的异构信息了。它由M层(论文中M=6)Aggregator堆叠而成。先看输入部分
对于第一层左边的Token Input是T-Encoder的输出,右边的Entity Input是通过论文9中方法抽取的知识表征,对于第二层到第M层则是上层的输出。
然后经过:
其中MH-ATT为多头自注意力机制
随后看下面这一部分:
每个聚合器的这一部分都用于对语言表征和知识表征进行信息融合,具体的融合方法为:
其中使用的激活函数为GELU
对于没有对应实体的部分采用:
ERNIE属于三阶段的模型,第一阶段是通过TransE抽取知识信息(KG中记录了很多三元组关系,(主体,关系,客体),这三类的向量表示初始是随机生成的,通过训练使得主体向量+客体向量近似于关系向量),第二阶段是pre-train融入知识信息的语言模型,第三阶段是结合具体任务进行fine-tuning。
相比于BERT在pre-train阶段ERNIE新增了一个任务denoising entity auto-encoder (dEA)(这个任务是自然而然应该想到的,Bert的MASK预测词采用的就是降噪自编码思想,对于多出的实体任务也应该降噪)
它随机屏蔽了一些对齐的token-entity,然后要求系统根据对齐的token预测所有相应的实体。
考虑到softmax层的E的大小非常大,因此仅要求系统基于给定的实体序列(每句中实体矩阵E仅有该句中所含的实体向量组成)而不是KG中的所有实体来预测实体。通过如下公式进行计算交叉熵损失函数:
注意这里e和经过线性变换后的w运行的点乘,每个token都和该句中的所有实体向量进行相似度运算,从而进行对齐。需要注意的点是,实体是和句中的实体头进行对齐。
针对具体任务进行精调
如图 所示,对于不同类型的常见 NLP 任务,ERNIE 可以采用类似于 BERT 的精调过程。将第一个 token 的最终输出嵌入(其对应于特有的 [CLS] token)用作特定任务的输入序列的表征。
针对某些知识驱动型任务(比如关系分类和实体分型),设计出针对性的精调过程:
关系分类任务需要系统基于上下文分类给定实体对的关系标签。要针对关系分类任务精调 ERNIE,最直接的方法是将池化层应用于给定实体提及的最终输出嵌入,并将它们的提及嵌入的连接结果用于表征给定的实体对,以便进行分类。
ERNIE设计了另一种方法,即通过添加两个标记(mark)
token 来凸显实体提及,从而修改输入 token 序列。这些额外的标记 token 的作用类似于传统的关系分类模型中的位置嵌入。然后,也取其 [CLS] token
嵌入以便分类。注意,头部实体和尾部实体设计了不同的 token [HD]
和 [TL]
。
针对实体分型的特定精调过程是关系分类的一种简化版本。因为之前的分型模型对上下文嵌入和实体提及嵌入都进行了充分的利用 ,所以研究者认为经过提及标记 token [ENT] 修改过的输入序列可以引导 ERNIE 关注将上下文信息与实体提及信息两者结合起来。
RoBERTa
RoBERTa 101112模型是BERT 的改进版(A Robustly Optimized BERT,强力优化的BERT方法)。 在模型规模、算力和数据上,与BERT相比主要有以下几点改进:
- 更大的模型参数量(论文提供的训练时间来看,模型使用 1024 块 V100 GPU 训练了 1 天的时间)
- 更大bacth size。RoBERTa 在训练过程中使用了更大的bacth size。尝试过从 256 到 8000 不等的bacth size。
- 更多的训练数据(包括:CC-NEWS 等在内的 160GB 纯文本。而最初的BERT使用16GB BookCorpus数据集和英语维基百科进行训练)
另外,RoBERTa在训练方法上有以下改进:
- 去掉下一句预测(NSP)任务,训练序列更长。RoBERTa去除了NSP,而是每次输入连续的多个句子,直到最大长度512(可以跨文章)。
- 动态调整Masking机制。 BERT中是准备训练数据时,每个样本只会进行一次随机mask(因此每个epoch都是重复),后续的每个训练步都采用相同的mask,这是原始静态mask,这是原始 BERT 的做法。提出了修改版静态mask,在预处理的时候将数据集拷贝 10 次,每次拷贝采用不同的 mask;然后又提出了动态mask,并没有在预处理的时候执行 mask,而是在每次向模型提供输入时动态生成 mask,所以是时刻变化的。
- 文本编码。Byte-Pair Encoding(BPE)是字符级和词级别表征的混合,支持处理自然语言语料库中的众多常见词汇。原版的 BERT 实现使用字符级别的 BPE 词汇,大小为 30K,是在利用启发式分词规则对输入进行预处理之后学得的。Facebook 研究者没有采用这种方式,而是考虑用更大的 byte 级别 BPE 词汇表来训练 BERT,这一词汇表包含 50K 的 subword 单元,且没有对输入作任何额外的预处理或分词。BPE看看 :NLP subword算法,该论文中的BPE。
BERT-WWM
BERT-WWM13对Bert的改进主要体现在mask的方式上,使用全词mask。其改进点如下:
与百度ERNIE相比,BERT-WWM不仅仅是连续mask实体词和短语,而是连续mask所有能组成中文词语的字。具体做法是,针对中文,如果一个完整的词的部分字被mask,则同属该词的其他部分也会被mask,即对组成同一个词的汉字全部进行Mask,即为全词Mask。
这样做的目的是:预训练过程中,模型能够学习到词的语义信息,训练完成后字的embedding就具有了词的语义信息了,这对各类中文NLP任务都是友好的。
BERT-wwm-ext14是BERT-wwm的一个升级版,相比于BERT-wwm的改进是增加了训练数据集同时也增加了训练步数。
UniLM
ELMo是基于LSTM的两个单向语言模型的拼接;GPT预测文本序列是基于Transformer从左到右逐个word预测;BERT使用双向的Transformer encoder,融合双向的上下文信息,从而预测被masked掉的words。尽管BERT在多个自然语言理解任务上提升显著,但是其双向的天然特性,使其在自然语言生成任务上困难重重。
UNILM能够同时处理自然语言理解和生成任务,它的预训练是基于3个目标:单向LM(包括从左到右和从右到左)、双向LM和sequence-to-sequence LM。该模型采用一个共享参数的Transformer网络的同时还使用了特殊的self-attention masks用以控制预测时候所用到的上下文信息,从而用于不同的下游任务。
单向LM
单向LM包括从左到右和从右到左的LM。在单向LM的预训练过程中,输入仅仅使用单个segment。以从左都右的LM为例,每个token都是基于其左边的上文及其自身的encode结果。为预测 x 1 x 2 [ M A S K ] x 4 , x_{1} x_{2}[M A S K] x_{4}, x1x2[MASK]x4,中的 M A S K M A S K MASK 只有 x 1 、 x 2 x_{1} 、 x_{2} x1、x2 及其自身 [ M A S K ] [\\mathrm{MASK}] [MASK] 会被使用到。其具体通过self-attention mask 矩阵 M \\mathbf{M}_{} M 来实现, 从图中看出上三角矩阵为深灰色, 值为负无穷大(表示阻塞,行方向注意不到其他词), 其他位置为浅灰色(可以看到)
双向LM
BERT就是双向LM。
Seq2Seq LM
在训练的时候,一个序列由[SOS]S_1[EOS]S_2[EOS]
组成,其中S1是source segments,S2是target segments。随机mask两个segment其中的词,其中如果masked是source segment的词的话,则它可以attend to 所有的source segment的tokens,如果masked的是target segment,则模型只能attend to 所有的source tokens 以及target segment 中当前词(包含)和该词左边的所有tokens。这样的话,模型可以隐形地学习到一个双向的encoder和单向decoder。(类似transformer)
MASS
这是微软亚洲研究院在ICML2019的一篇文章1516,在NLP任务上超越了Bert、XLNet、XLM。不仅适用于有监督任务,还适用于无监督任务。而且框架结构非常灵活,可以根据自己的喜好随意调整,真的是太强大了。
MASS采用编码器-解码器框架,根据句子的剩余部分来重构一个句子片段:它的编码器以一个带有随机屏蔽片段(几个连续的单词)的句子作为输入,它的解码器试图预测这个屏蔽片段。通过这种方式,MASS可以联合训练编码器和解码器来开发表示抽取和语言建模的能力。
模型结构
MASS专门针对序列到序列的自然语言生成任务。
MASS对句子随机屏蔽一个长度为k的连续片段,然后通过编码器-注意力-解码器模型预测生成该片段。 模型结构如下:
如上图所示,编码器端的第3-6个词被屏蔽掉,然后解码器端只预测这几个连续的词,而屏蔽掉其它词,图中“_”代表被屏蔽的词。
MASS预训练有以下几大优势:
-
解码器端其它词(在编码器端未被屏蔽掉的词)都被屏蔽掉,以鼓励解码器从编码器端提取信息来帮助连续片段的预测,这样能促进编码器-注意力-解码器结构的联合训练;
-
为了给解码器提供更有用的信息,编码器被强制去抽取未被屏蔽掉词的语义,以提升编码器理解源序列文本的能力。
-
让解码器预测连续的序列片段,以提升解码器的语言建模能力。
统一的预训练框架(包含GPT和Bert)
这部分是MASS的强大之处。
MASS有一个重要的超参数k(屏蔽的连续片段长度),通过调整k的大小,MASS能包含BERT中的屏蔽语言模型训练方法以及GPT中标准的语言模型预训练方法,使MASS成为一个通用的预训练框架。
当k=1时,根据MASS的设定,编码器端屏蔽一个单词,解码器端预测一个单词,如下图所示。这时我们应该会想到Bert只使用了Transformer的编码器模块,如图 3.1 ,此时MASS解码器端没有任何输入信息,就相当于只用到了编码器模块,那么这时MASS等价BERT中的mask语言模型的预训练方法。
当k=m(m为序列长度)时,根据MASS的设定,编码器屏蔽所有的单词,解码器预测所有单词,如下图所示。这时我们又想到GPT只使用了Transformer的解码器模块, 此时由于MASS编码器端所有词都被屏蔽掉,解码器的注意力机制相当于没有获取到信息,在这种情况下MASS等价于GPT中的标准语言模型。
ELECTRA
Bert MLM 方式: 在训练Bert的时候,在输入上操作把15%的token 给替换成Mask,然后这其中有80%是Mask,有10%是替换成其他token ,最后剩下10%保持原来的token 。可以看到,Bert的训练中,每次相当于只有15%的输入上是会有loss的,而其他位置是没有的,这就导致了每一步的训练并没有被完全利用上,导致了训练速度慢。并且存在了预训练和fine-tuning的不匹配,因为在fine-tuning阶段,并不会有[MASK]的token。
- 提出了新的模型预训练的框架,采用生成器和判别器的结合方式,但又不同于GAN
- 将Masked Language Model的方式改为了替换 token 检测,
- 因为MLM能有效地学习到上下文的信息,所以能很好地学习embedding,所以使用了权值共享的方式将生成器的embedding的信息共享给判别器
- 判别器预测了生成器输出的每个token是不是原来的的,从而高效地更新transformer的各个参数,使得模型的熟练速度加快
- 该模型采用了小的生成器以及判别器的方式共同训练,并且采用了两者loss相加,使得判别器的学习难度逐渐地提升,学习到更难的token(plausible tokens)
- 模型在fine-tuning 的时候,丢弃生成器,只使用判别器
核心:将生成式的Masked language model(MLM)预训练任务改成了判别式的Replaced token detection(RTD)任务,判断当前token是否被语言模型替换过;
思路:利用一个基于MLM的Generator来替换example中的某些个token,然后丢给Discriminator来判别
如下图所示,首先会训练一个生成器来生成假样本,然后Electra去判断每个token是不是被替换了。
算法流程
-
Generator G:
- 输入经过随机选择设置为[MASK];
- 输入给 G,G 负责把[MASK]变成替换过的词;
generator的目标函数和bert一样,都是希望被masked的能够被还原成原本的original tokens
如上图, token,the
和cooked
被随机选为被masked,然后generator预测得到替换 tokens,变成了the
和ate
-
Discriminator D:
- 预测输入的句子每个位置上的词语是否被替换过;
所以,对于每个token,discriminator都会进行一个二分类,最后获得loss
SpanBERT
SpanBERT,一种自监督的预训练方法,旨在更好地表示和预测文本的范围.
-
提出了更好的 Span Mask 方案,SpanBERT 不再对随机的单个 token 添加Mask,而是Mask 随机连续的Span;
-
通过加入Span边界目标(SBO) 训练目标,通过使用Span边界的表示来预测被添加Mask的Span的内容,不再依赖Span内单个 token 的表示,增强了 BERT 的性能,特别在一些与 Span 相关的任务,如抽取式问答;
-
去除NSP: 去除 Next Sentence Prediction (NSP) 任务,直接用连续一长句训练效果更好。
模型的原理:
图
18
图 18
图18
图 18:SpanBERT训练的图解。Span
an American football game
是mask的。Span边界目标(SBO)使用边界标记的输出表示形式x4和x9(蓝色)来预测mask Span中的每个标记。该该方程显示了用于预测tokenfootball
(粉红色) 的MLM和SBO损失项,由位置embedding p3所标记,是来自x4的第三个标记
(1)Span mask方案
SpanBERT的做法是 首先从一个几何分布中采样span
长度(单词的数量),它偏向于更短的span
。然后,再根据均匀分布随机选择这一段要屏蔽的跨度的起始点。最后按照长度mask。文中使用几何分布取
p
=
0.2
p=0.2
p=0.2,最大长度只能是 10,利用此方案获得平均采样长度分布。因此分词的平均长度为 3.8 。下图展示了Span
mask长度的几何分布情况。
几
何
分
布
几何分布
几何分布
这样做的目的是:前不久的 MASS 模型,表明可能并不需要想Bert-wmm或者ERNIE那样mask,随机遮盖可能效果也很好。
对于每一个单词序列 X = ( x 1 , . . . , x n ) , X X = (x_1, ..., x_n),X X=(x1,...,xn),X 的15%进行替换,其中 80% 使用 [MASK] 进行替换,10% 使用随机单词替换,10%保持不变。与之不同的是,是连续的Span进行MASK
(2)Span边界目标(SBO)
Span选择模型一般使用其边界词创建一个固定长度的Span表示。为了与该模型相适应,希望结尾Span的表示的总和与中间Span的内容尽量相同。为此,引入了 SBO ,其仅使用观测到的边界词来预测带MASK的Span的内容。
具体做法是,在训练时取 Span 前后边界的两个词,值得指出,这两个词不在 Span 内,然后用这两个词向量加上 Span 中被MASK掉词的位置向量,来预测原词。
y
i
=
f
(
x
s
−
1
,
x
e
+
1
,
p
i
)
\\mathbf{y}_{i}=f\\left(\\mathbf{x}_{s-1}, \\mathbf{x}_{e+1}, \\mathbf{p}_{i}\\right)
yi=f(xs−1,xe+1,pi)
详细做法是将词向量和位置向量拼接起来,使用一个两层的前馈神经网络作为表示函数
f
f
f,该网络使用 GeLu 激活函数,并使用层正则化:
h
=
LayerNorm
(
GeLU
(
W
1
⋅
[
x
s
−
1
;
x
e
+
1
;
p
i
]
)
)
f
(
⋅
)
=
LayerNorm
(
GeLU
(
W
2
⋅
h
)
)
\\begin{aligned} \\mathbf{h} &=\\text { LayerNorm }\\left(\\operatorname{GeLU}\\left(W_{1} \\cdot\\left[\\mathbf{x}_{s-1} ; \\mathbf{x}_{e+1} ; \\mathbf{p}_{i}\\right]\\right)\\right) \\\\ f(\\cdot) &=\\text { LayerNorm }\\left(\\operatorname{GeLU}\\left(W_{2} \\cdot \\mathbf{h}\\right)\\right) \\end{aligned}
hf(⋅)= LayerNorm (GeLU(W1⋅[xs−1;xe+1;pi]))= LayerNorm (GeLU(W2⋅h))
使用向量表示
y
i
\\mathrm{y_i}
yiNLP 大杀器 BERT 源码分析
百度ERNIE新突破 登顶中文医疗信息处理权威榜单CBLUE冠军
百度ERNIE新突破 登顶中文医疗信息处理权威榜单CBLUE冠军