其他分享
首页 > 其他分享> > 6.5bert的家族成员-百度的ERNIE,ERNIE2.0,清华的ERNIE,RoBERTa,BERT-WWM,UniLM,MASS,TinyBERT,ELECTRA,SpanBERT

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)的主要手段,介绍如下:

对话语言模型

上文中的 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) 级别的信息。

Structure-aware Pretraining Tasks

这一类用于捕捉语料中语法 (syntactic) 级别的信息,有助于模型应用在自然语言推理问答等领域

Semantic-aware Pretraining Tasks

最后一类用于提取语义 (semantic) 类的信息。

清华的ERNIE

已有的预训练语言模型很少考虑知识信息,具体而言即知识图谱(knowledge graphs,KG),知识图谱能够提供丰富的结构化知识事实,以便进行更好的知识理解。简而言之,预训练语言模型只知道语言相关的「合理性」,它并不知道语言到底描述了什么,里面是不是有什么特殊的东西。

ERNIE56789目标是:以知识图谱中的多信息实体(informative entity)作为外部知识改善语言表征。该模型可以同时充分利用词汇、句法和知识信息。

但是如何把知识图谱中的外部知识组合到语言表征模型中?

原文中所提到的两个挑战:

1)结构化的知识编码:如何从给定的文本高效地抽取并编码对应的知识图谱事实是非常重要的,这些 KG 事实需要能用于语言表征模型。

2)异质信息融合:语言表征的预训练过程和知识表征过程有很大的不同,它们会产生两个独立的向量空间。因此,如何设计一个特殊的预训练目标,以融合词汇、句法和知识信息就显得非常重要了。

研究者并不直接使用 KG 中基于图的事实,相反他们通过论文9中提出的知识嵌入算法(TransE)编码 KG 的图结构,并将多信息实体嵌入作为 ERNIE 的输入。基于文本和知识图谱的对齐,ERNIE 将知识模块的实体表征整合到语义模块的隐藏层中。

模型的整体结构如下:

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为多头自注意力机制

随后看下面这一部分:

每个聚合器的这一部分都用于对语言表征和知识表征进行信息融合,具体的融合方法为:

img

其中使用的激活函数为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相比主要有以下几点改进:

