赞
踩
【NLP】Google BERT模型原理详解 - rumor的文章 - 知乎
BERT详解 - 大师兄的文章 - 知乎
在大体了解以后可以将源码debug一下,这里推荐一个pytorch的bert源码
BERT
的全称是Bidirectional Encoder Representation from Transformers
,即双向Transformer
的Encoder
,因为Decoder
是不能获要预测的信息的。
BERT = Encoder of Transformer
模型的主要创新点都在pre-train
方法上,即用了Masked LM
和Next Sentence Prediction
两种方法分别捕捉词语和句子级别的representation
。
BERT的网络架构使用的是《Attention is all you need》
中提出的多层Transformer
结构,其最大的特点是抛弃了传统的RNN
和CNN
,通过Attention
机制将任意位置的两个单词的距离转换成1,有效的解决了NLP
中棘手的长期依赖问题。
Transformer
的结构在NLP
领域中已经得到了广泛应用,并且作者已经发布在TensorFlow
的tensor2tensor
库中。
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的尺寸
BERT
的输入的编码向量(长度是512
)是3各嵌入特征的单位和,如图4,这三个词嵌入的特征是
playing
拆成play
和ing
Position Embedding
):位置嵌入是将单词的位置信息编码成特征向量,位置嵌入是向模型中引入单词位置关系的至关重要的一环。Segment Embedding
):用于区分两个句子,例如B是否是A的下文(对话场景,问答场景等)。对于句子对,第一个句子的特征值是0,第二个句子的特征值是1.最后,说明一下图4中的两个特殊符号[CLS]
和[SEP]
,其中[CLS]
表示该特征用于分类模型,对非分类模型,该符合可以省去。[SEP]
表示分句符号,用于断开输入语料中的两个句子。
BERT是一个多任务模型,它的任务由两个自监督任务组成,即MLM
和NSP
第一步预训练的目标就是语言模型,从上下文模型结构中可以看到这个模型的不同,即Bidirectional。
为什么要如此bidirectional?
如果使用预训练模型处理其他任务,那人们想要的肯定不止词左边的信息,而是左右两边的信息。
而考虑到这点的模型ELMo
只是将left-to-right
和right-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%
的单词,模型收敛会较慢
Next Sentence Prediction(NSP)
的任务是判断句子B是否是句子A的下文。
如果是输出"IsNext
",否则输出"NotNext
"。
训练数据的生成方式是从平行语料中随机抽取的连续两句话,其中50%
保留抽取的两句话,它们符合IsNext
关系,另外50%
的第二句话随机从语料中提取,它们的关系是NotNext
。这个关系保存在图4中的[CLS]
符号
在海量语料训练完BERT
之后,便可以将其应用到NLP的各个任务中。
对应于NSP
任务来说,其条件概率表示为
P
=
s
o
f
t
m
a
x
(
C
W
T
)
P = softmax(CW^T)
P=softmax(CWT),其中
C
C
C是BERT
输出中的[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处理之后得到的特征向量。
可以调整的参数和取值范围有:
因为大部分参数都和预训练时一样,精调会快一些,所以作者推荐多试一些参数。
MNLI
:给定一个前提 (Premise
) ,根据这个前提去推断假设 (Hypothesis
) 与前提的关系。该任务的关系分为三种,蕴含关系 (Entailment
)、矛盾关系 (Contradiction
) 以及中立关系 (Neutral
)。所以这个问题本质上是一个分类问题,我们需要做的是去发掘前提和假设这两个句子对之间的交互信息。QQP
:基于Quora
,判断 Quora
上的两个问题句是否表示的是一样的意思。QNLI
:用于判断文本是否包含问题的答案,类似于我们做阅读理解定位问题所在的段落。STS-B
:预测两个句子的相似性,包括5个级别。MRPC
:也是判断两个句子是否是等价的。RTE
:类似于MNLI
,但是只是对蕴含关系的二分类判断,而且数据集更小。SWAG
:从四个句子中选择为可能为前句下文的那个。对于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=14eV⋅CieV⋅Ci(1)
SQuAD v1.1:给定一个句子(通常是一个问题)和一段描述文本,输出这个问题的答案,类似于做阅读理解的简答题。如图5.©表示的,SQuAD的输入是问题和描述文本的句子对。输出是特征向量,通过在描述文本上接一层激活函数为softmax的全连接来获得输出文本的条件概率,全连接的输出节点个数是语料中Token的个数。
CoNLL-2003 NER:判断一个句子中的单词是不是Person,Organization,Location,Miscellaneous或者other(无命名实体)。微调CoNLL-2003 NER时将整个句子作为输入,在每个时间片输出一个概率,并通过softmax得到这个Token的实体类别。
优点
Transformer
的结构将已经走向瓶颈期的Word2Vec
带向了一个新的方向,并再一次炒火了《Attention is All you Need》
这篇论文;NLP
任务的精度大幅提升足以震惊整个深度学习领域;BERT算法还有很大的优化空间,例如我们在Transformer中讲的如何让模型有捕捉Token序列关系的能力,而不是简单依靠位置嵌入。BERT的训练在目前的计算资源下很难完成,论文中说 [公式] 的训练需要在64块TPU芯片上训练4天完成,而一块TPU的速度约是目前主流GPU的7-8倍。非常幸运的是谷歌开源了各种语言的模型,免去了我们自己训练的工作。
缺点
2.2 缺点
作者在文中主要提到的就是MLM预训练时的mask问题:
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。