ELMo、GPT与BERT模型

1 ELMo模型

ELMo是一种预训练的深度学习模型,用于生成上下文相关的词嵌入。它通过双向LSTM(长短期记忆网络)来捕捉词汇在不同上下文中的语义,提供比传统静态词嵌入(如Word2Vec)更精确的语义表示。这种嵌入可以增强许多NLP任务的性能,如命名实体识别和情感分析。

ELMo 的本质思想是:事先用语言模型学好一个单词的 Word Embedding,此时多义词无法区分。在实际使用 Word Embedding 的时候,单词已经具备了特定的上下文了,这个时候可以根据上下文单词的语义再去调整单词的 Word Embedding 表示,这样经过调整后的 Word Embedding 更能表达在这个上下文中的具体含义,自然也就解决了多义词的问题了。所以 ELMo 本身是个根据当前上下文对 Word Embedding 动态调整的思路。

ELMo 采用了典型的两阶段过程
第一个阶段是利用语言模型进行预训练;
第二个阶段是在做下游任务时,从预训练网络中提取对应单词的网络各层的 Word Embedding 作为新特征补充到下游任务中。
在这里插入图片描述

1.1 ELMo模型预训练过程

上图展示的是其第一阶段预训练过程,它的网络结构采用了双层双向 LSTM,目前语言模型训练的任务目标是根据单词 w的上下文去正确预测单词w,w之前的单词序列 Context-before 称为上文,之后的单词序列 Context-after 称为下文。
图中左端的前向双层 LSTM 代表正方向编码器,输入的是从左到右顺序的除了预测单词外W的上文 Context-before;右端的逆向双层 LSTM 代表反方向编码器,输入的是从右到左的逆序的句子下文Context-after;每个编码器的深度都是两层 LSTM 叠加。

这个网络结构其实在 NLP 中是很常用的。使用这个网络结构利用大量语料做语言模型任务就能预先训练好这个网络,如果训练好这个网络后,输入一个新句子 ,句子中每个单词都能得到对应的三个 Embedding

  1. 最底层是单词的 Word Embedding;
  2. 往上走是第一层双向 LSTM 中对应单词位置的 Embedding,这层编码单词的句法信息更多一些;
  3. 再往上走是第二层 LSTM 中对应单词位置的 Embedding,这层编码单词的语义信息更多一些。

也就是说,ELMo 的预训练过程不仅仅学会单词的 Word Embedding,还学会了一个双层双向的 LSTM 网络结构,而这两者后面都有用。

1.2 ELMo模型的下游任务的使用过程

ELMo 的 Feature-based Pre-Training(下游任务的使用过程)

  1. 我们可以先将句子 X 作为预训练好的 ELMo 网络的输入,这样句子 X 中每个单词在 ELMO 网络中都能获得对应的三个 Embedding;
  2. 之后给予这三个 Embedding 中的每一个 Embedding 一个权重 a,这个权重可以学习得来,根据各自权重累加求和,将三个 Embedding 整合成一个;
  3. 然后将整合后的这个 Embedding 作为 X 句在自己任务的那个网络结构中对应单词的输入,以此作为补充的新特征给下游任务使用。

对于上图所示下游任务 QA 中的回答句子 Y 来说也是如此处理。
在特征提取的时候,每个单词在两层 LSTM 上都会有对应的节点,这两个节点会编码单词的一些句法特征和语义特征,并且它们的 Embedding 编码是动态改变的,会受到上下文单词的影响,周围单词的上下文不同应该会强化某种语义,弱化其它语义,进而就解决了多义词的问题。

2 GPT模型

GPT 是 “Generative Pre-Training” 的简称,从名字看其含义是指的生成式的预训练。

  1. 模型架构
    Transformer: GPT基于Transformer架构,这是一种用于处理序列数据的深度学习模型架构。Transformer使用自注意力机制(self-attention)来捕捉序列中词汇之间的关系和上下文。(transformer的decoder部分)

  2. 预训练和微调
    预训练: GPT模型首先在大规模文本数据上进行无监督的预训练。这一阶段的目标是学习语言的统计规律和结构。
    微调: 预训练完成后,GPT模型可以在特定任务上进行微调,进一步优化以适应具体应用(如对话生成、文本分类等)。

  3. 生成能力
    生成文本: GPT模型擅长生成连贯且自然的文本。它可以用来创建文章、编写故事、生成对话等。
    理解上下文: 由于Transformer架构的自注意力机制,GPT能够理解和生成基于上下文的文本。
    在这里插入图片描述

