BERT模型介绍

一、什么是BERT?

BERT:全称是Bidirectional Encoder Representation from Transformers,即双向Transformer的Encoder,BERT的模型架构基于多层双向转换解码,因为decoder是不能获要预测的信息的,模型的主要创新点都在pre-traing方法上,即用了Masked LM和Next Sentence Prediction两种方法分别捕捉词语和句子级别的representation。

其中“双向”表示模型在处理某一个词时,它能同时利用前面的词和后面的词两部分信息,这种“双向”的来源在于BERT与传统语言模型不同,它不是在给你大牛股所有前面词的条件下预测最可能的当前词,而是随机遮掩一些词,并利用所有没被遮掩的词进行预测。

BERT是一个预训练的模型,那么什么是预训练呢?

假设已有A训练集,先用A对网络进行预训练,在A任务上学会网络参数,然后保存以备后用,当来一个新的任务B,采取相同的网络结构,网络参数初始化的时候可以加载A学习好的参数,其他的高层参数随机初始化,之后用B任务的训练数据来训练网络,当加载的参数保持不变时,称为"frozen",当加载的参数随着B任务的训练进行不断的改变,称为“fine-tuning”,即更好地把参数进行调整使得更适合当前的B任务。

BERT是自然语言处理通用解决方案

BERT pytorch运行 bert模型 pytorch_pytorch

二、Transformer框架

传统的机器翻译中就是丢RNN模型在直接去跑的,但是在这里RNN不能做并行,Transformer可以。

BERT pytorch运行 bert模型 pytorch_神经网络_02


BERT pytorch运行 bert模型 pytorch_自然语言处理_03


BERT pytorch运行 bert模型 pytorch_自然语言处理_04


BERT在一词多意的情况,根据上下文来判断这个词在这里的意思。

BERT pytorch运行 bert模型 pytorch_深度学习_05


BERT pytorch运行 bert模型 pytorch_自然语言处理_06

三、注意力机制

让计算机自己通过上下文去判断这个词语在这句话的意思和重要性。

BERT pytorch运行 bert模型 pytorch_自然语言处理_07


需要计算它每一个对应的关系

BERT pytorch运行 bert模型 pytorch_深度学习_08


BERT pytorch运行 bert模型 pytorch_神经网络_09


Q、K、V三个矩阵做的计算如图

BERT pytorch运行 bert模型 pytorch_自然语言处理_10


BERT pytorch运行 bert模型 pytorch_神经网络_11


BERT pytorch运行 bert模型 pytorch_BERT pytorch运行_12


BERT pytorch运行 bert模型 pytorch_自然语言处理_13


这里可以并行加速去计算

BERT pytorch运行 bert模型 pytorch_神经网络_14

四、Multi-head机制

多头机制(拼接多组不同的特征)

BERT pytorch运行 bert模型 pytorch_BERT pytorch运行_15


一般做8组不同特征,然后拼在一起再连接一个全连接层。

BERT pytorch运行 bert模型 pytorch_深度学习_16


BERT pytorch运行 bert模型 pytorch_BERT pytorch运行_17


不同的头表达的效果不同,颜色越深表示注意力机制越大的,跟自己附近的也越大

BERT pytorch运行 bert模型 pytorch_pytorch_18

五、多层堆叠与位置编码

BERT pytorch运行 bert模型 pytorch_神经网络_19


BERT pytorch运行 bert模型 pytorch_BERT pytorch运行_20


之前的批归一化(Batch Normalization),把每个batch里面的特征按照batch里面的维度,均值变为0,标准差变为1。那我们的层归一化(Layer Normalization)就多做了一个残差的连接。

BERT pytorch运行 bert模型 pytorch_pytorch_21

六、transformer整体架构梳理

BERT pytorch运行 bert模型 pytorch_pytorch_22

BERT pytorch运行 bert模型 pytorch_神经网络_23


BERT pytorch运行 bert模型 pytorch_神经网络_24


BERT pytorch运行 bert模型 pytorch_深度学习_25

六、BERT模型训练方法

在上面讲的 transformer 这个网络架构上进行一步训练就可以了。怎么对特征做编码才是最难的,BERT就是解决这个难题的,它就是解决怎么把这些特征给整出来。

BERT pytorch运行 bert模型 pytorch_自然语言处理_26


BERT pytorch运行 bert模型 pytorch_自然语言处理_27


BERT pytorch运行 bert模型 pytorch_神经网络_28


BERT pytorch运行 bert模型 pytorch_自然语言处理_29


BERT pytorch运行 bert模型 pytorch_神经网络_30

BERT pytorch运行 bert模型 pytorch_pytorch_31


BERT pytorch运行 bert模型 pytorch_神经网络_32

七、BERT开源项目实战

首先教大家怎么在GitHub上找好项目练手(基于你了解了这个知识的一些基础原理),我们先找到我们要练手的知识的关键词信息,然后在GitHub主页上搜索该关键词,马上就可以出现很多大神的项目了。

比如这里我们搜索BERT,出来的第一个项目也就是star最多的项目,它是谷歌的(所以应该用的是自家的tensorflow框架),然后我们点进去,看看人家md写的一些文字介绍,重点看人家给我们提供好的一些预训练模型。

先下载人家训练好的模型 - 再训练,uncased的意思就是英文字母的大小写不转换,cased就是大小写转换。因为我们这个系列是pytorch实战,所以这个开源项目实战就不详细展开了,点到为止,这里用的是tensorflow框架,其实掌握了基础语法就可以看懂的,相信读者看了我这么多系列博客去实战这个项目也不难,有任何问题也可以评论留言私信,我会在看到的第一时间回复的。

BERT pytorch运行 bert模型 pytorch_深度学习_33


BERT pytorch运行 bert模型 pytorch_神经网络_34


BERT pytorch运行 bert模型 pytorch_自然语言处理_35