NLP入门之新闻文本分类竞赛——BERT

一、Transformer模型整体框架

NLP入门之新闻文本分类竞赛——BERT

二、Encoder层

1、首先,self-attention会计算出三个新的向量,在论文中,向量的维度是512维,我们把这三个向量分别称为Query:要去查询的、Key:等着被查的、Value:实际的特征信息,这三个向量是用embedding向量与一个矩阵相乘得到的结果,这个矩阵是随机初始化的,维度为(64,512)注意第二个维度需要和embedding的维度一样,其值在BP的过程中会一直进行更新,得到的这三个向量的维度是64低于embedding维度的。

NLP入门之新闻文本分类竞赛——BERT

2、计算self-attention的分数值,该分数值决定了当我们在某个位置encode一个词时,对输入句子的其他部分的关注程度。这个分数值的计算方法是Query与Key做点成,以下图为例,首先我们需要针对Thinking这个词,计算出其他词对于该词的一个分数值,首先是针对于自己本身即q1·k1,然后是针对于第二个词即q1·k2。
NLP入门之新闻文本分类竞赛——BERT

3、然后把得到的结果做一个softmax的计算。得到的结果即是每个词对于当前位置的词的相关性大小,当然,当前位置的词相关性肯定会会很大,下一步就是把Value和softmax得到的值进行相乘,并相加,得到的结果即是self-attetion在当前节点的值。
NLP入门之新闻文本分类竞赛——BERT

4、self-attention加入的一个机制——多头机制。通过不同的head得到多个特征表达 ,将所有特征拼接在一起 ,可以通过再一层全连接来降维具体,过程如下图。

NLP入门之新闻文本分类竞赛——BERT

5、transformer模型中还缺少一种解释输入序列中单词顺序的方法。为了处理这个问题,transformer给encoder层和decoder层的输入添加了一个额外的向量Positional Encoding,维度和embedding的维度一样,这个向量采用了一种很独特的方法来让模型学习到这个值,这个向量能决定当前词的位置,或者说在一个句子中不同的词之间的距离。这个位置向量的具体计算方法有很多种,论文中的计算方法如下:
PE(pos,2i)=sin(pos/100002i/dmodel) PE(pos,2i)=sin(pos/10000^{2i/d_{model}})

PE(pos,2i+1)=cos(pos/100002i/dmodel) PE(pos,2i+1) = cos(pos/10000^{2i/d_{model}})

NLP入门之新闻文本分类竞赛——BERT

6、在transformer中,每一个子层(self-attetion,ffnn)之后都会接一个残差模块,并且有一个Layer normalization。
NLP入门之新闻文本分类竞赛——BERT

三、Decoder 层

Decoder 层和encoder层类似,主要是加入了MASK机制,Transformer 模型里面涉及两种 mask,分别是 padding mask 和 sequence mask。当decoder层全部执行完毕后,只需要在结尾再添加一个全连接层和softmax层,假如我们的词典是1w个词,那最终softmax会输入1w个词的概率,概率值最大的对应的词就是我们最终的结果。
NLP入门之新闻文本分类竞赛——BERT