另外,RoBERTa在训练方法上有以下改进:

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}, x1​x2​[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的连续片段,然后通过编码器-注意力-解码器模型预测生成该片段。 模型结构如下:

 MASS 框架

如上图所示,编码器端的第3-6个词被屏蔽掉,然后解码器端只预测这几个连续的词,而屏蔽掉其它词,图中“_”代表被屏蔽的词。

MASS预训练有以下几大优势

统一的预训练框架(包含GPT和Bert)

这部分是MASS的强大之处。

MASS有一个重要的超参数k(屏蔽的连续片段长度),通过调整k的大小,MASS能包含BERT中的屏蔽语言模型训练方法以及GPT中标准的语言模型预训练方法,使MASS成为一个通用的预训练框架。

k=1时,根据MASS的设定,编码器端屏蔽一个单词,解码器端预测一个单词,如下图所示。这时我们应该会想到Bert只使用了Transformer的编码器模块,如图 3.1 ,此时MASS解码器端没有任何输入信息,就相当于只用到了编码器模块,那么这时MASS等价BERT中的mask语言模型的预训练方法。

图 3.1

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。

ELECTRA 17181920的创新点在于:

核心:将生成式的Masked language model(MLM)预训练任务改成了判别式的Replaced token detection(RTD)任务,判断当前token是否被语言模型替换过;

思路:利用一个基于MLM的Generator来替换example中的某些个token,然后丢给Discriminator来判别

如下图所示,首先会训练一个生成器来生成假样本,然后Electra去判断每个token是不是被替换了。

算法流程

  1. Generator G:

    1. 输入经过随机选择设置为[MASK];
    2. 输入给 G,G 负责把[MASK]变成替换过的词;

    generator的目标函数和bert一样,都是希望被masked的能够被还原成原本的original tokens
    如上图, token,thecooked 被随机选为被masked,然后generator预测得到替换 tokens,变成了theate

  2. Discriminator D:

    1. 预测输入的句子每个位置上的词语是否被替换过;

所以,对于每个token,discriminator都会进行一个二分类,最后获得loss

SpanBERT

SpanBERT2122对 BERT 模型进行了如下改进:

  1. 提出了更好的 Span Mask 方案,SpanBERT 不再对随机的单个 token 添加Mask,而是对随机对邻接分词添加Mask;

  2. 通过加入 Span Boundary Objective (SBO) 训练目标,通过使用分词边界的表示来预测被添加Mask的分词的内容,不再依赖分词内单个 token 的表示,增强了 BERT 的性能,特别在一些与 Span 相关的任务,如抽取式问答;

  3. 去除NSP:不加入 Next Sentence Prediction (NSP) 任务,直接用连续一长句训练效果更好。

模型的原理:

SpanBERT训练的图解。Spanan American football game是mask的。分词边界目标(SBO)使用边界标记的输出表示形式x4和x9(蓝色)来预测mask Span中的每个标记。该该方程显示了用于预测token football (粉红色) 的MLM和SBO损失项,由位置embedding p3所标记,是来自x4的第三个标记

(1)Span mask方案

SpanBERT的做法是根据几何分布,先随机选择一段(span)的长度,之后再根据均匀分布随机选择这一段的起始位置,最后按照长度遮盖。文中使用几何分布取 p = 0.2 p=0.2 p=0.2,最大长度只能是 10,利用此方案获得平均采样长度分布。因此分词的平均长度为 3.8 。下图展示了分词掩膜长度的几何分布情况。

几何分布

这样做的目的是:前不久的 MASS 模型,表明可能并不需要想Bert-wmm或者ERNIE那样mask,随机遮盖可能效果也很好。

对于每一个单词序列 X = (x1, …, xn),X 的15%进行替换,其中 80% 使用 [MASK] 进行替换,10% 使用随机单词替换,10%保持不变。与之不同的是,是在分词级别进行的这一替换,而非将每个单词单独替换。

(2)分词边界目标(SBO)

分词选择模型一般使用其边界词创建一个固定长度的分词表示。为了与该模型相适应,希望结尾分词的表示的总和与中间分词的内容尽量相同。为此,引入了 SBO ,其仅使用观测到的边界词来预测带MASK的分词的内容。

具体做法是,在训练时取 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​)
详细做法是将词向量和位置向量拼接起来,使用一个两层的前馈神经网络作为表示函数,该网络使用 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{yi} yi 来预测 xi,并和 MLM 一样使用交叉熵作为损失函数,就是 SBO 目标的损失,之后将这个损失和 BERT 的 **Mased Language Model (MLM)**的损失加起来,一起用于训练模型。
L (  football  ) = L M L M ( x 7 ) + L S B O ( x 4 , x 9 , p 7 ) \mathcal{L}(\text { football })=\mathcal{L}_{\mathrm{MLM}}\left(\mathrm{x}_{7}\right)+\mathcal{L}_{\mathrm{SBO}}\left(\mathrm{x}_{4}, \mathrm{x}_{9}, \mathbf{p}_{7}\right) L( football )=LMLM​(x7​)+LSBO​(x4​,x9​,p7​)
(3)去除NSP任务

SpanBERT 还有一个和原始 BERT 训练很不同的地方,它没用 Next Sentence Prediction (NSP) 任务,而是直接用 Single-Sequence Training,也就是根本不加入 NSP 任务来判断是否两句是上下句,直接用一句来训练。其可能原因如下:

其中主要训练细节是:

MT-DNN

提出了一种多任务深度神经网络 (MT-DNN232425) ,用于跨多种自然语言理解任务的学习表示。MT-DNN 一方面使用了大量跨任务数据,另一方面得益于正则化效果,这种效果使得学习到的表示具有更强的泛化能力,有助于使用到新的任务和领域。

多任务学习( MTL )的灵感来自于人的学习活动。在人类的学习活动中,人们经常应用从以前的任务中学到的知识来帮助学习新的任务。与多任务学习不同,语言模型预训练已经被证明对学习通用语言表示很有用,因为这样可以轻易利用大量的无监督文本,比如elmo,gpt和bert。

本文认为MTL和预训练语言模型是互补的技术,可以结合起来提高文本表征的学习效果,进而提高各种自然语言处理任务性能的表现。为此,本文扩展了MT-DNN,将BERT作为共享的文本编码层

模型

