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

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

1、理论

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机制spa

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.net

    类似度矩阵 𝑆 进行列归一化,获得 Question 的每一个词对 Context 全部词的注意力分数 S ̿ ,则 query-to-context attention 表征为:
    image.pngorm

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

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

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

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

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

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

(3’) 可选的自加强融合。与上文中DCN提到的协同注意力机制和BiDAF中的机制同样,经过先对问题Q进行自加强融合,再将问题Q与文章进行高层融合。

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

3.DCN+

DCN是全称dynamic coattention networks,动态协同注意力网络。它的具体作法如图:(引用于
https://blog.csdn.net/mottled...
截屏2020-05-20下午11.35.33.png
论文地址: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机制基本都是大杂烩,而且不停的堆叠网络深度,穷尽算力来提升效果。
相关文章
相关标签/搜索