当前位置:   article > 正文

预训练机制(3)~GPT、BERT_gpt 预训练有分样本内样本外吗

gpt 预训练有分样本内样本外吗

目录

1. BERT、GPT 核心思想

1.1 word2vec和ELMo区别

2 GPT

2.1 GPT 预训练

​编辑

2.2 GPT 微调

2.3 为什么要用GPT

3. Bert

3.1 Bert集大成者

extension:单向编码--双向编码区别

3.2  Bert和GPT、EMLo区别

3.3 Bert Architecture

3.3.1 explanation:是否参数多、数据量大,是否过拟合?

3.3.2 Bert training

3.4 Bert为什么要做掩码语言模型(MLM, Masked Language Model)

3.5 Bert 下句预测(NSP)

3.6 Bert下游任务改造

3.6.1 句对分类

3.6.2 单句分类

3.6.3 文本问答

3.6.4 单句标注

参考:


1. BERT、GPT 核心思想

GPT和Bert集大成者,把以前好的东西集成在一起。

BERT基础模型时transformer的编码器(做特征提取--> embedding vector),目的是让模型去认识客观世界的万事万物,然后就可以让AI和各学科交叉,并通过下游任务的改造,去发掘物与物之间的联系。

GPT基础模型是Transformer的解码器(做生成式任务),因为decoder中有Masked Multi-head Attention,masked注定了你不能发掘后面的信息 -->所以可以去预测下面的东西。

缺点:Bert和GPT参数量非常大(GPT1,3亿参数;GPT2,15亿参数),训练一个模型需要几百万美金expense。

1.1 word2vec和ELMo区别

word2vec,是为了得到词向量。通过上下文得到词向量,而不是去预测下一个词(不重要)

ELMo,是为了做语言模型。通过上下文去准确预测下一个词。like BERT model

ELMo语言模型,通过上下文获取下一个词的意思,得到三个特征向量:单词特征、句法特征、语义特征。

ELMo预训练模型不同于fine-tuning预训练,fine-tuning是用任务B的少量数据去微调任务A的模型,而ELMo是一个现成的特征模型,给定一个单词或一句话,ELMo生成一个特征向量。

2 GPT

fine-tuning文本生成领域也是可行的--》GPT 

给定一句话,ELMo给你这句话的特征向量,GPT给你一个fine-tuning的预训练模型,两者都是一个语言模型

2.1 GPT 预训练

GPT的预训练是要给你一个模型,跟图片领域的预训练一样,Pre-training + fine-tuning,big data去预训练好一个模型,然后把这个预训练好的模型通过微调去完成其他任务。 

 T1、T2其实是下游任务,GPT的下游任务是无法改造的,ELMo的下游任务是可以改造的。 因为GPT是给你一个模型,如果做文本分类,你必须是文本分类的任务,才能fine-tuning预训练好的模型。(两个任务必须相似),

不相似的任务的预训练语言模型,不同去微调fine-tuning --> Bert,借鉴了ELMo的思想,不给你预训练好的语言模型,而是给你特征向量。

GPT Architecture中间每一个小块Trm是transformer decoder。

ELMo做双向编码,可以获取上下文信息,但GPT的Masked特性无法看到下文信息(单向),只能做生成任务,那么能不能做双向呢?可以,换成transformer encoder就可以啊,但这个架构叫Bert。

2.2 GPT 微调

2.3 为什么要用GPT

去做生成式任务:生成式任务的预训练语言模型

  • 机器翻译
  • 问答系统

3. Bert

意义:从大量无标记数据集中训练得到的深度模型,可以显著提高各项nlp任务的准确率。

3.1 Bert集大成者

  • 参考了ELMo模型的双向编码思想
  • 借鉴了GPT用Transformer decoder作为特征提取器的思路  --》bert用了transformer encoder
  • 采用了word2vec所使用的的CBOW方法

extension:单向编码--双向编码区别