MT-DNN的体系结构如上图所示。底层在所有任务中共享,顶层代表特定任务的输出。输入 X X X是一个单词序列(一个句子或一对组合在一起的句子对),首先在 l 1 l_1 l1​中表示为一系列embedding向量,每个单词对应一个向量。然后输入到特征提取器transformer,transformer通过self-attention在 l 2 l_2 l2​中生成一系列上下文表示(语境嵌入序列)。最后,针对每个任务,特定任务层生成特定任务的表征,而后是分类、相似性打分、关联排序等必需的操作。

BERT的fine-tune是针对不同的任务在编码层后面加上task-layer,而MT-DNN就是把所有任务fine-tune的步骤都拼到了一起。这里根据输出的不同将任务分成了四种。

下面对各个层进行详细阐述。

Lexicon Encoder ( l 1 ) \left(l_{1}\right) (l1​) :

其输入 X = { x 1 , x 2 , … , x m } X=\left\{x_{1}, x_{2}, \ldots, x_{m}\right\} X={x1​,x2​,…,xm​} 是长度为m的tokens。第一个字符永远是[CLS]字符, 如果有两个句子, 那就中间加一个 [ S E P ] [\mathrm{SEP}] [SEP] 字符 lexicon encoder是一个词向量层, 将输入 X X X 映射为一系列的嵌入向量。这里还有position encoding和segment encodig这些操作。

Transformer Encoder ( l 2 ) \left(l_{2}\right) (l2​) :

利用transformer把输入的向量表示 X X X 映射为变成上下文表示 C C_{} C​ .其在不同任务间共享参数。bert要通过预训练学习表示方法,然后通过微调将其用于其他任务,而MT-DNN使用多任务目标学习其表示。

多任务:

Single-Sentence Classification单句分类 Output:

假设[CLS]字符在 l 2 l_{2} l2​ 层中的上下文嵌入结果是X, 其可以视为输入句子 X X X 的语义表征。以SST-2任务为例, 句子 X X X 被分为 c c c 类的概率如下(通 过一个softmax做出决策):
P r ( c ∣ X ) = softmax ⁡ ( W S S T ⊤ ⋅ x ) P_{r}(c \mid X)=\operatorname{softmax}\left(\mathbf{W}_{S S T}^{\top} \cdot \mathbf{x}\right) Pr​(c∣X)=softmax(WSST⊤​⋅x)
其中 W S S T W_{S S T} WSST​ 是特定任务的参数矩阵。

Text Similarity 文本相似度Output:

\quad 假设 x \mathbf{x} x是[CLS]的上下文嵌入 ( l 2 ) \left(l_{2}\right) (l2​),可以看作是输入句子对的语义 ( X 1 , X 2 ) \left(X_{1}, X_{2}\right) (X1​,X2​)表示。引入一个特定于任务的参数向量 w S T S \mathbf{w}_{S T S} wSTS​来计算相似度评分:
Sim ⁡ ( X 1 , X 2 ) = w S T S ⊤ ⋅ x \operatorname{Sim}\left(X_{1}, X_{2}\right)=\mathbf{w}_{S T S}^{\top} \cdot \mathbf{x} Sim(X1​,X2​)=wSTS⊤​⋅x
Pairwise Text Classification 成对文本分类(文本蕴含)Output:

以自然语言推理(NLI)任务为例。此类任务数据定义前题句 P = ( p 1 , p 2 … p m ) , P=\left(p_{1}, p_{2} \ldots p_{m}\right), P=(p1​,p2​…pm​), 一个假设句 H = H= H= ( h 1 , h 2 , … h n ) , \left(h_{1}, h_{2}, \ldots h_{n}\right), (h1​,h2​,…hn​), 长度分别为m和n, 目的是找出两句之间的关系 R R_{} R​ .输出模块的设计仿照SAN(stochastic answer networ)的答案模块。 SAN的答案模块使用多轮推理, 而不是给定输入直接预测, 它保持一个状态, 然后迭代地更新它的预测。

