BERT模型原理的详细介绍

参考文章

【NLP】Google BERT模型原理详解 - rumor的文章 - 知乎
BERT详解 - 大师兄的文章 - 知乎

在大体了解以后可以将源码debug一下,这里推荐一个pytorch的bert源码

  • 由于我的github时而可以时而不可以,这里给一个github镜像网站的地址,大家可以自行再到github官网寻找

1. BERT模型

BERT的全称是Bidirectional Encoder Representation from Transformers,即双向TransformerEncoder,因为Decoder是不能获要预测的信息的。

BERT = Encoder of Transformer

模型的主要创新点都在pre-train方法上,即用了Masked LMNext Sentence Prediction两种方法分别捕捉词语句子级别的representation

1.1 模型结构

BERT的网络架构使用的是《Attention is all you need》中提出的多层Transformer结构,其最大的特点是抛弃了传统的RNNCNN,通过Attention机制将任意位置的两个单词的距离转换成1,有效的解决了NLP中棘手的长期依赖问题。
Transformer的结构在NLP领域中已经得到了广泛应用,并且作者已经发布在TensorFlowtensor2tensor库中。

Transformer的网络架构如图1所示,Transformer是一个encoder-decoder的结构,由若干个编码器和解码器堆叠形成。
1 1 1的左侧部分为编码器,由Multi-Head Attention和一个全连接组成,用于将输入语料转化成特征向量。
右侧部分是解码器,其输入为编码器的输出以及已经预测的结果,由Masked Multi-Head Attention, Multi-Head Attention以及一个全连接组成,用于输出最后结果的条件概率。

关于Transformer的详细解析参考我之前总结的文档。

在这里插入图片描述

图1的左侧部分时一个transformer block,即transformer的Encoder,对应到图2 BERT中的一个Trm

BERT对比这两个算法的优点是只有BERT表征会基于所有层中的左右两侧语境

BERT能做到这一点得益于Transformer中Attention机制将任意位置的两个单词的距离转换成了1。
在这里插入图片描述

BERT提供了简单和复杂两个模型,对应的超参数分别如下:

  • B E R T B A S E BERT_{BASE} BERTBASE : L=12,H=768,A=12,参数总量110M;

  • B E R T L A R G E BERT_{LARGE} BERTLARGE : L=24,H=1024,A=16,参数总量340M;

  • L:网络层数,即Transformer blocks的数量

  • A:表示Multi-Head Attention中self-Attention的数量

  • H:filter的尺寸

1.2 输入表示

BERT的输入的编码向量(长度是512)是3各嵌入特征的单位和,如图4,这三个词嵌入的特征是

  1. WordPiece 嵌入:WordPiece是指将单词划分成一组有限的公共子词单元,能在单词的有效性和字符的灵活性之间取得一个这种的平衡。图4示例中的playing拆成playing
  2. 位置嵌入(Position Embedding):位置嵌入是将单词的位置信息编码成特征向量,位置嵌入是向模型中引入单词位置关系的至关重要的一环。
  3. 分割嵌入(Segment Embedding):用于区分两个句子,例如B是否是A的下文(对话场景,问答场景等)。对于句子对,第一个句子的特征值是0,第二个句子的特征值是1.

最后,说明一下图4中的两个特殊符号[CLS][SEP],其中[CLS]表示该特征用于分类模型,对非分类模型,该符合可以省去。[SEP]表示分句符号,用于断开输入语料中的两个句子。
在这里插入图片描述

1.3 预训练任务

BERT是一个多任务模型,它的任务由两个自监督任务组成,即MLMNSP

1.3.1 Task 1:Masked Language Model

第一步预训练的目标就是语言模型,从上下文模型结构中可以看到这个模型的不同,即Bidirectional。

为什么要如此bidirectional?

如果使用预训练模型处理其他任务,那人们想要的肯定不止词左边的信息,而是左右两边的信息。
而考虑到这点的模型ELMo只是将left-to-rightright-to-left分别训练拼接起来。

Masked Language Model(MLM)和核心思想取自Wilson Taylor在1953年发表的一篇论文[7]。
所谓MLM是指在训练的时候随机从输入语料中mask掉一些单词,然后通过上下文进行预测该单词。
该任务非常像我们在中学时期经常做的完形填空。正如传统的语言模型算法和RNN匹配那样,MLM的这个性质和Transformer的结构是非常匹配的。

BERT的实验中,15%WordPiece Token会被随机Mask掉。
在训练模型时,一个句子会被多次喂到模型中用于参数学习,但是Google并没有在每次都mask掉这些单词,而是在确定要Mask掉的单词之后,80%的时候会直接替换为[MASK],10%替换为其他任意单词,10%的时候保留原始Token

- 80%:my dog is hairy -> my dog is [mask]
- 10%:my dog is hairy -> my dog is apple
- 10%:my dog is hairy -> my dog is hairy

为什么这样做?

如果句子中的某个Token100%被mask掉,那么在fine-tuning的时候模型就会有一些没有见过的单词。
加入随机Token的原因是因为Transformer要保持对每个输入token的分布式表征,否则模型就会记住这些[mask]token ’hairy‘

至于单词带来的负面影响,因为一个单词被随机替换掉的概率只有10% * 15% = 1.5%,负面影响较小。

