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是自然语言处理通用解决方案
二、Transformer框架
传统的机器翻译中就是丢RNN模型在直接去跑的,但是在这里RNN不能做并行,Transformer可以。
BERT在一词多意的情况,根据上下文来判断这个词在这里的意思。
三、注意力机制
让计算机自己通过上下文去判断这个词语在这句话的意思和重要性。
需要计算它每一个对应的关系
Q、K、V三个矩阵做的计算如图
这里可以并行加速去计算
四、Multi-head机制
多头机制(拼接多组不同的特征)
一般做8组不同特征,然后拼在一起再连接一个全连接层。
不同的头表达的效果不同,颜色越深表示注意力机制越大的,跟自己附近的也越大
五、多层堆叠与位置编码
之前的批归一化(Batch Normalization),把每个batch里面的特征按照batch里面的维度,均值变为0,标准差变为1。那我们的层归一化(Layer Normalization)就多做了一个残差的连接。
六、transformer整体架构梳理
六、BERT模型训练方法
在上面讲的 transformer 这个网络架构上进行一步训练就可以了。怎么对特征做编码才是最难的,BERT就是解决这个难题的,它就是解决怎么把这些特征给整出来。
七、BERT开源项目实战
首先教大家怎么在GitHub上找好项目练手(基于你了解了这个知识的一些基础原理),我们先找到我们要练手的知识的关键词信息,然后在GitHub主页上搜索该关键词,马上就可以出现很多大神的项目了。
比如这里我们搜索BERT,出来的第一个项目也就是star最多的项目,它是谷歌的(所以应该用的是自家的tensorflow框架),然后我们点进去,看看人家md写的一些文字介绍,重点看人家给我们提供好的一些预训练模型。
先下载人家训练好的模型 - 再训练,uncased的意思就是英文字母的大小写不转换,cased就是大小写转换。因为我们这个系列是pytorch实战,所以这个开源项目实战就不详细展开了,点到为止,这里用的是tensorflow框架,其实掌握了基础语法就可以看懂的,相信读者看了我这么多系列博客去实战这个项目也不难,有任何问题也可以评论留言私信,我会在看到的第一时间回复的。