SAN的答案模块具体介绍如下。把前提句P的transformer输出拼接起来作为working memory, 对于假设句H的操作同样。分别得到 M P ∈ R d × m M^{P} \in R^{d \times m} MP∈Rd×m 和 M h ∈ R d × n 。 M^{h} \in R^{d \times n} 。 Mh∈Rd×n。 然后在memeory上执行 K K K轮的推理来输出预测, K是一个超参数。初始状态 s 0 s^{0} s0 是 M h M^{h} Mh 的加权和: s 0 = s^{0}= s0= Σ j α j M j h \Sigma_{j} \alpha_{j} M_{j}^{h} Σj​αj​Mjh​,其中加权和的权重 α \alpha α 由H的自注意力评分加softmax得到。在第 k k k次迭代, 其状态更新为 s k = G R U ( s k − 1 , x k ) s^{k}=G R U\left(s^{k-1}, x^{k}\right) sk=GRU(sk−1,xk) 。其中 x k x^{k} xk 从前一 步状态 s k − 1 s^{k-1} sk−1 和memory M p M^{p} Mp 中计算:
x k = Σ j β j M j p , β j = softmax ⁡ ( s k − 1 W 2 T M p ) x^{k}=\Sigma_{j} \beta_{j} M_{j}^{p}, \beta_{j}=\operatorname{softmax}\left(s^{k-1} W_{2}^{T} M^{p}\right) xk=Σj​βj​Mjp​,βj​=softmax(sk−1W2T​Mp)
在每个推理迭代过程, 用一个单层线性分类器用做预测
P r k = softmax ⁡ ( W 3 ⊤ [ s k ; x k ; ∣ s k − x k ∣ ; s k ⋅ x k ] ) P_{r}^{k}=\operatorname{softmax}\left(\mathbf{W}_{3}^{\top}\left[\mathbf{s}^{k} ; \mathbf{x}^{k} ;\left|\mathbf{s}^{k}-\mathbf{x}^{k}\right| ; \mathbf{s}^{k} \cdot \mathbf{x}^{k}\right]\right) Prk​=softmax(W3⊤​[sk;xk;∣∣​sk−xk∣∣​;sk⋅xk])
最后将次的输出结果平均:
P r = avg ⁡ ( [ P r 0 , P r 1 , … , P r K − 1 ] ) P_{r}=\operatorname{avg}\left(\left[P_{r}^{0}, P_{r}^{1}, \ldots, P_{r}^{K-1}\right]\right) Pr​=avg([Pr0​,Pr1​,…,PrK−1​])
训练过程中我们在上面的平均操作前应用随机预测drop(stochastic prediction dropout)。在解码阶段,平均所有输出,来提高鲁棒性。

Relevance Ranking相关性排序 Output:

假设 x x x是[CLS]的上下文嵌入向量,它是一对问题及其候选问题 ( Q , A ) (Q,A) (Q,A)的语义表示 。通过一个sigmoid计算相关性得分,然后对各个候选答案的得分重排,大的更有关。
Rel ⁡ ( Q , A ) = g ( w Q N L I ⊤ ⋅ x ) \operatorname{Rel}(Q, A)=g\left(\mathbf{w}_{Q N L I}^{\top} \cdot \mathbf{x}\right) Rel(Q,A)=g(wQNLI⊤​⋅x)

训练过程

MT-DNN 的训练程序包含两个阶段:预训练和多任务微调。预训练阶段遵循 BERT 模型的方式。lexicon encoder和Transformer encoder参数的学习是通过两个无监督预测任务:masked语言建模和下一句预测。

在多任务微调阶段,使用基于minibatch的随机梯度下降(SGD)来学习模型参数(也就是,所有共享层和任务特定层的参数),算法流程如下图所示。每个epoch,选择一个mini-batch b t b_t bt​ (在9个GLUE任务中),再对特定任务 k k k 进行模型参数的更新。这近似地优化所有多任务的和。

对个每个任务的数据集, 进行mini-batch, 得到 D t D_{t } Dt​ , b t b_{t} bt​ 是任务t的一个mini-batch, 再用该数据 再统一计算梯度下降,更新模型参数。

对于分类任务(单句子分类或者文本蕴含分类):定义交叉嫡损失函数:
− ∑ c 1 ( X , c ) log ⁡ ( P r ( c ∣ X ) ) -\sum_{c} \mathbb{1}(X, c) \log \left(P_{r}(c \mid X)\right) −c∑​1(X,c)log(Pr​(c∣X))
其中 1 ( x , c ) 1(\mathrm{x}, \mathrm{c}) 1(x,c) 是二分类结果(0或者1)。

