赞
踩
目录
3.3.1 explanation:是否参数多、数据量大,是否过拟合?
3.4 Bert为什么要做掩码语言模型(MLM, Masked Language Model)
GPT和Bert集大成者,把以前好的东西集成在一起。
BERT:基础模型时transformer的编码器(做特征提取--> embedding vector),目的是让模型去认识客观世界的万事万物,然后就可以让AI和各学科交叉,并通过下游任务的改造,去发掘物与物之间的联系。
GPT:基础模型是Transformer的解码器(做生成式任务),因为decoder中有Masked Multi-head Attention,masked注定了你不能发掘后面的信息 -->所以可以去预测下面的东西。
缺点:Bert和GPT参数量非常大(GPT1,3亿参数;GPT2,15亿参数),训练一个模型需要几百万美金expense。
word2vec,是为了得到词向量。通过上下文得到词向量,而不是去预测下一个词(不重要)。
ELMo,是为了做语言模型。通过上下文去准确预测下一个词。like BERT model。
ELMo语言模型,通过上下文获取下一个词的意思,得到三个特征向量:单词特征、句法特征、语义特征。
ELMo预训练模型不同于fine-tuning预训练,fine-tuning是用任务B的少量数据去微调任务A的模型,而ELMo是一个现成的特征模型,给定一个单词或一句话,ELMo生成一个特征向量。
fine-tuning文本生成领域也是可行的--》GPT
给定一句话,ELMo给你这句话的特征向量,GPT给你一个fine-tuning的预训练模型,两者都是一个语言模型
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。
去做生成式任务:生成式任务的预训练语言模型
意义:从大量无标记数据集中训练得到的深度模型,可以显著提高各项nlp任务的准确率。
e.g. “今天天气很{},我们不得不取消户外运动”,分别从单项编码和双向编码的角度去考虑{}中应该填什么词:
Bert是真正的双向编码;ELMo是伪双向编码,sequence传递,无法完全利用上下文信息。
从上图可以发现,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的量级。
大参数量 -> 可能造成过拟合。
如果一个小模型,数据量大了,用大数据集就会过拟合。
但是,如果数据量大,模型也大,就不会过拟合了,就能学到更多的东西。
conclusion:不是模型越大越好,也不是数据集越多越好,而是模型与数据集进行一个匹配。
--> 当Bert总参数量为3.4亿时,它可以利用很多数据集,学习很多东西。
和GPT一样,bert也采用二段式训练方法:
1. 第一阶段:使用易获取的大规模无标签语料,来训练基础语言模型。
2. 第二阶段:根据指定任务的少量带标签训练数据进行微调训练。
不同于GPT等标准语言模型使用p(wi|w1,...,wi-1)为目标函数进行训练,能看到全局信息的Bert使用p(wi|w1,...wi-1,wi+1,...,wn)为目标函数进行训练。
并且Bert用掩码语言模型(MLM)方法训练词的语义理解能力;用下句预测(NSP)方法训练句子之间的理解能力,从而更好地支持下游任务。
Bert用的是双向编码器,无法使用CBOW词袋模型思想
to use CBOW 思想。
对于一句话,我输入的时候mask 15%的词,然后用上下文预测这个masked token是什么 --> 类似CBOW model(训练阶段才会这样做,但测试阶段没有mask词)
Bert本质是为了生成特征向量 --》测试阶段给你一句话,你就要给我一句话的句向量,再做mask就没意义了。Bert是一个预训练好的语言模型,是为了拿去微调使用的。
problem:这样设计MLM的训练方法会引入偏差/弊端:在模型微调训练阶段或模型测试阶段,输入的文本中将没有[MASK],进而导致产生由训练和测试数据偏差导致的性能损失。
solution:之前的做法,会让模型所有精力全部聚焦在mask上面,对于其他的词不管了
用了下述的方法,所有词都有可能是mask词,这样模型会把精力聚焦在大部分词上(包括mask)。
Bert并没有总用[mask]替换掩码词,而是按照一定比例选取替换词。
Bert被迫去学习每一个token的表示向量。牺牲效率,提高语义理解能力。
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%。
Bert最大作用就是提取特征向量。Bert通过transformer编码器构造获取了强大的特征编码能力,获取到了词向量,NSP获取了句子的语义信息。
bert就像一个小孩子,学会了单词的意思,学会了句子意思和连贯,那么只要再稍微点拨一下:
判断两个句子是否属于同一个类别。
句对用[SEP]分隔符拼接成文本序列,在句首加入[CLS]标签,将句首标签所对应的输出值作为分类标签,计算预测分类标签与真实分类标签的交叉熵,将其作为优化目标,在任务数据上进行微调训练。
给定一个句子,判断该句子的类别。
单句分类在句首加入标签[CLS],将句首标签所对应的输出值作为分类标签,计算预测分类标签与真实分类标签的交叉熵,将其作为优化目标,在任务数据上进行微调训练。
上面两个是对bert的输入input进行改造,还可以对bert输出output进行改造。
给定一个问句和一个蕴含答案的句子,找出答案在句中的位置,称为文本问答。
为了标注答案的起始位置和终止位置,Bert引入两个辅助向量s(start,判断答案的起始位置)和e(end,判断答案的终止位置)。
Bert判断句子B中答案位置的做法是,将句子B中的每一个词得到的最终特征向量T'经过全连接层(利用全连接层将词的抽象语义特征转化为任务指向的特征)后,分别与向量s和e求内积,对所有内积分别进行softmax操作,即可得到Tok m作为答案起始位置和终止位置的概率。最后,取概率最大的片段作为最终答案。
类似命名实体识别NES。
给定一个句子,标注每个词的标签,称为单句标注。
在进行单句标注任务时,需要在每个词的最终语义特征向量之后添加全连接层,将语义特征转化为序列标注任务所需的特征,单句标注任务需要对每个词都做标注,因此不需要引入辅助向量,直接对经过全连接层后的结果做softmax操作,即可得到各类标签的概率分布。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。