【论文笔记】Attention总结一:基于论文Neural Machine Translation by Jointly Learning to Align and Translate

0 Attention背景知识总结

encoder-decoder

这part的背景来源于这篇:https://blog.csdn.net/u012968002/article/details/78867203 这篇attention文章讲解的很好。

encoder-decoder中,将输入句子通过非线性变换转化为中间语义表示C,对于解码器Decoder来说,其任务是根据句子Source的中间语义表示C和之前已经生成的历史信息y1,y2……yi-1来生成i时刻要生成的单词yi,则yi=g(C, y1, y2,...yi-1), 每个yi都依次这么产生,那么看起来就是整个系统根据输入句子Source生成了目标句子Target。

如果Source是中文句子,Target是英文句子,那么这就是解决机器翻译问题的Encoder-Decoder框架;
如果Source是一篇文章,Target是概括性的几句描述语句,那么这是文本摘要的Encoder-Decoder框架;
如果Source是一句问句,Target是一句回答,那么这是问答系统或者对话机器人的Encoder-Decoder框架。

在文本处理领域,Encoder-Decoder的应用领域相当广泛。
Encoder-Decoder框架不仅仅在文本领域广泛使用,在语音识别、图像处理等领域也经常使用。一般而言,文本处理和语音识别的Encoder部分通常采用RNN模型,图像处理的Encoder一般采用CNN模型。

0.1 自己拓展

0.1.1 attention分类简述

  • soft-attention

      软寻址,指的不像一般寻址只从存储内容里面找出一条内容,而是可能从每个Key地址都会取出内容,取出内容的重要性根据Query和Key的相似性来决定。
      之后对Value进行加权求和,这样就可以取出最终的Value值,也即Attention值。
      本论文用的就是soft-attention
    
  • hard-attention

      (后面看论文了再补过来。好像比较难,因为不能用反向传播)
    
  • self-attention

      指的不是Target和Source之间的Attention机制,而是Source内部元素之间或者Target内部元素之间发生的Attention机制,也可以理解为Target=Source这种特殊情况下的注意力计算机制。
      其具体计算过程是一样的,只是计算对象发生了变化而已。
    

    Self Attention可以捕获同一个句子中单词之间的一些句法特征或者语义特征。引入Self Attention后会更容易捕获句子中长距离的相互依赖的特征
    但是Self Attention在计算过程中会直接将句子中任意两个单词的联系通过一个计算步骤直接联系起来,所以远距离依赖特征之间的距离被极大缩短,有利于有效地利用这些特征。除此外,Self Attention对于增加计算的并行性也有直接帮助作用。这是为何Self Attention逐渐被广泛使用的主要原因。

  • coattention(日后总结补充)

  • transformer的各种attention也日后补充

0.1.2 attention的发展历史

attention histroy
NLP中的Attention:
Attention函数的本质可以被描述为一个查询(query)到一系列(键key-值value)对的映射,如下图。transformer就是典型的k\q\v。
其实下图就反映了Attention机制的本质思想(这篇总结主要写Attention机制在机器翻译encoder-decoder上的基本思想与体现,attention机制的本质思想从encoder-decoder框架中剥离并进一步抽象,由下图可见一斑,具体的会在下一篇attention总结里,日后补上)
attenion5
在计算attention时主要分为三步:

1. 第一步是将query和每个key进行相似度计算得到权重,常用的相似度函数有点积,拼接,感知机等;
2. 然后第二步一般是使用一个softmax函数对这些权重进行归一化;
3. 最后将权重和相应的键值value进行加权求和得到最后的attention。目前在NLP研究中,key和value常常都是同一个,即key=value。

1 论文综述与创新点

这篇文章用Attention机制(soft attention)来完成机器翻译任务,算是attention机制在NLP在的第一个应用,非常具有启发性。

传统RNN encoder-decoder的缺点:

1. 对长句子的处理不好(梯度消失)
2. 词对齐问题

论文打破了NMT用encoder-decoder模型的天花板——用RNN来生成一个固定长度的向量C来记录一个句子全部信息的方式。它联合学习对齐和翻译,简单来说就是它将输入序列编码成向量,然后当解码翻译的时候自适应地选择向量的子集。这可以让模型更好的处理长句子。