对于文本相似度 (回归) 任务:例如STS-B任务, 每个句子对相似程度被标注为一个真实值 y y y ,使用均方误差作为目标函数:
( y − Sim ⁡ ( X 1 , X 2 ) ) 2 \left(y-\operatorname{Sim}\left(X_{1}, X_{2}\right)\right)^{2} (y−Sim(X1​,X2​))2
其中 S i m S i m Sim 函数上面方程中定义过了。

对于相关性排序:

以QNLI任务为例,给定问句 Q , Q, Q, 候选答案 A ( A\left(\right. A( 其中包含一个正确答案 A + , A^{+}, A+, 其他剩余答案为错误答案, 即负样本)。目标函数是在给定问句 的前提下,最小化正样本的对数似然的负数:
− ∑ ( Q , A + ) P r ( A + ∣ Q ) P r ( A + ∣ Q ) = exp ⁡ ( γ Rel ⁡ ( Q , A + ) ) ∑ A ′ ∈ A exp ⁡ ( γ Rel ⁡ ( Q , A ′ ) ) \begin{array}{c} -\sum_{\left(Q, A^{+}\right)} P_{r}\left(A^{+} \mid Q\right) \\ P_{r}\left(A^{+} \mid Q\right)=\frac{\exp \left(\gamma \operatorname{Rel}\left(Q, A^{+}\right)\right)}{\sum_{A^{\prime} \in \mathcal{A}} \exp \left(\gamma \operatorname{Rel}\left(Q, A^{\prime}\right)\right)} \end{array} −∑(Q,A+)​Pr​(A+∣Q)Pr​(A+∣Q)=∑A′∈A​exp(γRel(Q,A′))exp(γRel(Q,A+))​​
γ \gamma γ 是留存数据的调节因子,在本文的实验中该参数设置为1。

参考


  1. ERNIE: Enhanced Representation through Knowledge Integration ↩︎

  2. https://github.com/PaddlePaddle/LARK/tree/develop/ERNIE ↩︎

  3. ERNIE 2.0: A CONTINUAL PRE-TRAINING FRAMEWORK FOR LANGUAGE UNDERSTANDING ↩︎

  4. https://github.com/PaddlePaddle/ERNIE ↩︎

  5. https://arxiv.org/pdf/1905.07129.pdf ↩︎

  6. https://github.com/thunlp/ERNIE ↩︎

  7. https://cloud.tencent.com/developer/article/1438052 ↩︎

  8. https://www.ramlinbird.com/2019/08/06/ernie%E5%8F%8Aernie-2-0%E8%AE%BA%E6%96%87%E7%AC%94%E8%AE%B0/ ↩︎

  9. Translating Embeddings for Modeling Multi-relational Data ↩︎ ↩︎ ↩︎

  10. https://arxiv.org/pdf/1907.11692.pdf ↩︎

  11. https://github.com/brightmart/roberta_zh(中文) ↩︎

  12. https://github.com/pytorch/fairseq(英文) ↩︎

  13. https://arxiv.org/pdf/1906.08101 ↩︎

  14. https://github.com/brightmart/albert_zh ↩︎

  15. MASS: Masked Sequence to Sequence Pre-training for Language Generation ↩︎

  16. 代码 https://github.com/microsoft/MASS ↩︎

  17. ELECTRA: Pre-training Text Encoders as Discriminators Rather Than Generator ↩︎

  18. Code:Google Code ELECTRA-tiny_cn ↩︎

  19. 哈工大中文预训练ELECTRA模型 ↩︎

  20. https://zhuanlan.zhihu.com/p/118135466 ↩︎

  21. SpanBERT: Improving Pre-training by Representing and Predicting Spans ↩︎

  22. https://blog.csdn.net/qq_38556984/article/details/107501414 ↩︎

  23. Multi-Task Deep Neural Networks for Natural Language Understanding ↩︎

  24. https://github.com/namisan/mt-dnn ↩︎

  25. https://paperswithcode.com/paper/multi-task-deep-neural-networks-for-natural ↩︎

标签:bert,RoBERTa,right,ERNIE,训练,BERT,模型,任务,left
来源: https://blog.csdn.net/qq_43940950/article/details/116459734