Transformer模型及基于Keras的复现

1.动态词向量技术
先说以下动态词向量吧。这个东西其实本质上来讲还是需要由word embedding基础上进一步处理。其借助于seq2seq模型,经过encoder端将文本序列动态编码成数值矩阵,其本质上已经脱离了传统词向量模型基于词相似度生成的特征矩阵。对于动态这种词的理解,可以按照Transformer来理解。在encoder端中,通过几层self-attention并行处理,其依据序列语言模型结构,动态计算每一个词的att权值,从而给了每个词的分布概率。最终依托此权值进一步生成attention数值编码。这种迁移学习的编码方式得到的矩阵中包含了文本上下文信息,也解决了部分语序理解问题。

而传统的词向量模型,只是单纯依托于词相似度,同时通过建立的索引词典进行数值编码,这种方式无法解决同义词问题。对于文本前后信息的理解也并未达到良好程度,因此算是落后了吧。
2.Transformer模型理论与结构
图1 Transformer图

Transformer模型结构其实很简单,其本质上是seq2seq模型的变种。首先在Encoder端,其通过将输入文本经过embedding层look up操作后,得到Word embedding矩阵。然后与词位置矩阵进行加性连接,赋予静态词向量词位置关系这类特征。在此基础上输入到多层self attention层构成的Muti-head注意力层中建立序列的动态编码矩阵,后为了避免深度网络所带来的梯度消失问题,做了一次残差连接。通过一层BP神经网络与第二次残差,即得到了最终encoder端的编码值。而在Decoder端,将target序列进行同样嵌入操作后,通过一次带有mask操作的muti-attention层处理,结合encoder端生成的编码矩阵(也叫state状态矩阵)再次经过attention+BP网络处理。最终通过一步线性变化,通过softmax即可得到序列中各个词的输出概率大小。在模型构建中,还加入了Batch Normalization层加速训练,同时避免过拟合。
3.Transformer模型的应用
用法很简单,首先在分类场景下,你只需要一个encoder+softmax即可作为文本分类的baseline,后续进行微调即可。当然,如果你觉得只有encoder不舒服,在后面自己接入其他神经网络模型进行处理也可以。其次,对于文本摘要,NMT问题,生成式对话而言,Decoder端是需要的,但不一定和论文中decoder结构一致,此处不再扩展声明。从这个角度上来看,Transformer反而Encoder是最重要的结构了。
4.基于keras的模型复现
这部分请跳转至GIT仓库查看吧,欢迎提Issue。