2.1 GPT 的预训练过程

上图展示了 GPT 的预训练过程,其实和 ELMo 是类似的,主要不同在于两点:
首先,特征抽取器用的不是 RNN,而是用的 Transformer,它的特征抽取能力要强于RNN。
其次,GPT 的预训练虽然仍然是以语言模型作为目标任务,但是采用的是单向的语言模型,所谓 “单向” 的含义是指:语言模型训练的任务目标是根据w单词的上下文去正确预测单词 w, w之前的单词序列Context-before称为上文,之后的单词序列Context-after称为下文。ELMo 在做语言模型预训练的时候,预测单词 w同时使用了上文和下文,而 GPT 则只采用 Context-before 这个单词的上文来进行预测,而抛开了下文。 GPT 这个选择现在看不是个太好的选择,原因很简单,它没有把单词的下文融合进来,这限制了其在更多应用场景的效果,比如阅读理解这种任务,在做任务的时候是可以允许同时看到上文和下文一起做决策的。如果预训练时候不把单词的下文嵌入到 Word Embedding 中,是很吃亏的,白白丢掉了很多信息。

2.2 GPT 模型的 Fine-tuning

  1. 首先,对于不同的下游任务来说,本来你可以任意设计自己的网络结构,现在不行了,你要向 GPT 的网络结构看齐,把任务的网络结构改造成和 GPT 一样的网络结构。
  2. 然后,在做下游任务的时候,利用第一步预训练好的参数初始化 GPT 的网络结构,这样通过预训练学到的语言学知识就被引入到你手头的任务里来了。
  3. 再次,你可以用手头的任务去训练这个网络,对网络参数进行 Fine-tuning,使得这个网络更适合解决手头的问题。就是这样

3 BERT 模型

BERT 的意义在于:从大量无标记数据集中训练得到的深度模型,可以显著提高各项自然语言处理任务的准确率。
本质: 将数据变成具有特征关系的词向量
在这里插入图片描述
从上图可以发现,BERT 的模型结构其实就是 Transformer Encoder 模块的堆叠。

BERT 和 GPT 之间的区别:
GPT: GPT 使用 Transformer Decoder 作为特征提取器、使用单向编码具有良好的文本生成能力,然而当前词的语义只能由其前序词决定,并且在语义理解上不足
BERT: 使用了 Transformer Encoder 作为特征提取器,并使用了与其配套的掩码训练方法。虽然使用双向编码让 BERT 不再具有文本生成能力,但是 BERT 的语义信息提取能力更强

单向编码和双向编码的差异,以该句话举例 “今天天气很{},我们不得不取消户外运动”,分别从单向编码和双向编码的角度去考虑 {} 中应该填什么词:
单向编码: 单向编码只会考虑 “今天天气很”,以人类的经验,大概率会从 “好”、“不错”、“差”、“糟糕” 这几个词中选择,这些词可以被划为截然不同的两类
双向编码: 双向编码会同时考虑上下文的信息,即除了会考虑 “今天天气很” 这五个字,还会考虑 “我们不得不取消户外运动” 来帮助模型判断,则大概率会从 “差”、“糟糕” 这一类词中选择

3.1 ELMo、GPT 和 BERT 三者的区别

在这里插入图片描述

  • ELMo使用自左向右编码和自右向左编码的两个 LSTM 网络,分别以
    上文和下文为目标函数独立训练,将训练得到的特征向量以拼接的形式实现双向编码,本质上还是单向编码,只不过是两个方向上的单向编码的拼接而成的双向编码。
  • GPT 使用 Transformer Decoder 作为 Transformer Block,以上文为目标函数进行训练,用 Transformer Block 取代 LSTM 作为特征提取器,实现了单向编码,是一个标准的预训练语言模型,即使用 Fine-Tuning 模式解决下游任务。
  • BERT 也是一个标准的预训练语言模型,它以上文和下文为目标函数进行训练,BERT 使用的编码器属于双向编码器。
    BERT 和 ELMo 的区别在于使用 Transformer Block 作为特征提取器,加强了语义特征提取的能力;
    BERT 和 GPT 的区别在于使用 Transformer Encoder 作为 Transformer Block,并且将 GPT 的单向编码改成双向编码,也就是说 BERT 舍弃了文本生成能力,换来了更强的语义理解能力。