e.g. “今天天气很{},我们不得不取消户外运动”,分别从单项编码和双向编码的角度去考虑{}中应该填什么词:

  • 单向编码:单向编码只会考虑上文“今天天气很”,以人类的经验,大概率会从“好”、“不错”、“差”、“槽糕”这几个词中选择,这些词可以被划为截然不同的两类。
  • 双向编码双向编码会同时考虑上下文的信息,即出了会考虑“今天天气很”这五个字,还会考虑“我们不得不去取消户外运动”来帮助模型判断,则大概率会从“差”、“槽糕”这一类词中选择。

3.2  Bert和GPT、EMLo区别

Bert是真正的双向编码;ELMo是伪双向编码,sequence传递,无法完全利用上下文信息。

  • ELMo将训练得到的特征向量以拼接的形式实现双向编码,本质上还是单向编码,只不过是两个方向上的单向编码拼接而成的双向编码。
  • GPT用Transformer block取代lstm作为特征提取器,实现了单向编码,是一个标准的预训练语言模型,即使用fine-tuning模式解决下游任务。
  • Bert是一个标准的预训练语言模型。

3.3 Bert Architecture

从上图可以发现,Bert的模型结构其实就是Transformer Encoder模块的堆叠。在模型参数选择上,论文给出了两套大小不一致的模型。

类比于ELMo模型的单词特征、句法特征、语义特征,这是人为定义的特征,非常狭隘,就是给一层lstm layer定义一种特征名而Bert的L有12层和24层两种,可以认为Bert能从embedding中提取中24种不同的特征。“黑箱”操作,确定有24种特征,但人为很难去定义这些特征名称。

其中,L代表Transformer Block的层数;H代表特征向量的维数(此处默认Feed Forward层中的中间隐层的维数为4H);A表示self-attention的头数,使用这三个参数基本可以确定Bert的量级。

3.3.1 explanation:是否参数多、数据量大,是否过拟合?

大参数量 -> 可能造成过拟合。

如果一个小模型,数据量大了,用大数据集就会过拟合

但是,如果数据量大,模型也大,就不会过拟合了,就能学到更多的东西

conclusion:不是模型越大越好,也不是数据集越多越好,而是模型与数据集进行一个匹配。 

--> 当Bert总参数量为3.4亿时,它可以利用很多数据集,学习很多东西。

3.3.2 Bert training

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

1. 第一阶段:使用易获取的大规模无标签语料,来训练基础语言模型。

2. 第二阶段:根据指定任务的少量带标签训练数据进行微调训练。

不同于GPT等标准语言模型使用p(wi|w1,...,wi-1)为目标函数进行训练,能看到全局信息的Bert使用p(wi|w1,...wi-1,wi+1,...,wn)为目标函数进行训练。

并且Bert用掩码语言模型(MLM)方法训练词的语义理解能力;用下句预测(NSP)方法训练句子之间的理解能力,从而更好地支持下游任务。 

3.4 Bert为什么要做掩码语言模型(MLM, Masked Language Model)

Bert用的是双向编码器,无法使用CBOW词袋模型思想

to use CBOW 思想。 