此论文中,每当生成的模型在翻译中生成一个单词的时候,它会(软)搜索源句中最相关信息集中的位置,然后,该模型根据与源句位置相关的上下文向量之前产生的所有目标词来预测目标词。

attention关注源句子中与待输出y的更相关的部分词(input通过双层RNN生成隐藏状态h,然后存储下来这些隐藏状态,通过attention来关注更相关的隐层从而加权生成C)。
并且attention机制可以解决align问题(论文对对齐问题有alignment model,传统的统计机器翻译一般在做的过程中会专门有一个短语对齐的步骤,而注意力模型其实起的是相同的作用。)。
总体来说论文不是很难,对于学习attention机制值得入手。

1.1 attention定义关键

  • 一般在自然语言处理应用里会把Attention模型看作是输出Target句子中某个单词和输入Source句子每个单词的对齐模型。这也是这篇论文的核心思想。
  • 生成target side的states时,所有context vectors 都会被当做输入。
  • Attention的核心point是在翻译每个目标词(或 预测商品标题文本所属类别)所用的上下文是不同的,这样的考虑显然是更合理的。
  • Attention机制对Source中元素的Value值进行加权求和
  • 这篇论文中attention的应用要求我们的task本身同时有源和目标的概念。Attention常常被定义为目标和源的相关程度。但是还有很多task不同时具有源和目标的概念。比如document classification, 它只有原文,没有目标语言/文章, 再比如sentiment analysis(也可以看做是最简单的一种document classification),它也只有原文。那么这种情况下attention如何展开呢? 这就需要一个变种的技术,叫intra-attention(或者self-attention), 顾名思义,就是原文自己内部的注意力机制。
  • 源和目标
    (1) 分类,源句和模型中定义的context vector
    (2) 有2个输入的如QA,源和目标都有
    (3) self-attention,源和目标都是自己,这样可以获得一些结构信息,如指代信息

在大部分的论文中,Attention是一个权重vector(通常是softmax的输出),其维度等于context的长度。越大的权重代表对应位置的context越重要。

以上内容来自于这篇文章,https://blog.csdn.net/fkyyly/article/details/82492433

1.3 其他

该论文的通用框架有:bi-RNN,align Model。使用的是:对齐和翻译联合学习的方法。
未来可以改进的地方是:对于一些生僻词or训练语料库中未出现的词如何更好的表示。这可以让用attention机制使用在更多地方从而改进。

2 学习对齐和翻译

通用结构组成:

  • encoder:bi-RNN
  • docoder:emulates searching through a source sentence during docoding a translation(在解码翻译的时候对源句的模拟搜索)

2.1 decoder:通用描述

手绘attention结构
与描述结构如下:
本论文decoder结构

Ci根据当前生成单词而不断变化。比如:
attention-C
其中,f2函数代表Encoder对输入英文单词的某种变换函数,如果Encoder是用的RNN模型的话(比如google2016年底翻译系统用encoder和decoder都用了8层的LSTM),这个f2函数的结果往往是某个时刻输入xi后隐层节点的状态值;g代表Encoder根据单词的中间表示合成整个句子中间语义表示的变换函数,一般的做法中,g函数就是对构成元素加权求和。

Tx是句子source的长度。
αij代表在Target输出第i个单词时Source输入句子中第j个单词的注意力分配系数
hj则是Source输入句子中第j个单词的语义编码

这里还提到了alignment model,我的理解就是用于计算输入位置j和输出位置i的匹配程度的模型,相关资料中查到score函数(这里模型中的计算e分值的a函数)主要有以下几种方式:

1. 点积             dot  
2. 双线性函数       general
3. 拼接             concat
3. 隐层的MLP(感知机)(本文用这种) perceptron

