当前位置: 首页 > news >正文

【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)领域的一项重大创新,它极大地推动了计算机理解和处理人类语言的能力。词嵌入技术通过将单词、句子甚至图像转换为数字向量,不仅改善了文本的表示方式,更重要的是,它捕捉到了语言的本质和丰富的语义信息。

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 t1个单词,要求网络正确预测单词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(wtw1,w2,...,wt1) ,即当前词的生成依赖于之前所有生成的词。

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。包括:

  1. Token Masking(Token 掩码):在输入序列中随机选择一些token,并用一个特殊的标记(通常是 [MASK])来替换它们。模型的目标是根据上下文信息预测这些被掩码的token。
    在这里插入图片描述

  2. Token Deletion(Token 删除):在输入序列中随机删除一些token。模型的目标是根据剩余的上下文信息恢复被删除的token(学习删除的确切的位置和缺失的词)。
    在这里插入图片描述

  3. Token Infilling(Token 填充):随机将一段连续的token(称作span)替换成一个[MASK],span的长度服从泊松分布。(与Token Masking不同的是,Token Infilling可以涉及连续的多个token的缺失。)
    在这里插入图片描述

  4. Sentence Permutation: 一个文档根据句号被分成句子,这些句子以随机的顺序打乱。

  5. 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

相关文章:

【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…...

go语言学习(数组,切片,字符串)

字符串 如果里面存储的是汉字,那么其实就是存储的是UTF--8编码,所以一个字会对应多个字节.如果想要获取汉字的个数,可以使用rune,来处理unicode字符 length: utf8.RuneCountInString( s) 如果只使用len()获取的是字节的个数, 字符串的功能 1,获取字节长度 len(xx) 2,获取字…...

PM 实战 - 智能药盒PRD + 市场规模分析

写在前面 智能硬件 PRD 实例资源很少,Po下个人作品,假定前提为to Boss需求,目标在于覆盖产品设计核心部分(用户画像Persona、产品逻辑图、产品架构图、软件原型图、硬件低保真设计、用例Use Case、硬件标准)。不是申请…...

SQL刷题快速入门(二)

其他章节:SQL刷题快速入门(一) 承接上一章节,本章主要讲SQL的运算符、聚合函数、SQL保留小数的几种方式三个部分 运算符 SQL 支持多种运算符,用于执行各种操作,如算术运算、比较、赋值、逻辑运算等。以下…...

hive迁移后修复分区慢,怎么办?

我有1个30TB的分区表,客户给的带宽只有600MB,按照150%的耗时来算,大概要迁移17小时。 使用hive自带的修复分区命令(一般修复分区比迁移时间长一点),可能要花24小时。于是打算用前面黄大佬的牛B方案。 Hive增…...

代码随想录算法训练营day27

代码随想录算法训练营 —day27 文章目录 代码随想录算法训练营前言一、贪心算法理论基础二、455.分发饼干三、376. 摆动序列53. 最大子数组和总结 前言 今天是算法营的第27天,希望自己能够坚持下来! 今日任务: ● 贪心算法理论基础 ● 455.…...

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…...

【Go】:深入解析 Go 1.24:新特性、改进与最佳实践

前言 Go 1.24 尚未发布。这些是正在进行中的发布说明。Go 1.24 预计将于 2025 年 2 月发布。本文将深入探讨 Go 1.24 中引入的各项更新,并通过具体示例展示这些变化如何影响日常开发工作,确保为读者提供详尽而有价值的参考。 新特性及改进综述 HTTP/2 …...

VUE3 一些常用的 npm 和 cnpm 命令,涵盖了修改源、清理缓存、修改 SSL 协议设置等内容。

以下是一些常用的 npm 和 cnpm 命令,涵盖了修改源、清理缓存、修改 SSL 协议设置等内容。 npm 常用命令 1. 修改 npm 源 更改为淘宝的 npm 镜像源(可以提高安装速度): bash复制代码 npm config set registry https://registry…...

【SpringBoot】@Value 没有注入预期的值

问题复现 在装配对象成员属性时,我们常常会使用 Autowired 来装配。但是,有时候我们也使用 Value 进行装配。不过这两种注解使用风格不同,使用 Autowired 一般都不会设置属性值,而 Value 必须指定一个字符串值,因为其…...

【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…...

js实现一个可以自动重链的websocket客户端

