Bert论文综述

BERT是一种基于Transformer架构的预训练语言模型它使用大量未标记的文本进行预训练,然后使用标记的数 据进行微调。全称Bidirectional Encoder Representations Transformer。

pre-training and fine-tuning

NLP 中的 Feature-based 和 Fine-tune 两种学习方法

A Feature-based 方法:不使用模型本身,而是使用模型训练得到的参数作为词语的 embedding;feature-base 方法最典型的例子就是ELMO和word2vec。

B Fine-tune 方法会根据下游特定的任务,在原来的模型上面进行一些修改,使得最后输出是当前任务需要的。这些修改一般是在模型的最后一层,或者在现有的网络后添加一个网络结构用于匹配下游的各种任务;GPT1 GPT2 就采用了Fine-tune 方法,GPT3得益于海量的与训练样本和庞大的网络参数,不在需要 fine-tune过程;BERT论文采用了MLM + fine-tuning的方法,同时也讨论了BERT + task-specific model的方法。

在迁移学习中也有类似 Fine-tune(微调)操作,例如固定卷积层(使用训练好的固定卷积结构和固定网络参数提取图像特征),然后训练后边的全连接层。

Model Architecture

基本就是a multi-layer bidirectional Transformer encoder !!Transformer encoder:双向的Transformer,其每一个token会attend到所有的token。

we denote the number of layers(i.e., Transformer blocks) as L, the hidden size as H, and the number of self-attention heads as A.3 We primarily report results on two model sizes:

BERTBASE (L=12, H=768, A=12, Total Parameters=110M) -- 12个TF Encoder的堆叠

and BERTLARGE (L=24, H=1024,A=16, Total Parameters=340M). -- 24个TF Encoder的堆叠

输入

思路:需要既可以输入单个句子,也可以输入pair of sentences(e.g., h Question, Answer i)。

方法:见下图

首个token: The first token of every sequence is always a special classification token ([CLS]),求最后输出为C。

Embedding:见下图,包括3类embedding。分词用Tok编码,句子中间新增SEP,新增embedding指示属于句子A还是B。

输出

每个输入对应一个输出。C为分类token([CLS])对应最后一个Transformer的输出, 则代表其他token对应最后一个Transformer的输出。对于一些token级别的任务(如,序列标注和问答任务),就把 输入到额外的输出层中进行预测。对于一些句子级别的任务(如,自然语言推断和情感分类任务),就把C输入到额外的输出层中,这里也就解释了为什么要在每一个token序列前都要插入特定的分类token。

1、Pre-training model 利用大规模文本数据的自监督性质来构建预训练任务

1) masked language model (MLM) pre-training objective

In all of our experiments, we mask 15% of all WordPiece tokens in each sequence at random.实际操作中,由于可能并不涉及具体的token,处理流程如下:

1、位置随机:

The training data generator chooses 15% of the token positions at random for prediction.

2、替换策略: If the i-th token is chosen, we replace the i-th token with

(1) the [MASK] token 80% of the time

(2) a random token 10% of the time

(3) the unchanged i-th token 10% of the time.

Then, we will be used to predict the original token with cross entropy loss. We compare variations of this procedure in Appendix C.2.

MLM是BERT能够不受单向语言模型所限制的原因。简单来说就是以15%的概率用mask token ([MASK])随机地对每一个训练序列中的token进行替换,然后预测出[MASK]位置原有的单词。然而,由于[MASK]并不会出现在下游任务的微调(fine-tuning)阶段,因此预训练阶段和微调阶段之间产生了不匹配(这里很好解释,就是预训练的目标会令产生的语言表征对[MASK]敏感,但是却对其他token不敏感)。因此BERT采用了以下策略来解决这个问题:

首先在每一个训练序列中以15%的概率随机地选中某个token位置用于预测,假如是第i个token被选中,则会被替换成以下三个token之一

1)80%的时候是[MASK]。如,my dog is hairy——>my dog is [MASK]

2)10%的时候是随机的其他token。如,my dog is hairy——>my dog is apple

