就以上问题给出解决方案融合自注意力模型——Transformer
各式各样nlp任务都可以用seq2seq来解
(特制化model求解可能效果更好)
最经典的模型:Transformer
一个seq2seq的model
Transformer 就是一个 Seq2seq (Sequence-to-sequence) 的模型
原理:encoder+decoder
Encoder 要做的事情就是给一排向量,输出一排向量,这可利用多种模型实现,如 CNN, RNN 等。Transformer 中的 Encoder 就是用的 Self-attention。
encoder里面分成很多个block,每个block都是输入一排向量输出一排向量
每个block里:vector1先做一次self-attention考虑整个seq的信息后输出一组vector2,然后将此组vector2作为输入投入一个全连接层,然后输出一组vector3,作为一个block的输出
PS:有一种network架构——residual connection将输出a再加上原始输入b作为新的vector a+b;然后再将其经过一个layer-norm得到的output才是全连接层的输入,同样也有residual架构(output+=input)+layer norm——residual network中一个block输出
注:Transformer 的Encoder架构不一定要这么设计,此处为原始论文中的架构设计。
还有其他实现方式
下图中,Multi-head Attention其实就是多个Self-Attention结构的结合1。Decoder相比Encoder,在Multi-Head Attention上还加了一个 “Masked”(Masked Self-attention):decoder是一个一个按顺序产生的,只能考虑左边的信息目前的Decoder的运行中,机器并不知道什么时候停下来,一直重复操作,如同“词语接龙”:机、器、学、习、惯、… 因此需要增加一个终止符号END来结束执行。 非自回归 Non-autoregressive (NAT)
NAT 只需要一次性输入就可以产生整个句子。
Q:如何确定NAT decoder的输出长度?
A1:另外学习出一个分类器,它输入Encoder的input,输出Encoder应该输出的长度
A2:输出一个很长的序列,忽略END标识后的token(如上图)
优点:并行处理,速度快;输出长度可控。
缺点:NAT的表现往往逊色于AT:多模态问题 Multi-modality.
encoder和decoder的连接
cross attention 连接encoder和decoder的桥梁,此处有两个输入来自encoder一个来自decoder,此模组运作过程如下图所示
训练模型
eg:语音辨识任务,人工标注label
在输入的时候会给Decoder正确答案,这种方式叫做"Teacher Forcing";使用交叉熵对模型进行评估(越小越好)。
测试的时候,Decoder会产生错误的输出,但是训练的时候是完全正确的,这种不一致的现象叫做 Exposure Bias4。可以在训练的时候类似“加入扰动”的方式来解决——scheduled sampling(定时采样),这种方式会影响Transformer的并行化。
有唯一可能确切答案——beam search
需要创造力,不唯一答案——需要一定随机性
优点
缺点
参数量过大:每个transformer块中包括了自注意力模型中输入向量的三个角色映射矩阵,多头机制导致相应参数倍增,引入非线性的多层感知器等,整个模型还需要堆叠多层transformer块,参数量成倍扩大
巨大的参数量导致模型训练难度大,尤其是训练数据较小时
因此为了降低模型训练难度,基于大规模数据的预训练模型应运而生,只有这样才能发挥transformer模型强大的表示能力——bert
基于pytorch实现的
[Transformer.ipynb](http://localhost:8888/notebooks/pre-trained model approach NLP/Transformer.ipynb)