3.2 BERT模型的无监督训练

和 GPT 一样,BERT 也采用二段式训练方法:

第一阶段:使用易获取的大规模无标签余料,来训练基础语言模型;
第二阶段:根据指定任务的少量带标签训练数据进行微调训练。
不同于 GPT 等标准语言模型使用 上文为目标函数进行训练,能看到全局信息的 BERT 使用上下文为目标函数进行训练。并且 BERT 用语言掩码模型(MLM)方法训练词 的语义理解能力;用下句预测(NSP)方法训练句子之间的理解能力,从而更好地支持下游任务

3.3 BERT的语言掩码模型(MLM)

BERT的掩码语言模型(MLM)是其预训练过程中的核心任务之一。MLM通过以下步骤进行训练:

  1. 掩盖词汇: 在输入文本中,随机选择一些词汇并将其掩盖,通常用特殊的 [MASK] 标记代替。这意味着原始文本中的某些词会被替换为掩码符号。
  2. 预测掩盖词汇: 模型的任务是根据上下文信息预测被掩盖的词汇是什么。因为BERT是双向的,它能够利用掩盖词汇两侧的所有上下文信息进行预测,从而提高对词汇的理解。
  3. 优化目标: 通过最小化预测词汇与实际词汇之间的差距(即交叉熵损失),来训练模型的参数。这个过程让模型学习到如何根据上下文信息生成词汇的表征。

但是这样设计 MLM 的训练方法会引入弊端:在模型微调训练阶段或模型推理(测试)阶段,输入的文本中将没有 MASK 进而导致产生由训练和预测数据偏差导致的性能损失。
考虑到上述的弊端,BERT 并没有总用 [MASK] 替换掩码词,而是按照一定比例选取替换词。在选择 15% 的词作为掩码词后这些掩码词有三类替换选项:

  • 80% 训练样本中:将选中的词用 [MASK] 来代替,例如:
    “地球是[MASK]八大行星之一”
  • 10% 的训练样本中:选中的词不发生变化,该做法是为了缓解训练文本和预测文本的偏差带来的性能损失,例如:
    “地球是太阳系八大行星之一”
  • 10% 的训练样本中:将选中的词用任意的词来进行代替,该做法是为了让 BERT 学会根据上下文信息自动纠错,例如:
    “地球是苹果八大行星之一”

在此设计方法中,编码器无法事先知道哪些词需要预测,哪些是掩盖的,因此必须学习每个词的表示向量。尽管双向编码器的训练速度较慢,导致BERT的训练效率低下,但实验表明,MLM训练方法使BERT在语义理解能力上超越了同期的所有预训练语言模型,因此这种效率上的牺牲是值得的。

3.4 BERT 的下句预测模型(NSP)

在许多自然语言处理的下游任务中,如问答和自然语言推断,需要对两个句子进行逻辑推理。然而,传统语言模型通常难以直接捕获句子之间的语义关系,因为它们的训练主要集中在单词预测的粒度上。为了有效地学习句子间的语义联系,BERT引入了下句预测(NSP)作为无监督预训练的一部分。

BERT的下句预测模型(NSP)是其预训练中的另一个关键任务。NSP通过以下步骤进行训练:

  1. 句子对构建: 从文本中构建句子对,其中包括一个真实的句子对(即一个句子紧接着另一个句子)和一个假句子对(即两个句子在文本中不相邻)。
  2. 预测任务: 对于每个句子对,模型需要预测这两个句子是否在原文中连续出现。即,模型要判断给定的句子对是否是“相邻的”还是“非相邻的”。
  3. 优化目标: 通过最小化预测结果与实际标记之间的交叉熵损失来训练模型,从而提高其对句子关系的理解能力。