另外文章指出,每次只预测15%的单词,模型收敛会较慢

1.3.2 Task 2:Next Sentence Prediction

Next Sentence Prediction(NSP)的任务是判断句子B是否是句子A的下文。
如果是输出"IsNext",否则输出"NotNext"。
训练数据的生成方式是从平行语料中随机抽取的连续两句话,其中50%保留抽取的两句话,它们符合IsNext关系,另外50%的第二句话随机从语料中提取,它们的关系是NotNext。这个关系保存在图4中的[CLS]符号

1.4 微调(fine-tuning)

在海量语料训练完BERT之后,便可以将其应用到NLP的各个任务中。
对应于NSP任务来说,其条件概率表示为 P = s o f t m a x ( C W T ) P = softmax(CW^T) P=softmax(CWT),其中 C C CBERT输出中的[CLS]符号, W W W是可学习的权值矩阵

对于其他任务来说,我们也可以根据BERT的输出信息做出相应的预测。
图5展示BERT在11各不同任务中的模型,它们只需要在BERT的基础上再添加一个输出层便可以完成对特定任务的微调。

这些任务类似于我们做过的文科试卷,其中有选择题,简答题等等
图5中其中Tok表示不同的Token, E E E表示嵌入向量, T i T_i Ti表示第 i i i 个Token在经过BERT处理之后得到的特征向量。

在这里插入图片描述
可以调整的参数和取值范围有:

  • Batch size: 16, 32
  • Learning rate (Adam): 5e-5, 3e-5, 2e-5
  • Number of epochs: 3, 4

因为大部分参数都和预训练时一样,精调会快一些,所以作者推荐多试一些参数。

基于句子对的分类任务

  • MNLI:给定一个前提 (Premise) ,根据这个前提去推断假设 (Hypothesis) 与前提的关系。该任务的关系分为三种,蕴含关系 (Entailment)、矛盾关系 (Contradiction) 以及中立关系 (Neutral)。所以这个问题本质上是一个分类问题,我们需要做的是去发掘前提和假设这两个句子对之间的交互信息。
  • QQP:基于Quora,判断 Quora上的两个问题句是否表示的是一样的意思。
  • QNLI:用于判断文本是否包含问题的答案,类似于我们做阅读理解定位问题所在的段落。
  • STS-B:预测两个句子的相似性,包括5个级别。
  • MRPC:也是判断两个句子是否是等价的。
  • RTE:类似于MNLI,但是只是对蕴含关系的二分类判断,而且数据集更小。
  • SWAG:从四个句子中选择为可能为前句下文的那个。

基于单个句子的分类任务

  • SST-2:电影评价的情感分析。
  • CoLA:句子语义判断,是否是可接受的(Acceptable)。

对于GLUE数据集的分类任务(MNLI,QQP,QNLI,SST-B,MRPC,RTE,SST-2,CoLA),BERT的微调方法是根据[CLS]标志生成一组特征向量 C C C,并通过一层全连接进行微调。损失函数根据任务类型自行设计,例如多分类的softmax或者二分类的sigmoid

SWAG的微调方法与GLUE数据集类似,只不过其输出是四个可能选项的softmax

P i = e V ⋅ C i ∑ j = 1 4 e V ⋅ C i (1) P_i = \frac{e^{V \cdot C_i}}{\sum_{j=1}^4e^{V \cdot C_i}}\tag{1} Pi=j=14eVCieVCi(1)

问答任务

SQuAD v1.1:给定一个句子(通常是一个问题)和一段描述文本,输出这个问题的答案,类似于做阅读理解的简答题。如图5.©表示的,SQuAD的输入是问题和描述文本的句子对。输出是特征向量,通过在描述文本上接一层激活函数为softmax的全连接来获得输出文本的条件概率,全连接的输出节点个数是语料中Token的个数。

命名实体识别

CoNLL-2003 NER:判断一个句子中的单词是不是Person,Organization,Location,Miscellaneous或者other(无命名实体)。微调CoNLL-2003 NER时将整个句子作为输入,在每个时间片输出一个概率,并通过softmax得到这个Token的实体类别。

2. 总结

优点

  1. 使用Transformer的结构将已经走向瓶颈期的Word2Vec带向了一个新的方向,并再一次炒火了《Attention is All you Need》这篇论文;
  2. 11个NLP任务的精度大幅提升足以震惊整个深度学习领域;
  3. 无私的开源了多种语言的源码和模型,具有非常高的商业价值。
  4. 迁移学习又一次胜利,而且这次是在NLP领域的大胜,狂胜。

BERT算法还有很大的优化空间,例如我们在Transformer中讲的如何让模型有捕捉Token序列关系的能力,而不是简单依靠位置嵌入。BERT的训练在目前的计算资源下很难完成,论文中说 [公式] 的训练需要在64块TPU芯片上训练4天完成,而一块TPU的速度约是目前主流GPU的7-8倍。非常幸运的是谷歌开源了各种语言的模型,免去了我们自己训练的工作。

缺点
2.2 缺点

作者在文中主要提到的就是MLM预训练时的mask问题:

  • [MASK]标记在实际预测中不会出现,训练时用过多[MASK]影响模型表现
  • 每个batch只有15%的token被预测,所以BERT收敛得比left-to-right模型要慢(它们会预测每个token)
  • 7
    点赞
  • 59
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值