Bert是从transformer中衍生出来的预训练的模型,transformer模型已经得到广泛应用,应用的方式是先进行预训练语言模型,然后把预训练的模型适配给下游任务,以完成各种不同的任务,比如分类,生成,标记等。
1.transformer编码器
transform和LSTM最大的区别:LSTM的训练是迭代的,一个接一个字的进行训练。transform的训练是并行的,所有的字全部同时训练,这样就大大加快了计算效率,该模型使用了位置嵌入来对语言的顺序进行理解,使用子注意力机制和全连接层来进行计算。
transform模型主要分为两个部分,分别是编码器和解码器。编码器负责把自然语言序列映射称为隐藏层(含有自然语言序列的数学表达),然后解码器把隐藏层在映射为自然语言序列。
transformer由self-atention和feedforwoard neural network组成
简单步骤:
1.输入自然语言序列到编码器
2.编码器输出的隐藏层,在输入到解码器
3.启动解码器
4. 得到第一个字
5.将第一个字落下来再输入到解码器,得到第二个字
6.重复此过程,直到解码器输出终止符,序列生成完成。
1.1位置嵌入
由于transform模型没有循环神经网络的迭代,必须提供每个字的位置信息给transformer才能识别处语言中的顺序关系。
定义一个位置嵌入的概念,位置嵌入的维度为[max sequence length ,embedding dimension],嵌入的维度同词向量的维度,max sequence length属于超参数,指的是限定的最大单个句长。
我们一般以字为单位训练transformermoxing,不适用分词,首先要初始化字向量为[vocab size,embedding dimension].vocab size为总共的字库数量,embedding dimension为字向量的维度也就是每个字的数学表达。
论文中使用sine和consine函数的线性变换来提供给模型位置信息。pos指的是句中字的位置,取值范围是[0,max sequence length],i指的是词向量的维度,取值范围是[0,emdedding dimension].对应着emdedding dimension维度的一组奇数和偶数的序号的维度,分别使用上面的sin和cos函数做处理,从而产生不同的周期性变化,而位置嵌入在embedding dimension维度上随着维度序号的增大,周期变化会越来越慢,从而产生一种包含位置信息的纹理,位置嵌入函数的周期从变化,而每一个位置在embedding dimension维度上都会得到不同周期的sin和cos函数的取值组合,从而产生独一的纹理位置信息,模型从学到位置之间的依赖关系和自然语言的时序特性。