文章目录
语言模型的预训练已导致显着的性能提升,但是不同方法之间的仔细比较是具有挑战性的。 训练在计算上很昂贵,通常是在不同大小的私人数据集上进行的,超参数的选择对最终结果有重大影响。不同的训练方式又诞生出不同的模型,有的模型还在参数上进行优化,使得模型更轻更快,来看看都有哪些不同的预训练模型吧
下面是这篇文章的总结:
百度的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
-
提出了更好的 Span Mask 方案,SpanBERT 不再对随机的单个 token 添加Mask,而是对随机对邻接分词添加Mask;
-
通过加入 Span Boundary Objective (SBO) 训练目标,通过使用分词边界的表示来预测被添加Mask的分词的内容,不再依赖分词内单个 token 的表示,增强了 BERT 的性能,特别在一些与 Span 相关的任务,如抽取式问答;
-
去除NSP:不加入 Next Sentence Prediction (NSP) 任务,直接用连续一长句训练效果更好。
模型的原理:
SpanBERT训练的图解。Span
an American football game
是mask的。分词边界目标(SBO)使用边界标记的输出表示形式x4和x9(蓝色)来预测mask Span中的每个标记。该该方程显示了用于预测tokenfootball
(粉红色) 的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 任务来判断是否两句是上下句,直接用一句来训练。其可能原因如下:
- (a)更长的语境对模型更有利,模型可以获得更长上下文(类似 XLNet 的一部分效果);
- (b)加入另一个文本的语境信息会给MLM 语言模型带来噪音。
其中主要训练细节是:
- 训练时用了 Dynamic Masking 而不是像 BERT 在预处理时做 Mask;
- 取消 BERT 中随机采样短句的策略;
- 还有对 Adam 优化器中一些参数改变。
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αjMjh,其中加权和的权重
α
\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βjMjp,βj=softmax(sk−1W2TMp)
在每个推理迭代过程, 用一个单层线性分类器用做预测。
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′∈Aexp(γRel(Q,A′))exp(γRel(Q,A+))
γ
\gamma
γ 是留存数据的调节因子,在本文的实验中该参数设置为1。
参考
-
ERNIE: Enhanced Representation through Knowledge Integration ↩︎
-
https://github.com/PaddlePaddle/LARK/tree/develop/ERNIE ↩︎
-
ERNIE 2.0: A CONTINUAL PRE-TRAINING FRAMEWORK FOR LANGUAGE UNDERSTANDING ↩︎
-
https://github.com/PaddlePaddle/ERNIE ↩︎
-
https://arxiv.org/pdf/1905.07129.pdf ↩︎
-
https://github.com/thunlp/ERNIE ↩︎
-
https://cloud.tencent.com/developer/article/1438052 ↩︎
-
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/ ↩︎
-
Translating Embeddings for Modeling Multi-relational Data ↩︎ ↩︎ ↩︎
-
https://arxiv.org/pdf/1907.11692.pdf ↩︎
-
https://github.com/brightmart/roberta_zh(中文) ↩︎
-
https://github.com/pytorch/fairseq(英文) ↩︎
-
https://arxiv.org/pdf/1906.08101 ↩︎
-
https://github.com/brightmart/albert_zh ↩︎
-
MASS: Masked Sequence to Sequence Pre-training for Language Generation ↩︎
-
代码 https://github.com/microsoft/MASS ↩︎
-
ELECTRA: Pre-training Text Encoders as Discriminators Rather Than Generator ↩︎
-
Code:Google Code ELECTRA-tiny_cn ↩︎
-
https://zhuanlan.zhihu.com/p/118135466 ↩︎
-
SpanBERT: Improving Pre-training by Representing and Predicting Spans ↩︎
-
https://blog.csdn.net/qq_38556984/article/details/107501414 ↩︎
-
Multi-Task Deep Neural Networks for Natural Language Understanding ↩︎
-
https://github.com/namisan/mt-dnn ↩︎
-
https://paperswithcode.com/paper/multi-task-deep-neural-networks-for-natural ↩︎