对于一句话,我输入的时候mask 15%的词,然后用上下文预测这个masked token是什么 --> 类似CBOW model(训练阶段才会这样做,但测试阶段没有mask词

Bert本质是为了生成特征向量 --》测试阶段给你一句话,你就要给我一句话的句向量,再做mask就没意义了。Bert是一个预训练好的语言模型,是为了拿去微调使用的。

problem:这样设计MLM的训练方法会引入偏差/弊端:在模型微调训练阶段或模型测试阶段,输入的文本中将没有[MASK],进而导致产生由训练和测试数据偏差导致的性能损失

solution:之前的做法,会让模型所有精力全部聚焦在mask上面,对于其他的词不管了

用了下述的方法,所有词都有可能是mask词,这样模型会把精力聚焦在大部分词上(包括mask)。

Bert并没有总用[mask]替换掩码词,而是按照一定比例选取替换词。

  • 80%的训练样本中,将选中的词用[mask]代替
  • 10%的训练样本中,选中的词不发生变化。该做法是为了缓解训练文本和预测文本的偏差带来的性能损失。因为解决偏差:要么训练样本不mask,要么测试样本mask
  • 10%的训练样本中,将选中的词用任意的词来进行代替。该做法是为了让Bert学会根据上下文信息自动纠错。

Bert被迫去学习每一个token的表示向量。牺牲效率,提高语义理解能力。

3.5 Bert 下句预测(NSP)

bert得到的是词向量,不是句向量,但是了下游任务改造,需要句子之间相关性或句向量。

目的:为了学会捕捉句子之间的语义联系,Bert采用了下句预测(NSP)作为无监督训练的一部分。

NSP具体做法是,Bert输入的语句将由两个句子构成,其中,50%的概率将语义连贯的两个句子作为训练文本(连续句对对一般选自篇章级别的语料,以此确保前后语句的语义强相关),另外50%的概率将完全随机抽取两个句子作为训练文本。

连续句对:[CLS]今天天气很槽糕[SEP]下午的体育课取消了[SEP]

随机句对:[CLS]今天天气很槽糕[SEP]鱼快被烤焦啦[SEP]

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

training阶段:Bert捕捉两个句对是否连续 --> attention在做注意力机制时,[CLS]标签会和两个语句里的每一个词都会做权重叠加,Bert经过多层transformer编码后,[CLS]包含句子的信息,进而也获得了句子的语义信息。<--CLS BP

通过训练[CLS]编码后的输出标签,Bert可以学会捕捉两个输入句对的文本语义。在连续句对的预测任务中,Bert的正确率可以达到97%-98%。

3.6 Bert下游任务改造

Bert最大作用就是提取特征向量。Bert通过transformer编码器构造获取了强大的特征编码能力,获取到了词向量,NSP获取了句子的语义信息

bert就像一个小孩子,学会了单词的意思,学会了句子意思和连贯,那么只要再稍微点拨一下:

  • 再让他学一下句子的正面和负面意思  --》就可以做情感分类 sentiment classification;
  • 再让他标注一下地点名、人名、机构 --> 词性标注pos

3.6.1 句对分类

判断两个句子是否属于同一个类别。

句对用[SEP]分隔符拼接成文本序列,在句首加入[CLS]标签,将句首标签所对应的输出值作为分类标签,计算预测分类标签与真实分类标签的交叉熵,将其作为优化目标,在任务数据上进行微调训练。

3.6.2 单句分类

给定一个句子,判断该句子的类别。

单句分类在句首加入标签[CLS],将句首标签所对应的输出值作为分类标签,计算预测分类标签与真实分类标签的交叉熵,将其作为优化目标,在任务数据上进行微调训练。

3.6.3 文本问答

上面两个是对bert的输入input进行改造,还可以对bert输出output进行改造

给定一个问句和一个蕴含答案的句子,找出答案在句中的位置,称为文本问答。

为了标注答案的起始位置和终止位置,Bert引入两个辅助向量s(start,判断答案的起始位置)和e(end,判断答案的终止位置)。

Bert判断句子B中答案位置的做法是,将句子B中的每一个词得到的最终特征向量T'经过全连接层(利用全连接层将词的抽象语义特征转化为任务指向的特征)后,分别与向量s和e求内积,对所有内积分别进行softmax操作,即可得到Tok m作为答案起始位置和终止位置的概率。最后,取概率最大的片段作为最终答案。

3.6.4 单句标注

类似命名实体识别NES。

给定一个句子,标注每个词的标签,称为单句标注。

在进行单句标注任务时,需要在每个词的最终语义特征向量之后添加全连接层,将语义特征转化为序列标注任务所需的特征,单句标注任务需要对每个词都做标注,因此不需要引入辅助向量,直接对经过全连接层后的结果做softmax操作,即可得到各类标签的概率分布。

参考:

01 GPT 和 BERT 开课了(两者和 Transformer 的区别)_哔哩哔哩_bilibili

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/IT小白/article/detail/725982
推荐阅读
相关标签
  

闽ICP备14008679号