本文讲述一下在自然语言处理中很常用的一个机制—Attention机制。

Seq2Seq模型

提到了attention机制我们就不得不说一下Seq2Seq模型,也就是编码器-解码器 (Encode-Decode) 结构,该结构是当前非常热门的一种深度学习结构。

Seq2Seq模型是基于RNN的一种模型(由两个RNN网络构成),模型的一大特点是输入输出序列的长度可以是不相同的,这种结构又可以叫做Encoder-Decoder模型,Encoder部分需要将输入数据编码成一个上下文向量C,得到该上下文向量的方法有很多,最简单的方法就是把Encoder的最后一个引状态赋值给C,还可以对最后一个隐状态做一个变换得到C,也可以对所有的隐状态做变换,在拿到了这个上下文向量C后,就用另一个RNN网络对其进行解码,这部分RNN网络被称为Decoder。因为这种结构不限制输入和输出的序列长度,因此应用的范围非常广泛。

seq2seq的结构图如下所示:

结构图中C左侧的部分便是Encoder,右侧的部分便是Decoder,对于上下文向量C的组成可以有如下的形式:

  1. C=h4
  2. C=q(h4)
  3. C=q(h1,h2,h3,h4)

这种结构的模型通常将输入序列编码成一个固定长度的向量表示,对于长度较短的输入序列而言,该模型能够学习出对应合理的向量表示。然而,这种模型存在的问题在于:当输入序列非常长时,模型难以学到合理的向量表示

Attention机制

Attention机制的基本思想是,打破了传统编码器-解码器结构在编解码时都依赖于内部一个固定长度向量的限制。也就是让RNN/LSTM的每一步从更大范围的信息中选取。

Attention机制的实现是通过保留LSTM编码器对输入序列的中间输出结果,然后训练一个模型来对这些输入进行选择性的学习并且在模型输出时将输出序列与之进行关联

 

Attention机制数学原理的推导:​​Attention机制​​

Attention机制的应用

文本翻译

文本翻译中,当给定一个法语句子的输入序列,他将翻译并输出英文句子,注意力机制用于观察输入序列中与输出序列每一个词对应的具体单词。生成每个目标词时,我们让模型搜索一些输入单词或由编码器计算得到的单词标注,进而扩展基本的编码器-解码器结构。这让模型不再必须将整个源句子编码成一个固定长度的向量,还能让模型仅聚焦于和下一个目标词相关的信息。

图说模型

基于序列生成的attention机制可以应用在计算机视觉相关的任务上,帮助卷积神经网络重点关注图片的一些局部信息来生成相应的序列,典型的任务就是对一张图片进行文本描述。

给定一张图片作为输入,输出对应的英文文本描述。Attention机制被用在输出输出序列的每个词时会专注考虑图片中不同的局部信息。

语音识别

给定一个英文的语音片段作为输入,输出对应的音素序列。

Attention机制被用于对输出序列的每个音素和输入语音序列中一些特定帧进行关联。

文本摘要

给定一篇英文文章作为输入序列,输出一个对应的摘要序列。

Attention机制被用于关联输出摘要中的每个词和输入中的一些特定词。