华为杨浩:小知识驱动大数据,构建知识可认知的 AI 应用( 二 )


华为杨浩:小知识驱动大数据,构建知识可认知的 AI 应用
文章图片
上图从的解码就是这样的一个过程 , 最终解码得到 , 这个时候解码结束 , 每一步就可以保持它的TopK的结果 , 这就是BeamSearch技术 。
华为杨浩:小知识驱动大数据,构建知识可认知的 AI 应用
文章图片
而对于Seq2Seq模型效果是这样的 , 神经网络模型优于统计机器翻译的模型 。 SMT是统计记忆翻译的模型 , NMT是神经网络机器翻译 , 神经网络第一次以34.81vs33.3的成绩超过了统计机器翻译的模型 。
而且神经网络的模型可以对统计机器翻译结果进行Reranking(重排) , 取得BeamSearchTop50的结果进行重排 , 它这个机制可以达到36.6的最高分 。
但Seq2seq模型有一个问题 , 那就是Encoder永远编码成维度确定的句向量 , 当我们句子长短维度确定之后 , 这个向量无法表示足够多的句子信息 。
华为杨浩:小知识驱动大数据,构建知识可认知的 AI 应用
文章图片
这个时候就需要引入业界很有名的Attention的机制 。
当Decoder已经解码出了“如何” , 得到了Hiddenstate , Decoder的“如何”会与SourceToken进行Attention计算 , 我们可以将之理解为进行一个相似度的计算 。 当与所有SourceTokens做完Attention的计算后 , 再进行Softmax , 也就是将它的隐状态(hiddenstate)进行信息加权 , 最后得到一个向量 。
这样 , 编码向量会和每个词相关的状态 , 这一个向量的状态是变化的 , 它能够很好地表现哪个词语已经翻译了 , 哪个词还没有翻译 , 以及接下来翻译哪个词语 , 这也就是Align与Translate的结合 。
华为杨浩:小知识驱动大数据,构建知识可认知的 AI 应用
文章图片
接下来 , 所有的EncoderStates和DecoderStates进行AttentionScores , 然后进行加权平均(Softmax) , 最后加权平均的结果与每一个Source进行线性组合 , 就可以拿到最终结果 。
中间是个典型的例子——TheAnimaldidn'tcrossthestreetbecauseitistootired 。 假如说出现了itistootired的话 , it的attentionweight更多时候会Attention到Animal上面 , 那么相当于it代替的是狗或者动物;
而假如说出现itistoowide , 在经过Attention计算 , 更多对应到的是crossthestreet或者crosstheriver 。
从最右边的Performance也可以看得出来 。 RNNSearch比RNNEncode好很多 , 句子长度30和50 , RNNsearch分别提升了7.2和7.4 , 最好效果可以达到36.15 。
这里30指的对含有30个词的句子进行训练 , 可以看到一般模型 , 句子越长效果越差 , 而RNNSearch50的情况下 , 可以看到效果基本上不变 。 (RNNencode也就是之前的Seq2Seqmodel , 而Attentionmodel在学术上称为RNNsearch 。 )
并且惊喜的是 , 当句子超过50个词之后 , RNNsearch50翻译质量也不下降 。
华为杨浩:小知识驱动大数据,构建知识可认知的 AI 应用
文章图片
Attentionisallyouneed是那篇最经典的论文 。
最初的Seq2Seqwithoutattention有CNN和RNN进行decoder , decoder和encoder之间的关系是用静态的向量来表示的 。 而第二个模型Seq2Seqwithattention , 则是由CNN和RNN做decoder , 中间是attention关联的 。 到了Transformer方面的话 , 所有都换成了Attention的模式 。
就效果来看 , 统计机器翻译是33.3 , 而在Seq2Seq的时候是34.81 , 然后到RNNSearch(RNNAttn)架构是36.15 , 到Transformer架构到41.8了 , 提升非常明显 。
华为杨浩:小知识驱动大数据,构建知识可认知的 AI 应用
文章图片
Transformers架构典型的三个特点有NoRNN、纯Attention以及PositionEmbedding 。
上图右边是典型的Transformers的架构 , 我们可以看到中间是Selfattentionencoder , 在此后面有FeedForwardNetwork 。 接着是Decoderselfattention , 然后decode和encode之间的Attention , 然后以及DecoderFeedForward 。