这里附上我在2篇博文里(https://blog.csdn.net/changdejie/article/details/90782040https://www.cnblogs.com/robert-dlut/p/8638283.html) 看到的相似度函数的几种计算方法:

3 attention score
attention
?由图可以看出query, key, value中, query代表?key代表?value代表?见下篇attention总结

2.1.2 权重矩阵概率分布计算

概率分布计算
对于采用RNN的Decoder来说,在时刻i,如果要生成yi单词,我们是可以知道Target在生成yi之前的时刻i-1时,隐层节点i-1时刻的输出值Hi-1(论文中的Si-1)的。

我们的目的是要计算生成yi时输入句子中的单词“Tom”、“Chase”、“Jerry”对yi来说的注意力分配概率分布,那么可以用Target输出句子i-1时刻的隐层节点状态Hi-1(Si-1)去一一和输入句子Source中每个单词对应的RNN隐层节点状态hj进行对比(之前每个hj都存储起来了),即通过函数F(hj,Hi-1)——论文中的:eij=(si-1, hi) 来获得目标单词yi和每个输入单词对应的对齐可能性。
这个F函数在不同论文里可能会采取不同的方法,然后函数F的输出经过Softmax进行归一化就得到了符合概率分布取值区间的注意力分配概率分布数值。
即对于每个yi,都可以得到一个关于每个source词的相似性的概率分布!(因为是概率分布,所以要归一化)
一对多的概率分布!目标句子生成的每个单词对应输入句子单词的概率分布可以理解为输入句子单词和这个目标生成单词的对齐概率

alignment model参数化为一个前向神经网络,直接计算一个软对齐,从而这可以使用后向传播来计算代价函数,从而得到参数,梯度可以被用来联合训练对齐模型和整个翻译。

2.2 encoder:对于序列使用Bi-RNN

使用双向RNN再concate得到hj,hj关注于xj周围的信息,这样hj既能总结前面的单词又能总结后面的单词。
注释序列被decoder和alignment model使用,从而计算出context vecotr。

2.3 结构选择

上面是通用结构,比如RNN模型的激活函数f、对其模型的a,都可以自由选择。下面给出这篇文章的具体选型:

2.3.1 RNN

RNN:gated hidden unit(reset gate + update gate),激活函数用logistic sigmoid

在每一步decoder,使用单层maxout units + normalize来算output probabilities

2.3.2 Alignment Model

对齐模型需要考虑到 模型对于长度为Tx和Ty的句子对需要计算Tx * Ty的次,为了减少计算量,使用MLP多层感知机。多层感知机中的权重是学习来的。

3 实验

  • 数据集:concatenate news-test-
    2012
    and news-test-2013 to make a development (validation) set, and evaluate the models on the test
    set (news-test-2014) from WMT ’14, which consists of 3003 sentences not present in the training
    data.
    we use a shortlist of 30,000 most frequent words in each language to
    train our models. Any word not included in the shortlist is mapped to a special token ([UNK]).

  • 模型:训练的RNNsearch-30\ RNNsearch-50模型表现:

    • RNNsearch的前向和后向RNN有1000个hidden units, 带single maxout hidden layer的multilayer network来计算each target word的conditional probability.
    • SGD + Adadelta来训练模型,minibach是80个句子,训练了5天
    • 模型训练好后用beam search来寻找最大可能的翻译

4 结果

4.1 结果图

评估:BLEU socre
attenion BLEU score
This is done by visualizing the annotation
weights. From this we see which positions in the source sentence were considered more important when generating the target word.
RNNsearch-30 and RNNsearch-50 are more robust to the length of the sentences.RNNsearch-50, especially, shows no performance deterioration even with sentences of length 50 or more.

4.2 结果分析

4.2.1 Alignment

相比起hard-alignment,soft-alignment对翻译会更有用。因为Our soft-alignment solves this issue naturally by letting the model look at both [the] and [man].
soft-alignment好处:

1.关注多个part从而找出正确翻译
2.处理不同长度的句子

5 总结

拓展了基础的encoder-decoder,让模型(soft-)search for a set of input words, or their annotations computed by an encoder, when generating target word.
That lets the model focus only on information relevant to the generation of the next target word. the model can correctly align each target word with the relevant words, or their annotations.

未来的挑战:

  • 更好的处理unknown or rare words

    需要模型model to be 更widely used, to match the performance of current state-of-the-art machine translation systems in all contexts.

发布了63 篇原创文章 · 获赞 13 · 访问量 4万+

猜你喜欢

转载自blog.csdn.net/changreal/article/details/101774872