【NLP】ELMO、GPT、BERT、BART模型解读及对比分析
文章目录
- 一、基础知识
- 1.1 Word Embedding(词嵌入)
- 1.2 词嵌入模型
- 1.3 神经网络语言模型NNLM
- 二、ELMO
- 2.1 ELMO的提出
- 2.2 ELMO核心思想
- 2.3 ELMO的优缺点
- 三、GPT
- 3.1 Transformer
- 3.2 GPT简介
- 3.3 GPT模型架构
- 3.4 预训练及微调
- 3.5 GPT和ELMO对比
- 四、BERT
- 4.1 BERT简介
- 4.2 BERT预训练
- 4.3 BERT的优缺点
- 4.4 GPT和BERT对比
- 4.5 从word2Vec, ELMO, GPT 到BERT
- 五、BART
- 5.1 从GPT, BERT到BART
- 5.2 BART的损失函数
- 5.3 BART的噪声Noise
- 5.4 BART在下游任务上的应用
- 参考资料
一、基础知识
1.1 Word Embedding(词嵌入)
Word Embedding(词嵌入) 技术是自然语言处理(NLP)领域的一项重大创新,它极大地推动了计算机理解和处理人类语言的能力。词嵌入技术通过将单词、句子甚至图像转换为数字向量,不仅改善了文本的表示方式,更重要的是,它捕捉到了语言的本质和丰富的语义信息。
![](https://i-blog.csdnimg.cn/direct/86d503526f55497c80df6646464200d4.png#pic_center)
1.2 词嵌入模型
词嵌入模型: 利用深度学习方法,通过训练大规模语料库来学习词的向量表示。这些模型,如Word2Vec和GloVe等,能够捕捉词的语义和语法信息,将词表示为高维空间中的向量。
-
Word2Vec:
- 【NLP】理解word2vec的CBOW与Skip-Gram模型
- https://github.com/NLP-LOVE/ML-NLP/tree/master/NLP/16.1%20Word%20Embedding
-
GloVe:
- https://github.com/NLP-LOVE/ML-NLP/tree/master/NLP/16.3%20GloVe
1.3 神经网络语言模型NNLM
神经网络语言模型(NNLM)由Bengio等人提出,通过嵌入层将单词映射到连续的向量空间中,并通过多个隐藏层来学习语言的内部结构。NNLM能够捕捉词与词之间的语义关系,提高了语言模型的预测能力。
神经网络语言模型NNLM的典型做法为:在训练过程中,输入某个句中单词 W t = ( B e r t ) W_t = (Bert) Wt=(Bert) 前面句子的 t − 1 t-1 t−1个单词,要求网络正确预测单词Bert,即最大化:
前面任意单词 W i W_i Wi 用Onehot编码(比如:0001000)作为原始单词输入,之后乘以矩阵 Q Q Q 后获得向量 C ( W i ) C(W_i) C(Wi) ,每个单词的 C ( W i ) C(W_i) C(Wi) 拼接,上接隐层,然后接softmax去预测后面应该后续接哪个单词。
这个 C ( W i ) C(W_i) C(Wi) 是什么?这其实就是单词对应的Word Embedding值,矩阵 Q Q Q 包含 V V V行, V V V代表词典大小,每一行内容代表对应单词的Word embedding值。只不过 Q Q Q 的内容也是网络参数,需要学习获得,训练刚开始用随机值初始化矩阵 Q Q Q,当这个网络训练好之后,矩阵 Q Q Q的内容被正确赋值,每一行代表一个单词对应的Word embedding值。所以你看,通过这个网络学习语言模型任务,这个网络不仅自己能够根据上文预测后接单词是什么,同时获得一个副产品,就是那个矩阵 Q Q Q,这就是单词的Word Embedding。
但是,这样训练及使用Word Embedding的效果并没有期待中那么好?
主要原因在于Word Embedding无法有效解决多义词问题。比如多义词Apple,可以代表“水果苹果”或者“苹果科技公司”。但是Word Embedding在对bank这个单词进行编码的时候,是区分不开这两个含义的。因为它们尽管上下文环境中出现的单词不同,但是在用语言模型训练的时候,不论什么上下文的句子经过word2vec,都是预测相同的单词Apple,而同一个单词占的是同一行的参数空间,这导致两种不同的上下文信息都会编码到相同的Word Embedding空间里去。所以Word Embedding无法区分多义词的不同语义,这就是它的一个比较严重的问题。
二、ELMO
2.1 ELMO的提出
针对Word Embedding无法有效解决多义词问题,有没有简单优美的解决方案呢?ELMO提供了一种简洁优雅的解决方案。
ELMO是“Embedding from Language MOdels”的简称,其实这个名字并没有反应它的本质思想,提出ELMO的论文题目:“Deep contextualized word representation” 更能体现其精髓,而精髓在哪里?在deep contextualized这个短语,一个是deep,一个是context,其中context更关键。
在此之前的Word Embedding本质上是个静态的方式,所谓静态指的是训练好之后每个单词的表达就固定住了,以后使用的时候,不论新句子上下文单词是什么,这个单词的Word Embedding不会跟着上下文场景的变化而改变。所以对于比如Bank这个词,它事先学好的Word Embedding中混合了几种语义 ,在应用中来了个新句子,即使从上下文中(比如句子包含money等词)明显可以看出它代表的是“银行”的含义,但是对应的Word Embedding内容也不会变,它还是混合了多种语义。这是为何说它是静态的,这也是问题所在。
ELMO的本质思想是: 事先用语言模型学好一个单词的Word Embedding,此时多义词无法区分,不过这没关系。在我实际使用Word Embedding的时候,单词已经具备了特定的上下文了,这个时候我可以根据上下文单词的语义去调整单词的Word Embedding表示,这样经过调整后的Word Embedding更能表达在这个上下文中的具体含义,自然也就解决了多义词的问题了。所以 ELMO本身是个根据当前上下文对Word Embedding动态调整的思路。
2.2 ELMO核心思想
ELMO采用了典型的两阶段过程:
- 第一个阶段是利用语言模型进行预训练;
- 第二个阶段是在做下游任务时,从预训练网络中提取对应单词的网络各层的Word Embedding作为新特征补充到下游任务中。
(1)第一阶段:预训练
上图展示的是其预训练过程,它的网络结构采用了双层双向LSTM,目前语言模型训练的任务目标是根据单词 W i W_i Wi 的上下文去正确预测单词 W i W_i Wi , W i W_i Wi 之前的单词序列Context-before称为上文,之后的单词序列Context-after称为下文。
图中左端的前向双层LSTM代表正方向编码器,输入的是从左到右顺序的除了预测单词外 W i W_i Wi 的上文Context-before;右端的逆向双层LSTM代表反方向编码器,输入的是从右到左的逆序的句子下文Context-after;每个编码器的深度都是两层LSTM叠加。
这个网络结构其实在NLP中是很常用的。使用这个网络结构利用大量语料做语言模型任务就能预先训练好这个网络,如果训练好这个网络后,输入一个新句子,句子中每个单词都能得到对应的三个Embedding:
- 最底层是单词的Word Embedding;
- 往上走是第一层双向LSTM中对应单词位置的Embedding,这层编码单词的句法信息更多一些;
- 再往上走是第二层LSTM中对应单词位置的Embedding,这层编码单词的语义信息更多一些。
也就是说,ELMO的预训练过程不仅仅学会单词的Word Embedding,还学会了一个双层双向的LSTM网络结构,而这两者后面都有用。
(2)第二阶段:应用至下游任务
上图展示了下游任务的使用过程,比如我们的下游任务仍然是QA问题:
- 此时对于问句X,我们可以先将句子X作为预训练好的ELMO网络的输入,这样句子X中每个单词在ELMO网络中都能获得对应的三个Embedding;
- 之后给予这三个Embedding中的每一个Embedding一个权重a,这个权重可以学习得来,根据各自权重累加求和,将三个Embedding整合成一个;
- 然后将整合后的这个Embedding作为X句在自己任务的那个网络结构中对应单词的输入,以此作为补充的新特征给下游任务使用。对于上图所示下游任务QA中的回答句子Y来说也是如此处理。
从这里可以看出,对于一个单词i的词向量,每次生成时都是根据当前输入的整个序列得到的,因此利用了当前的语境信息,是一个动态得到的词向量,解决了同一个单词在不同语境下含义不同的问题。
因为ELMO给下游提供的是每个单词的特征形式,所以这一类预训练的方法被称为 “Feature-based Pre-Training”。
2.3 ELMO的优缺点
(1)ELMO的优点
- ELMO解决了静态Word Embedding无法解决多义词的问题。
对于Glove训练出的Word Embedding来说,多义词比如play,根据它的embedding找出的最接近的其它单词大多数集中在体育领域,这很明显是因为训练数据中包含play的句子中体育领域的数量明显占优导致;而使用ELMO,根据上下文动态调整后的embedding不仅能够找出对应的“演出”的相同语义的句子,而且还可以保证找出的句子中的play对应的词性也是相同的,这是超出期待之处。之所以会这样,是因为我们上面提到过,第一层LSTM编码了很多句法信息,这在这里起到了重要作用。
(2)ELMO的缺点
- 在特征抽取器选择方面,ELMO使用了LSTM而不是新贵Transformer。
Transformer是谷歌在17年做机器翻译任务的“Attention is all you need”的论文中提出的,引起了相当大的反响,很多研究已经证明了Transformer提取特征的能力是要远强于LSTM的。如果ELMO采取Transformer作为特征提取器,那么估计Bert的反响远不如现在的这种火爆场面。 - ELMO采取双向拼接这种融合特征的能力可能比Bert一体化的融合特征方式弱,但是,这只是一种从道理推断产生的怀疑,目前并没有具体实验说明这一点。
三、GPT
3.1 Transformer
在正式介绍GPT之前,首先介绍一下Transformer。具体可以参考博客:Transformer 模型详解
后续的许多大语言模型都是基于Transformer 架构设计而来。
3.2 GPT简介
GPT(Generative Pre-trained Transformer)是由 OpenAI 开发的一类生成式预训练语言模型。基于 Transformer 架构,GPT 模型具备强大的自然语言处理能力,能够通过自回归方式生成文本。自首次推出以来,GPT 系列模型在多个领域的文本生成任务中表现出色,并在语言建模、文本生成、对话系统等任务中取得了显著的成果。
GPT 系列模型的核心优势在于其预训练-微调(Pre-training & Fine-tuning)的训练策略。通过在大规模文本数据集上进行预训练,GPT 模型能够从海量数据中学习语言规律,再通过微调,适应特定任务需求。这一设计使 GPT 模型在具备通用语言能力的同时,也能够灵活应用于各种下游任务。
随着技术的不断进步,GPT模型已经推出了多个版本,包括GPT-1、GPT-2、GPT-3和GPT-4等。
3.3 GPT模型架构
GPT 模型的基础架构是 Transformer。Transformer 架构利用了自注意力机制,使得模型能够处理长序列数据,而无需像 RNN 或 LSTM 那样依赖递归操作,从而提高了计算效率和并行处理能力。
GPT(Generative Pre-trained Transformer)模型是基于 Transformer 的 解码器 部分构建的,它采用了 Transformer 的自注意力机制来建模语言数据中的长距离依赖关系。
在Transformer架构的基础上,OpenAI在其论文《Improving Language Understanding by Generative Pre-Training》中讲述了通过自注意力机制简化transform模型架构的思路,只使用Decoder架构的机制奠定了GPT系列的架构基础。GPT 的架构如图如下:
GPT 模型的核心架构包括以下几层:
- 输入嵌入层:将输入的词序列转换为向量表示。
- 多层 Transformer 解码器:通过自注意力机制处理序列中的依赖关系。
- 输出层:将模型的输出映射到词汇表中的概率分布,生成下一个词。
其中Transformer 解码器的每一层都包含以下模块:
- 多头自注意力机制(Multi-head Self-Attention):输入序列被分为多个头(Heads),每个头学习一种不同的表示方式。每个头应用一个类似于注意力机制的加权函数,以确定每个位置对其他位置的重要性。这种机制使得模型能够高效地处理长序列数据,并捕捉序列中的依赖关系。
- 前馈神经网络(Feed-forward Neural Network):模型将自注意力层的输出输入到一个全连接神经网络中,以学习特征表示之间的非线性关系。这种结构增强了模型的表示学习能力,使其能够捕捉更复杂的语言模式和结构。
- 残差连接(Residual Connections)和层归一化(Layer Normalization):用于缓解深度神经网络在训练过程中可能出现的梯度消失或爆炸问题,提高训练的稳定性和模型性能。
GPT 的关键特点是基于 自回归 模型进行文本生成,即通过生成当前词后再预测下一个词,直至生成完整的句子。这种架构使得GPT模型在处理自然语言任务时具有出色的性能,能够生成高质量、连贯的文本内容。
3.4 预训练及微调
GPT 训练过程分为两个阶段:第一个阶段是 Pre-training 阶段,主要利用大型语料库完成非监督学习;第二阶段是 Fine-tuning,针对特定任务在相应数据集中进行监督学习,通过 Fine-tuning 技术来适配具体任务。
(1)Pre-training
GPT 采用 Transformer 来代替 LSTM 作为特征提取器,并基于语言模型进行训练。这里只使用了 Transformer 的 Decoder 部分,并且每个子层只有一个 Masked Multi Self-Attention(768 维向量和 12 个 Attention Head)和一个 Feed Forward,共叠加使用了 12 层的 Decoder。
这里简单解释下为什么只用 Decoder 部分:语言模型是利用上文预测下一个单词的,因为 Decoder 使用了 Masked Multi Self-Attention 屏蔽了单词的后面内容,所以 Decoder 是现成的语言模型。又因为没有使用 Encoder,所以也就不需要 encoder-decoder attention 了。
(2)Fine-tuning
完成预训练后,我们会得到一个训练好的 Transformer 模型,接下来我们要用这个训练好的模型来完成特定的监督学习的任务。
假设我们有个带标签的数据集 C,即每一个 Token 序列x1,x2,…,xm都有一个标签 y。我们将 Token 序列输入,并通过 Transformer 模型得到输出的状态 ,然后叫这个加到线性层进行输出并预测标签 y:
3.5 GPT和ELMO对比
GPT的预训练过程其实和ELMO是类似的,主要不同在于两点:
- 首先,特征抽取器不是用的RNN,而是用的Transformer,上面提到过它的特征抽取能力要强于RNN,这个选择很明显是很明智的;
- 其次,GPT的预训练虽然仍然是以语言模型作为目标任务,但是采用的是单向的语言模型。
所谓“单向”的含义是指:语言模型训练的任务目标是根据 W i W_i Wi 单词的上下文去正确预测单词 W i W_i Wi, W i W_i Wi之前的单词序列Context-before称为上文,之后的单词序列Context-after称为下文。
ELMO在做语言模型预训练的时候,预测单词 W i W_i Wi 同时使用了上文和下文,而GPT则只采用Context-before这个单词的上文来进行预测,而抛开了下文。这个选择现在看不是个太好的选择。原因很简单,它没有把单词的下文融合进来,这限制了其在更多应用场景的效果,比如阅读理解这种任务,在做任务的时候是可以允许同时看到上文和下文一起做决策的。如果预训练时候不把单词的下文嵌入到Word Embedding中,是很吃亏的,白白丢掉了很多信息。
四、BERT
4.1 BERT简介
参考:https://github.com/NLP-LOVE/ML-NLP/tree/master/NLP/16.8%20BERT
BERT的全称是Bidirectional Encoder Representation from Transformers,是Google2018年提出的预训练模型,即双向Transformer的encoder,因为decoder是不能获要预测的信息的。
BERT采用和GPT完全相同的两阶段模型,首先是语言模型预训练;其次是使用Fine-Tuning模式解决下游任务。和GPT的最主要不同在于在预训练阶段采用了类似ELMO的双向语言模型,当然另外一点是语言模型的数据规模要比GPT大。
BERT模型的主要创新点都在预训练方法上,即用了Masked LM和Next Sentence Prediction两种方法分别捕捉词语和句子级别的representation。
4.2 BERT预训练
BERT预训练模型分为以下三个步骤:Embedding、Masked LM、Next Sentence Prediction。
(1)Embedding
这里的Embedding由三种Embedding求和而成:
- Token Embeddings是词向量,第一个单词是CLS标志,可以用于之后的分类任务;
- Segment Embeddings用来区别两种句子,因为预训练不光做LM还要做以两个句子为输入的分类任务;
- Position Embeddings和之前文章中的Transformer不一样,不是三角函数而是学习出来的。
(2)Masked LM
MLM可以理解为完形填空,作者会随机mask每一个句子中15%的词,用其上下文来做预测,例如:my dog is hairy → my dog is [MASK]
此处将hairy进行了mask处理,然后采用非监督学习的方法预测mask位置的词是什么。但是该方法有一个问题,因为是mask15%的词,其数量已经很高了,这样就会导致某些词在fine-tuning阶段从未见过,为了解决这个问题,作者做了如下的处理:
-
80%是采用[mask],my dog is hairy → my dog is [MASK]
-
10%是随机取一个词来代替mask的词,my dog is hairy -> my dog is apple
-
10%保持不变,my dog is hairy -> my dog is hairy
注意:这里的10%是15%需要mask中的10%
那么为啥要以一定的概率使用随机词呢?这是因为transformer要保持对每个输入token分布式的表征,否则Transformer很可能会记住这个[MASK]就是"hairy"。至于使用随机词带来的负面影响,文章中解释说,所有其他的token(即非"hairy"的token)共享15%*10% = 1.5%的概率,其影响是可以忽略不计的。Transformer全局的可视,又增加了信息的获取,但是不让模型获取全量信息。
(3)Next Sentence Prediction
选择一些句子对A与B,其中50%的数据B是A的下一条句子,剩余50%的数据B是语料库中随机选择的,学习其中的相关性,添加这样的预训练的目的是目前很多NLP的任务比如QA和NLI都需要理解两个句子之间的关系,从而能让预训练的模型更好的适应这样的任务。 个人理解:
- BERT先是用Mask来提高视野范围的信息获取量,增加duplicate再随机Mask,这样跟RNN类方法依次训练预测没什么区别了除了mask不同位置外;
- 全局视野极大地降低了学习的难度,然后再用A+B/C来作为样本,这样每条样本都有50%的概率看到一半左右的噪声;
- 但直接学习Mask A+B/C是没法学习的,因为不知道哪些是噪声,所以又加上next_sentence预测任务,与MLM同时进行训练,这样用next来辅助模型对噪声/非噪声的辨识,用MLM来完成语义的大部分的学习。
4.3 BERT的优缺点
(1)BERT优点
- Transformer Encoder因为有Self-attention机制,因此BERT自带双向功能。
- 因为双向功能以及多层Self-attention机制的影响,使得BERT必须使用掩盖式语言模型Masked-LM来完成token级别的预训练。
- 为了获取比词更高级别的句子级别的语义表征,BERT加入了Next Sentence Prediction来和Masked-LM一起做联合训练。
- 为了适配多任务下的迁移学习,BERT设计了更通用的输入层和输出层。
- 微调成本小。
(2)BERT缺点
- task1的随机遮挡策略略显粗犷,推荐阅读《Data Nosing As Smoothing In Neural Network Language Models》。
- [MASK]标记在实际预测中不会出现,训练时用过多[MASK]影响模型表现。每个batch只有15%的token被预测,所以BERT收敛得比left-to-right模型要慢(它们会预测每个token)。
- BERT对硬件资源的消耗巨大(大模型需要16个tpu,历时四天;更大的模型需要64个tpu,历时四天。
4.4 GPT和BERT对比
尽管 GPT 和 BERT 都基于 Transformer 架构,但两者的工作原理和目标任务有着显著的区别。
GPT(自回归模型):
- GPT 是一种 自回归模型,它通过逐步生成文本来完成任务。具体来说,GPT 在训练时会预测下一个词(基于前面已经生成的词),生成时也是从第一个词开始逐步生成完整的文本。
- 在自回归模型中,生成的每个词依赖于之前生成的词,因此它只能从左到右依序生成。这种生成方式非常适合 文本生成 任务,比如机器翻译、文本续写等。
- 自回归模型的目标是最大化条件概率 P ( w t ∣ w 1 , w 2 , . . . , w t − 1 ) P ( w_t ∣ w_1 , w_2 , . . . , w_{t − 1} ) P(wt∣w1,w2,...,wt−1) ,即当前词的生成依赖于之前所有生成的词。
BERT(自编码模型):
- BERT 是一种 自编码模型,采用的是双向 Transformer。它同时关注输入序列中前后的词汇,通过 掩码语言模型(Masked Language Model,MLM) 进行训练,即模型会随机掩盖一部分输入词,然后通过上下文信息来预测这些被掩盖的词。
- BERT 更适合 分类、序列标注 等任务,因其能够在双向上下文中进行预测,捕捉了更全面的上下文信息。
- 自编码模型的目标是重建原始输入序列,并且其生成方式不依赖于序列的顺序。
关键区别:
- GPT 是自回归模型,通过逐步生成下一个词来处理生成任务;而 BERT 是 自编码模型,通过对输入序列进行上下文理解来进行预测。
- GPT 只能基于左侧上下文进行生成,而 BERT 可以使用全局上下文。
4.5 从word2Vec, ELMO, GPT 到BERT
从上图可见,Bert其实和ELMO及GPT存在千丝万缕的关系:
- 如果我们把GPT预训练阶段换成双向语言模型,那么就得到了Bert;
- 如果我们把ELMO的特征抽取器换成Transformer,那么我们也会得到Bert。
所以你可以看出:BERT最关键两点,一点是特征抽取器采用Transformer;第二点是预训练的时候采用双向语言模型。
那么新问题来了:对于Transformer来说,怎么才能在这个结构上做双向语言模型任务呢?乍一看上去好像不太好搞。我觉得吧,其实有一种很直观的思路,怎么办?看看ELMO的网络结构图,只需要把两个LSTM替换成两个Transformer,一个负责正向,一个负责反向特征提取,其实应该就可以。当然这是我自己的改造,Bert没这么做。
那么BERT是怎么做的呢?前面提到了CBOW方法,它的核心思想是:在做语言模型任务的时候,我把要预测的单词抠掉,然后根据它的上文Context-Before和下文Context-after去预测单词。其实BERT就是这么做的。
五、BART
BART模型的全称为“Bidirectional and Auto-Regressive Transformers”,从字面意思理解,即 “兼有双向语言建模和自回归机制的Transformer”。
BART出自 Facebook 在 2019年发表的文章:
BART: Denoising Sequence-to-Sequence Pre-training for Natural Language Generation, Translation, and Comprehension
5.1 从GPT, BERT到BART
在架构方面,BART继承了Transformer标准的6层编码器和6层解码器架构。其中,编码器类似于BERT,利用掩膜机制建立双向语言模型,而解码器则像GPT那样以自回归的方式产生输出。
- GPT是一种Auto-Regressive(自回归)的语言模型。 它也可以看作是Transformer model的Decoder部分,它的优化目标就是标准的语言模型目标:序列中所有token的联合概率。GPT采用的是自然序列中的从左到右(或者从右到左)的因式分解。
- BERT是一种Auto-Encoding(自编码)的语言模型。 它也可以看作是Transformer model的Encoder部分,在输入端随机使用一种特殊的[MASK]token来替换序列中的token,这也可以看作是一种noise,所以BERT也叫Masked Language Model。
- BART吸收了BERT的bidirectional encoder和GPT的left-to-right decoder 的特点 ,建立在标准的seq2seq Transformer model的基础之上,这使得它 比BERT更适合文本生成的场景;相比GPT,也多了双向上下文语境信息。在生成任务上获得进步的同时,它也可以在一些文本理解类任务上取得SOTA。
BART在文章中明确给出了上述三个模型的对比,如下图所示。
从上图可以看出,BART是一个encoder-decoder的结构,其结合了BERT和GPT的特点,由 双向encoder(类似BERT) 和 left-to-right自回归decoder(类似GPT) 两部分组成。
其encoder端的输入是加了噪音的序列,decoder端的输入是right-shifted的序列,decoder端的目标是原序列。模型设计的目的很明确,就是在利用encoder端的双向建模能力的同时,保留自回归的特性,以适用于生成任务。
5.2 BART的损失函数
BART模型的预训练是对原始文本破坏再重建,因此损失函数为decoder的输出与原始文本ground truth的交叉熵cross entropy。
5.3 BART的噪声Noise
相对于BERT中单一的noise类型(只有简单地用[MASK] token进行替换这一种noise),BART在encoder端尝试了多种noise。包括:
-
Token Masking(Token 掩码):在输入序列中随机选择一些token,并用一个特殊的标记(通常是 [MASK])来替换它们。模型的目标是根据上下文信息预测这些被掩码的token。
-
Token Deletion(Token 删除):在输入序列中随机删除一些token。模型的目标是根据剩余的上下文信息恢复被删除的token(学习删除的确切的位置和缺失的词)。
-
Token Infilling(Token 填充):随机将一段连续的token(称作span)替换成一个[MASK],span的长度服从泊松分布。(与Token Masking不同的是,Token Infilling可以涉及连续的多个token的缺失。)
-
Sentence Permutation: 一个文档根据句号被分成句子,这些句子以随机的顺序打乱。
-
Document Rotation: 将统一随机选择一个标记,并旋转文档,以便该文档以该标记开始。该任务训练模型识别文档的开始位置。
各种Noise技术的作用:
为什么要尝试这么多种noise呢?其原因和目的也很简单:
- BERT的这种简单替换导致的是encoder端的输入携带了有关序列结构的一些信息(比如序列的长度等信息),而这些信息在文本生成任务中一般是不会提供给模型的。
- BART采用更加多样的noise,意图是破坏掉这些有关序列结构的信息,防止模型去“依赖”这样的信息。
5.4 BART在下游任务上的应用
- Sequence Classification Tasks
对于序列分类任务,相同的输入被输入到编码器和解码器中,最终解码器标记的最终隐藏状态被输入到新的多类线性分类器中。这个方法和在BERT中的CLS token相关。但是我们添加了额外的token到末尾,这样解码器中的token表示就可以从完整的输入中进行解码器。(Figure 3a)
其中,decoder的最后一个隐藏节点是一个特殊标记,相当于BERT模型中的[CLS]。 - Token Classification Tasks
对于Token分类任务,例如,机器阅读理解、信息抽取等,将完整的输入,输入到encoder和decoder中,将decoder最后一层的所有隐藏节点作为每个token的模型表示,再对每个token的表示进行分类,最终得到结果输出。 - Sequence Generation Tasks
因为BART有自动回归的解码器,对于句子生成任务,它可以直接微调,例如抽象问题的回答和总结。在这些任务中,输入的与去噪训练前的目标密切相关信息被复制然后被处理。在这里编码器输入是输入的句子,解码器通过自回归生成输出。将源文本输入到encoder中,将待生成的目标文本输入到decoder中,进行自回归生成。 - Machine Translation
我们也探索使用BART去改善机器翻译解码器,先前的工作已经展示了模型可以通过合并预训练解码器改善,通过添加从bitext学习到的一组新的编码器参数但是从使用在解码器中预训练语言模型的受益是有限的。我们展示了使用整个的BART模型(包括编码器和解码器)作为一个单独的预训练解码器是有限的。通过添加从bitext学习到的一组新的编码器参数。(figure 3b)
更准确地,我们用一个随机的初始化编码器代替BART的编码器向量层。这个模型是端到端训练的,它训练这个新的编码器把外国文字映射为BART可以去噪的英文输入。这个新的编码器可以使用与原始BART模型不同的词汇表。
我们用两步训练这个源编码器,在这两种情况下,从BART模型的输出反向传播交叉熵损失。
- 第一步,我们固定BART的大部分参数了,只更新随机初始化的源编码器,和BART的位置向量和BART的编码器第一层中自注意力输入投影矩阵。
- 第二步,我们以较小的迭代次数训练整个模型参数。
参考资料
- 从Word Embedding到Bert模型—自然语言处理中的预训练技术发展史
- https://github.com/NLP-LOVE/ML-NLP/tree/master/NLP/16.8%20BERT
- Transformer、Bert、Gpt对比系列,超详细介绍transformer的原理,bert和gpt的区别
- GPT模型的前世今生
- 【论文精读】生成式预训练之BART
相关文章:
![](https://i-blog.csdnimg.cn/direct/f0311454ea414663a7aa6e47cbdf061b.png)
【NLP】ELMO、GPT、BERT、BART模型解读及对比分析
文章目录 一、基础知识1.1 Word Embedding(词嵌入)1.2 词嵌入模型1.3 神经网络语言模型NNLM 二、ELMO2.1 ELMO的提出2.2 ELMO核心思想2.3 ELMO的优缺点 三、GPT3.1 Transformer3.2 GPT简介3.3 GPT模型架构3.4 预训练及微调3.5 GPT和ELMO对比 四、BERT4.1…...
![](https://www.ngui.cc/images/no-images.jpg)
go语言学习(数组,切片,字符串)
字符串 如果里面存储的是汉字,那么其实就是存储的是UTF--8编码,所以一个字会对应多个字节.如果想要获取汉字的个数,可以使用rune,来处理unicode字符 length: utf8.RuneCountInString( s) 如果只使用len()获取的是字节的个数, 字符串的功能 1,获取字节长度 len(xx) 2,获取字…...
![](https://i-blog.csdnimg.cn/direct/9159e15d8cd64a738a0b061b496a9b56.png#pic_center)
PM 实战 - 智能药盒PRD + 市场规模分析
写在前面 智能硬件 PRD 实例资源很少,Po下个人作品,假定前提为to Boss需求,目标在于覆盖产品设计核心部分(用户画像Persona、产品逻辑图、产品架构图、软件原型图、硬件低保真设计、用例Use Case、硬件标准)。不是申请…...
![](https://www.ngui.cc/images/no-images.jpg)
SQL刷题快速入门(二)
其他章节:SQL刷题快速入门(一) 承接上一章节,本章主要讲SQL的运算符、聚合函数、SQL保留小数的几种方式三个部分 运算符 SQL 支持多种运算符,用于执行各种操作,如算术运算、比较、赋值、逻辑运算等。以下…...
![](https://i-blog.csdnimg.cn/direct/0df0f4c1aac142a6a44907866ae83e79.png)
hive迁移后修复分区慢,怎么办?
我有1个30TB的分区表,客户给的带宽只有600MB,按照150%的耗时来算,大概要迁移17小时。 使用hive自带的修复分区命令(一般修复分区比迁移时间长一点),可能要花24小时。于是打算用前面黄大佬的牛B方案。 Hive增…...
![](https://i-blog.csdnimg.cn/direct/7aee8fa71e9b4d129d4b6ec75ea7cffd.png)
代码随想录算法训练营day27
代码随想录算法训练营 —day27 文章目录 代码随想录算法训练营前言一、贪心算法理论基础二、455.分发饼干三、376. 摆动序列53. 最大子数组和总结 前言 今天是算法营的第27天,希望自己能够坚持下来! 今日任务: ● 贪心算法理论基础 ● 455.…...
![](https://www.ngui.cc/images/no-images.jpg)
python 代码使用 DeepXDE 库实现了一个求解二维非线性偏微分方程(PDE)的功能
import deepxde as dde import numpy as np import matplotlib.pyplot as plt import tensorflow as tf# 设置时空计算域 Lx 1 # x 范围从 0 到 1 Ly 1 # y 范围从 0 到 1 Lt 0.05 # t 范围从 0 到 0.05 geom dde.geometry.Rectangle([0, 0], [Lx, Ly]) # 空间域 timed…...
![](https://www.ngui.cc/images/no-images.jpg)
【Go】:深入解析 Go 1.24:新特性、改进与最佳实践
前言 Go 1.24 尚未发布。这些是正在进行中的发布说明。Go 1.24 预计将于 2025 年 2 月发布。本文将深入探讨 Go 1.24 中引入的各项更新,并通过具体示例展示这些变化如何影响日常开发工作,确保为读者提供详尽而有价值的参考。 新特性及改进综述 HTTP/2 …...
![](https://www.ngui.cc/images/no-images.jpg)
VUE3 一些常用的 npm 和 cnpm 命令,涵盖了修改源、清理缓存、修改 SSL 协议设置等内容。
以下是一些常用的 npm 和 cnpm 命令,涵盖了修改源、清理缓存、修改 SSL 协议设置等内容。 npm 常用命令 1. 修改 npm 源 更改为淘宝的 npm 镜像源(可以提高安装速度): bash复制代码 npm config set registry https://registry…...
![](https://i-blog.csdnimg.cn/direct/1392a29463334c718404b05820f35467.png)
【SpringBoot】@Value 没有注入预期的值
问题复现 在装配对象成员属性时,我们常常会使用 Autowired 来装配。但是,有时候我们也使用 Value 进行装配。不过这两种注解使用风格不同,使用 Autowired 一般都不会设置属性值,而 Value 必须指定一个字符串值,因为其…...
![](https://i-blog.csdnimg.cn/img_convert/999914bb6f27183fcb8d724a184125c4.png)
【STM32-学习笔记-6-】DMA
文章目录 DMAⅠ、DMA框图Ⅱ、DMA基本结构Ⅲ、不同外设的DMA请求Ⅳ、DMA函数Ⅴ、DMA_InitTypeDef结构体参数①、DMA_PeripheralBaseAddr②、DMA_PeripheralDataSize③、DMA_PeripheralInc④、DMA_MemoryBaseAddr⑤、DMA_MemoryDataSize⑥、DMA_MemoryInc⑦、DMA_DIR⑧、DMA_Buff…...
![](https://www.ngui.cc/images/no-images.jpg)
js实现一个可以自动重链的websocket客户端
class WebSocketClient {constructor(url, callback, options {}) {this.url url; // WebSocket 服务器地址this.options options; // 配置选项(例如重试间隔、最大重试次数等)this.retryInterval options.retryInterval || 1000; // 重试间隔&#…...
![](https://i-blog.csdnimg.cn/direct/1f83243264654573ad5ea433298f0fb7.png)
企业总部和分支通过GRE VPN互通
PC1可以ping通PC2 1、首先按照地址表配置ip地址 2、分别在AR1和AR3上配置nat 3、配置GRE a 创建tunnel接口,并选择tunnel协议为GRE,为隧道创建一个地址,用作互联 b 为隧道配置源地址或者源接口,这里选择源接口;再为…...
![](https://i-blog.csdnimg.cn/direct/195b775d9e0a4e11a909e8f9063c738d.png)
油猴支持阿里云自动登陆插件
遇到的以下问题,都已在脚本中解决: 获取到的元素赋值在页面显示,但是底层的value并没有改写,导致请求就是获取不到数据元素的加载时机不定,尤其是弱网情况下,只靠延迟还是有可能获取不到,且登陆…...
![](https://i-blog.csdnimg.cn/direct/918242775f684d628b7dcf2ee74eb48c.png)
【2024年华为OD机试】(C卷,100分)- 字符串筛选排序 (Java JS PythonC/C++)
一、问题描述 题目描述 输入一个由N个大小写字母组成的字符串 按照ASCII码值从小到大进行排序 查找字符串中第K个最小ASCII码值的字母 (k > 1) 输出该字母所在字符串中的位置索引 (字符串的第一个位置索引为0) k如果大于字符串长度则输出最大ASCII码值的字母所在字符串…...
![](https://www.ngui.cc/images/no-images.jpg)
iOS - runtime总结
详细总结一下 Runtime 的核心内容: 1. 消息发送机制 // 消息发送的基本流程 id objc_msgSend(id self, SEL _cmd, ...) {// 1. 获取 isaClass cls object_getClass(self);// 2. 查找缓存IMP imp cache_getImp(cls, _cmd);if (imp) return imp(self, _cmd, ...);…...
![](https://i-blog.csdnimg.cn/img_convert/0ede82cc25798a0aebfb5d2927a2a678.png)
第33 章 - ES 实战篇 - MySQL 与 Elasticsearch 的一致性问题
思维导图 0. 前言 MySQL 与 Elasticsearch 一致性问题是老生常谈了。网上有太多关于这方面的文章了,但是千篇一律,看了跟没看没有太大区别。 在生产中,我们往往会通过 DTS 工具将 binlog 导入到 Kafka,再通过 Kafka 消费 binlog&…...
![](https://i-blog.csdnimg.cn/direct/59cffa2b60cf45b2a5f38743f4635abf.png#pic_center)
Artec Leo 3D扫描仪与Ray助力野生水生动物法医鉴定【沪敖3D】
挑战:捕获大型水生哺乳动物(如鲸鱼)的数据,搭建全彩3D模型,用于水生野生动物的法医鉴定、研究和保护工作。 解决方案:Artec Eva、Artec Space Spider、Artec Leo、Artec Ray、Artec Studio、CT scans 效果&…...
![](https://www.ngui.cc/images/no-images.jpg)
PythonQT5打包exe线程使用
打包: pyinstaller --noconsole --onefile test.py–noconsole 表示不需要打开命令行 修改:test.spec 一般项目里面需要用的资源文件,比如lib、png、exe等。 需要单独修改spec文件 pathex[.],binaries[(D:/test.png, .),(D:/simsun.ttc, .…...
![](https://i-blog.csdnimg.cn/direct/7aea041960ea4082ae89409024044ca0.png)
【Powershell】Windows大法powershell好(二)
PowerShell基础(二) 声明:该笔记为up主 泷羽的课程笔记,本节链接指路。 警告:本教程仅作学习用途,若有用于非法行为的,概不负责。 1. powershell 执行外部命令 powershell也可以执行一些外部的…...
![](https://www.ngui.cc/images/no-images.jpg)
前端学习-环境this对象以及回调函数(二十七)
目录 前言 目标 环境对象 作用 环境对象this是什么? 判断this指向的粗略规则是什么? 回调函数 目标 常见的使用场景 综合案例:Tab任务栏切换 总结 前言 男儿何不带吴钩,收取关山五十州 目标 能够分析判断函数运行在不…...
![](https://i-blog.csdnimg.cn/direct/4b7cecf72f3d4573a83ea9135498d3fc.png)
Element-plus、Element-ui之Tree 树形控件回显Bug问题。
需求:提交时,需要把选中状态和半选中状态 的数据id提交。如图所示: 数据回显时,会出现代码如下: <template><el-tree ref"treeRef" :data"tree" show-checkbox node-key"id" …...
![](https://i-blog.csdnimg.cn/direct/5d41dfc4f6804a7a8e1d6140fcf4380f.png)
互联网全景消息(10)之Kafka深度剖析(中)
一、深入应用 1.1 SpringBoot集成Kafka 引入对应的依赖。 <dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupI…...
![](https://www.ngui.cc/images/no-images.jpg)
Oracle Dataguard(主库为双节点集群)配置详解(5):将主库复制到备库并启动同步
Oracle Dataguard(主库为双节点集群)配置详解(5):将主库复制到备库并启动同步 目录 Oracle Dataguard(主库为双节点集群)配置详解(5):将主库复制到备库并启动…...
![](https://www.ngui.cc/images/no-images.jpg)
pytorch小记(一):pytorch矩阵乘法:torch.matmul(x, y)
pytorch小记(一):pytorch矩阵乘法:torch.matmul(x, y)/ x y 代码代码 1:torch.matmul(x, y)输入张量:计算逻辑:输出结果: 代码 2:y y.view(4,1)…...
![](https://i-blog.csdnimg.cn/direct/2ad9f1c7c377479b9e238b31084eeff3.png)
PyTorch环境配置常见报错的解决办法
目标 小白在最基础的环境配置里一般都会出现许多问题。 这里把一些常见的问题分享出来。希望可以节省大家一些时间。 最终目标是可以在cmd虚拟环境里进入jupyter notebook,new的时候有对应的环境,并且可以跑通所有的import code。 第一步:…...
![](https://i-blog.csdnimg.cn/direct/ac5217088e9248c091580b57432bc18d.png)
罗永浩再创业,这次盯上了 AI?
罗永浩,1972年7月9日生于中国延边朝鲜族自治州的一个军人家庭,是一名朝鲜族人;早年在新东方授课,2004年当选 “网络十大红人” ;2006年8月1日,罗永浩创办牛博网;2008年5月,罗永浩注册…...
![](https://www.ngui.cc/images/no-images.jpg)
VUE3 provide 和 inject,跨越多层级组件传递数据
provide 和 inject 是 Vue 3 提供的 API,主要用于实现祖先组件与后代组件之间的依赖注入。它们可以让你在组件树中,跨越多层组件传递数据,而不需要通过 props 或事件的方式逐层传递。这个机制主要用于状态共享、插件系统或某些跨层级的功能。…...
![](https://i-blog.csdnimg.cn/direct/4d1b3cd9fd654020ac56ce780a7d4987.png)
git打补丁
1、应用场景 跨仓库升级 开发项目B使用的是开源项目A。开源项目A发现漏洞,作者进行了修复,我们可以通过使用git补丁的方式,将作者修改的内容复制到我 们的项目B中。 2、TortoiseGit方式 源仓库 格式化补丁 根据提交数量,生成…...
![](https://i-blog.csdnimg.cn/direct/42526c56c9924d3d8edf0eb3db3b1044.jpeg)
机械燃油车知识图谱、知识大纲、知识结构(持续更新...)
一、发动机 曲柄连杆机构 配气机构 点火系统 起动系统 燃油供给系统 润滑系统 冷却系统 二、底盘 (一)传动系统 1、离合器 2、变速器 3、万向传动装置 4、驱动桥 (二)行驶系统 1、车架 2、车桥 3、悬架 4、车轮 &a…...
![](http://jason-images.qiniudn.com/@/ML/foundation/regularization/l2_regularizer.jpg)
wordpress哪个主题适合做网址导航/惠州抖音seo
引言 上一小节中,我们介绍了过拟合的概念,在机器学习中最大的危险就是过拟合,为了解决过拟合问题,通常有两种办法,第一是减少样本的特征(即维度),第二就是我们这里要说的“正则化”&…...
![](http://img.techtarget.com.cn/articlepic/2009-11-20-10-33-28.gif)
wordpress 安装错误/对网站的建议和优化
导读:本文围绕ASP WEBSHELL权限设置,从最低级的权限开始介绍,讲解了每一步的具体操作方法,并配有屏幕截图,希望能对你提权有所帮助。 关键词:ASP WEBSHELL权限设置 Shell 提权 权限 操作方法 提权的基础是…...
![](/images/no-images.jpg)
可以做网站的语言/提高销售的10种方法
CSS Sprites是一种网页图片应用处理方式。它允许你将一个页面涉及到的所有零星图片都包含到一张大图中去,这样一来,当访问该页面时,载入的图片就不会像以前那样一幅一幅地慢慢显示出来了。对于当前网络流行的速度而言,不高于200KB…...
![](/images/no-images.jpg)
java做网站自定义布局多大/网络运营推广是做什么的
RN 环境相关问题 第一次配置RN iOS环境,遇到问题如下 xcrun: error: SDK “iphoneos” cannot be located mac$ sudo xcode-select --switch /Applications/Xcode.app/Contents/Developer/...
![](https://img-blog.csdnimg.cn/img_convert/d2b6f4039244261dc04e1bdfc1cc873c.gif)
丹东网站网站建设/济南seo培训
你觉得一身才能无处施展吗?你想获得百万奖金吗?快来加入众测申请成为看雪专家吧!厂商评级结束即付款!测试要求测试范围:Windows程序、智能设备、Android、iOS等二进制程序的漏洞挖掘。项目测试内容及要求:1…...
![](/images/no-images.jpg)
建站个人网站/快速排名工具免费查询
1.连接数据并显示一些信息 db_connet username:passwordip address/database name db_destroy 同上 db_import 文件名字 db_hosts -c address,svcs,vulns // 显示ip地址,服务器,漏洞数 db_vlns // 显示漏洞名字 2.nmap扫描 db_nmap -sS -nP ip addre…...