NLP阅读理解之交互层(花式attention机制)

机器阅读理解(MRC)在编码层获得了文章和问题中单词的语义向量表示,但两部分的编码是基本独立的。为了获得最终答案,模型需要交互处理文章和问题中的信息。因此,模型在交互层将文章和问题的语义信息融合,基于对问题的理解分析文章,基于对文章对理解分析问题,从而达到更深层次的理解。
然而,在交互层基本使用的都是各种各样的attention机制,因此在这里详细介绍一下。

一、理论

1.互注意力

阅读理解的互注意力一般用来计算从文章到问题的注意力向量。
使用互注意力机制通过注意力函数对向量组对所有向量打分。一般而言,注意力函数需要反映pi 和每个向量qj的相似度。常见的注意力函数有以下几个:

  • 内积函数: si,j=f(pi,qj)=piTqj;
  • 二次型函数:si,j=f(pi,qj)=piTWqj,W为参数矩阵,在bp过程中进行不断的优化;
  • 加法形式的函数:si,j=f(pi,qj)=vTtanh(W1pi+W2qj)
  • 双维度转换函数:si,j=f(pi,qj)=piTUTVqj,此函数将文章和问题单词向量转换到低纬度进行相乘,减少参数个数。

当然最后获得qi的分数以后,使用softmax进行归一化然后得到各自的权重,再进行加权和,得到最后的attention结果:
Attention((p1,p2...pm),(q1,q2...qn))=(p1q,p2q...pmq)

2.自注意力

关于self-attention的部分可以看前面笔者关于self-attention详细计算的一篇文章。

二.经典attention

在这里介绍几篇经典的MRC论文所使用的attention机制

1.BIDAF
  • BIDAF在Interaction 层中引入了双向注意力机制,使用Query2Context 和 Context2Query 两种注意力机制,去计算 query-aware 的原文表示
  • 具体做法:

    用 C 和 Q 分别表示编码后的 Context 和 Question,根据二维匹配模型,首先计算出 C 和 Q 的相似矩阵 ,然后对其进行 Softmax 行归一化,得到 Context 中每个词对 Question 所有词的注意力分数,再将归一化后的矩阵S ̅对问题表征 Q 进行加权,从而得到问题的context-to-query attention表征:
    image.png

  • 论文地址:https://arxiv.org/abs/1611.01603
2.Fusion Net

在本文中作者认为,阅读理解的核心思路就是对文章和问题进行融合,并通过融合从文章中获取答案。这些网络的信息融合方式可以如图中所示,分为以下几类:

(1) 单词级融合。提供了单词的直接信息,能够快速地聚焦关注的区域,例如简单地为每个单词附加一位,标注该单词是否出现在问题中。这种做法基本上是类似手工特征。

(2) 高层融合。比如,经过了LSTM的编码,这种特征再参与与文章的判断(一般通过注意力机制)。但高层信息可能会丢失一部分细节。

(2’) 可选的高层融合 。和(1)差不多,但添加的是经过编码的高层信息,直接与Context的Embedding进行拼接。

(3) 自增强融合。信息与自身进行聚合(Transformer是一个典型例子),被认为这样可以对更长的信息进行关联。一般可以在(2)之后进行这一步骤,可以扩展关注问题(question-aware)的感受野。

(3’) 可选的自增强融合。与上文中DCN提到的协同注意力机制和BiDAF中的机制一样,通过先对问题Q进行自增强融合,再将问题Q与文章进行高层融合。
NLP阅读理解之交互层(花式attention机制)_第1张图片

论文地址:https://arxiv.org/abs/1612.05360

3.DCN+

DCN是全称dynamic coattention networks,动态协同注意力网络。它的具体做法如图:(引用于
https://blog.csdn.net/mottled...
NLP阅读理解之交互层(花式attention机制)_第2张图片
论文地址:https://arxiv.org/abs/1711.00106

结论

  • 事实上自从self-attention出现以后,基本MRC的模型都会有一个经过互注意力再进行self-attention的过程,并且会再通过一次RNN/LSTM这样效果更好;
  • 其实这么多的attention机制真正比较有创新性和明显作用的是BIDAF的双向流attention机制,而且具体实现的时候,BIDAF中attention机制并没有把query和context映射到一个固定的维度,而是在每个时刻都计算attention,这样的机制使得loss在前期能够迅速降低并且保持训练稳定;
  • Fusion Net之后的attention机制基本都是大杂烩,并且不停的堆叠网络深度,穷尽算力来提高效果。

你可能感兴趣的:(人工智能,pytorch,自然语言处理,算法,神经网络)