连续句对:[CLS]今天天气很糟糕[SEP]下午的体育课取消了[SEP]
随机句对:[CLS]今天天气很糟糕[SEP]鱼快被烤焦啦[SEP]

其中 [SEP] 标签表示分隔符。[CLS]表示标签用于类别预测,结果为 1,表示输入为连续句对;结果为 0,表示输入为随机句对。

3.5 BERT的下游任务改造

BERT 根据自然语言处理下游任务的输入和输出的形式,将微调训练支持的任务分为四类,分别是句对分类、单句分类、文本问答和单句标注。

3.5.1 句对分类

句对分类是自然语言处理中的一种任务,旨在判断两个句子之间的关系或类别。针对句对分类任务,BERT 在预训练过程中就使用了 NSP 训练方法获得了直接捕获句对语义关系的能力。
输入格式: 将两个句子拼接成一个输入序列,中间用特殊标记(如 [SEP])分隔。
模型处理: 输入序列通过BERT模型进行处理,获取每个标记的上下文表示。
特征提取: 通常使用 [CLS] 标记的表示作为整个句对的特征向量。
分类层: 在 [CLS] 向量上添加全连接层,将其映射到预定义的类别,例如“相似”或“非相似”。[针对多分类任务,需要在句首标签 [CLS] 的输出特征向量后接一个全连接层和 Softmax 层,保证输出维数与类别数目一致,最后通过 arg max 操作(取最大值时对应的索引序号)得到相对应的类别结果。]
训练和评估: 使用标注数据训练模型,并通过准确率、F1分数等指标评估模型的分类性能。
在这里插入图片描述

3.5.2 单句分类

单句分类是自然语言处理中常见的任务,旨在为给定的单个句子分配一个或多个类别标签。单句分类的应用包括情感分析、文本分类、垃圾邮件检测等任务,这些任务都需要对单个文本进行分类或标记。通过使用预训练模型进行单句分类,可以有效地利用语言模型在大规模文本数据上学到的语义信息。
单句分类在句首加入标签 [CLS],将句首标签所对应的输出值作为分类标签,计算预测分类标签与真实分类标签的交叉熵,将其作为优化目标,在任务数据上进行微调训练。
在这里插入图片描述
针对单句二分类任务,也无须对 BERT 的输入数据和输出数据的结构做任何改动。
同样,针对多分类任务,需要在句首标签 [CLS] 的输出特征向量后接一个全连接层和 Softmax 层,保证输出维数与类别数目一致,最后通过 argmax 操作得到相对应的类别结果。

3.5.3 文本问答

给定一个问句和一个蕴含答案的句子,找出答案在后这种的位置,称为文本问答,例如给定一个问题(句子 A),在给定的段落(句子 B)中标注答案的其实位置和终止位置。
在这里插入图片描述

文本回答任务的微调训练使用了两个技巧

  1. 用全连接层把 BERT 提取后的深层特征向量转化为用于判断答案位置的特征向量
  2. 引入辅助向量 s 和 e 作为答案其实位置和终止位置的基准向量,明确优化目标的方向和度量方法
    在这里插入图片描述

3.5.4 单句标注

给定一个句子,标注每个词的标签,称为单句标注。例如给定一个句子,标注句子中的人名、地名和机构名。

由于 BERT 需要对输入文本进行分词操作,独立词将会被分成若干子词,因此 BERT 预测的结果将会是 5 类(细分为 13 小类):

  • O(非人名地名机构名,O 表示 Other)
  • B-PER/LOC/ORG(人名/地名/机构名初始单词,B 表示 Begin)
  • I-PER/LOC/ORG(人名/地名/机构名中间单词,I 表示 Intermediate)
  • E-PER/LOC/ORG(人名/地名/机构名终止单词,E 表示 End)
  • S-PER/LOC/ORG(人名/地名/机构名独立单词,S 表示 Single)
    将 5 大类的首字母结合,可得 IOBES,这是序列标注最常用的标注方法。
    在这里插入图片描述

在这里插入图片描述

参考博客:https://www.cnblogs.com/nickchen121/p/16470569.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Yoin.

感谢各位打赏!!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值