class WebSocketClient {constructor(url, callback, options {}) {this.url url; // WebSocket 服务器地址this.options options; // 配置选项(例如重试间隔、最大重试次数等)this.retryInterval options.retryInterval || 1000; // 重试间隔&#…...

企业总部和分支通过GRE VPN互通

PC1可以ping通PC2 1、首先按照地址表配置ip地址 2、分别在AR1和AR3上配置nat 3、配置GRE a 创建tunnel接口,并选择tunnel协议为GRE,为隧道创建一个地址,用作互联 b 为隧道配置源地址或者源接口,这里选择源接口;再为…...

油猴支持阿里云自动登陆插件

遇到的以下问题,都已在脚本中解决: 获取到的元素赋值在页面显示,但是底层的value并没有改写,导致请求就是获取不到数据元素的加载时机不定,尤其是弱网情况下,只靠延迟还是有可能获取不到,且登陆…...

【2024年华为OD机试】(C卷,100分)- 字符串筛选排序 (Java JS PythonC/C++)

一、问题描述 题目描述 输入一个由N个大小写字母组成的字符串 按照ASCII码值从小到大进行排序 查找字符串中第K个最小ASCII码值的字母 (k > 1) 输出该字母所在字符串中的位置索引 (字符串的第一个位置索引为0) k如果大于字符串长度则输出最大ASCII码值的字母所在字符串…...

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, ...);…...

第33 章 - ES 实战篇 - MySQL 与 Elasticsearch 的一致性问题

思维导图 0. 前言 MySQL 与 Elasticsearch 一致性问题是老生常谈了。网上有太多关于这方面的文章了,但是千篇一律,看了跟没看没有太大区别。 在生产中,我们往往会通过 DTS 工具将 binlog 导入到 Kafka,再通过 Kafka 消费 binlog&…...

Artec Leo 3D扫描仪与Ray助力野生水生动物法医鉴定【沪敖3D】

挑战:捕获大型水生哺乳动物(如鲸鱼)的数据,搭建全彩3D模型,用于水生野生动物的法医鉴定、研究和保护工作。 解决方案:Artec Eva、Artec Space Spider、Artec Leo、Artec Ray、Artec Studio、CT scans 效果&…...

PythonQT5打包exe线程使用

打包: pyinstaller --noconsole --onefile test.py–noconsole 表示不需要打开命令行 修改:test.spec 一般项目里面需要用的资源文件,比如lib、png、exe等。 需要单独修改spec文件 pathex[.],binaries[(D:/test.png, .),(D:/simsun.ttc, .…...

【Powershell】Windows大法powershell好(二)

PowerShell基础(二) 声明:该笔记为up主 泷羽的课程笔记,本节链接指路。 警告:本教程仅作学习用途,若有用于非法行为的,概不负责。 1. powershell 执行外部命令 powershell也可以执行一些外部的…...

边缘计算医疗风险自查APP开发方案

核心目标:在便携设备(智能手表/家用检测仪)部署轻量化疾病预测模型,实现低延迟、隐私安全的实时健康风险评估。 一、技术架构设计 #mermaid-svg-iuNaeeLK2YoFKfao {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg…...

python/java环境配置

环境变量放一起 python: 1.首先下载Python Python下载地址:Download Python | Python.org downloads ---windows -- 64 2.安装Python 下面两个,然后自定义,全选 可以把前4个选上 3.环境配置 1)搜高级系统设置 2…...

【位运算】消失的两个数字(hard)

消失的两个数字(hard) 题⽬描述:解法(位运算):Java 算法代码:更简便代码 题⽬链接:⾯试题 17.19. 消失的两个数字 题⽬描述: 给定⼀个数组,包含从 1 到 N 所有…...

使用分级同态加密防御梯度泄漏

抽象 联邦学习 (FL) 支持跨分布式客户端进行协作模型训练,而无需共享原始数据,这使其成为在互联和自动驾驶汽车 (CAV) 等领域保护隐私的机器学习的一种很有前途的方法。然而,最近的研究表明&…...

渲染学进阶内容——模型

最近在写模组的时候发现渲染器里面离不开模型的定义,在渲染的第二篇文章中简单的讲解了一下关于模型部分的内容,其实不管是方块还是方块实体,都离不开模型的内容 🧱 一、CubeListBuilder 功能解析 CubeListBuilder 是 Minecraft Java 版模型系统的核心构建器,用于动态创…...

ESP32 I2S音频总线学习笔记(四): INMP441采集音频并实时播放

简介 前面两期文章我们介绍了I2S的读取和写入,一个是通过INMP441麦克风模块采集音频,一个是通过PCM5102A模块播放音频,那如果我们将两者结合起来,将麦克风采集到的音频通过PCM5102A播放,是不是就可以做一个扩音器了呢…...

IT供电系统绝缘监测及故障定位解决方案

随着新能源的快速发展,光伏电站、储能系统及充电设备已广泛应用于现代能源网络。在光伏领域,IT供电系统凭借其持续供电性好、安全性高等优势成为光伏首选,但在长期运行中,例如老化、潮湿、隐裂、机械损伤等问题会影响光伏板绝缘层…...

【Java学习笔记】BigInteger 和 BigDecimal 类

BigInteger 和 BigDecimal 类 二者共有的常见方法 方法功能add加subtract减multiply乘divide除 注意点:传参类型必须是类对象 一、BigInteger 1. 作用:适合保存比较大的整型数 2. 使用说明 创建BigInteger对象 传入字符串 3. 代码示例 import j…...

Axure 下拉框联动

实现选省、选完省之后选对应省份下的市区...

Appium下载安装配置保姆教程(图文详解)

目录 一、Appium软件介绍 1.特点 2.工作原理 3.应用场景 二、环境准备 安装 Node.js 安装 Appium 安装 JDK 安装 Android SDK 安装Python及依赖包 三、安装教程 1.Node.js安装 1.1.下载Node 1.2.安装程序 1.3.配置npm仓储和缓存 1.4. 配置环境 1.5.测试Node.j…...