3)10%的时候是原来的token(保持不变,个人认为是作为2)所对应的负类)。如,my dog is hairy——>my dog is hairy

再用该位置对应的 去预测出原来的token(输入到全连接,然后用softmax输出每个token的概率,最后用交叉熵计算loss)。

该策略令到BERT不再只对[MASK]敏感,而是对所有的token都敏感,以致能抽取出任何token的表征信息。这里给出论文中关于该策略的实验数据

(以上中文说明来自 什么是BERT? - 知乎

例如:"CLS,你,好,SEP,我,是,jack,SEP",先从中随机寻找15%的单词进行标记Mask(不包括CLS,SEP)。若随机找到"好","我","是",这三个字,再从随机到的字中,把80%的字直接用Mask标记,"好"->"mask";10%替换成其他字,"是"->"有";剩下10%不做任何处理"我"->"我"。如上图,最后输入就变成"CLS,你,mask,SEP,我,有,jack,SEP"最为最终的输入。最后预测被mask的三个字"mask","我","有",其真实标签是"好","我","是"。这个任务能帮助Bert去推测语句意思。

然后把每一个训练数据处理成相同长度,不足用"pad"占位,太长直接去掉,最后把句子中没每个token用字典索引表示,也就是用一个数字表示。

【BERT:一切过往, 皆为序章】BERT预训练模型 | 10分钟理解Bert | Pytorch代码讲解 | 代码可运行 - 知乎

2) next sentence prediction task

每一个训练样例,我们在语料库中挑选出句子A和句子B来组成,50%的时候句子B就是句子A的下一句(标注为IsNext),剩下50%的时候句子B是语料库中的随机句子(标注为NotNext)。接下来把训练样例输入到BERT模型中,用[CLS]对应的C信息去进行二分类的预测。

Input1=[CLS] the man went to [MASK] store [SEP] he bought a gallon [MASK] milk [SEP]

Label1=IsNext

Input2=[CLS] the man [MASK] to the store [SEP] penguin [MASK] are flight ##less birds [SEP]

Label2=NotNext

(以上中文说明来自 什么是BERT? - 知乎

3)预训练任务总结

把每一个训练样例输入到BERT中可以相应获得两个任务对应的loss,再把这两个loss加在一起就是整体的预训练loss。(也就是两个任务同时进行训练)

2、Fine-tuned model

没有看论文的具体例子,但是参考知乎文档:

这里fine-tuning之前对模型的修改非常简单,例如针对sequence-level classification problem(例如情感分析),取第一个token的输出表示,喂给一个softmax层得到分类结果输出;对于token-level classification(例如NER),取所有token的最后层transformer输出,喂给softmax层做分类。

总之不同类型的任务需要对模型做不同的修改,但是修改都是非常简单的,最多加一层神经网络即可。如下图所示

实验分析: 论文解读:BERT模型及fine-tuning - 知乎

对于Masked LM、NSP的选择是否会影响模型性能,这里做了测试,分别采用了四种模型设置进行比较,性能如下所示,显然BERTBase的效果最好的

这里主要讨论Masked LM和普通LM的训练时间问题,可以看到:

training steps的影响

BERT的确需要训练很长steps

MLM的确收敛比LTR慢,但是很早就效果好于LTR了

BERT+feature-based

由于并非所有的NLP任务都可以很容易地用Transformer encoder结构来表示,因此还是需要一个task-specific model结构。同时如果需要fine-tuning的话,transformer encoder模型很大,需要重新训练的话,需要的计算资源比feature-based方法更多,因此如果可以直接用BERT的Transformer的结果的话,就很方面使用了。因此本文做了一个BERT + task-specific model的实验。表明这种方式也是可以有很好的效果的。

总结

  1. BERT采用Masked LM + Next Sentence Prediction作为pre-training tasks, 完成了真正的Bidirectional LM
  2. BERT模型能够很容易地Fine-tune,并且效果很好,并且BERT as additional feature效果也很好
  3. 模型足够泛化,覆盖了足够多的NLP tasks
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值