Press "Enter" to skip to content

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

本站内容均来自兴趣收集,如不慎侵害的您的相关权益,请留言告知,我们将尽快删除.谢谢.

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

 

然而,在交互层基本使用的都是各种各样的attention机制,因此在这里详细介绍一下。

 

一、理论

 

1.互注意力

 

阅读理解的互注意力一般用来计算从文章到问题的注意力向量。

 

使用互注意力机制通过注意力函数对向量组对所有向量打分。一般而言,注意力函数需要反映p i 和每个向量q j 的相似度。常见的注意力函数有以下几个:

内积函数: s i,j =f(p i ,q j )= p iTq j ;
二次型函数:s i,j =f(p i ,q j )= p iTW q j ,W为参数矩阵,在bp过程中进行不断的优化;
加法形式的函数:s i,j =f(p i ,q j )= v T tanh( W 1p i + W 2q j )
双维度转换函数:s i,j =f(p i ,q j )= p iT U T V q j ,此函数将文章和问题单词向量转换到低纬度进行相乘,减少参数个数。

当然最后获得q i 的分数以后,使用softmax进行归一化然后得到各自的权重,再进行加权和,得到最后的attention结果:

 

Attention((p 1 ,p 2 …p m ),(q 1 ,q 2 …q n ))=(p 1q ,p 2q …p mq )

 

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表征:

相似度矩阵 进行列归一化,得到 Question 的每个词对 Context 所有词的注意力分数 S ̿ ,则 query-to-context attention 表征为:

论文地址: 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与文章进行高层融合。

 

 

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

 

3.DCN+

 

DCN是全称dynamic coattention networks,动态协同注意力网络。它的具体做法如图:(引用于

 

https://blog.csdn.net/mottled…

 

 

论文地址: 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机制基本都是大杂烩,并且不停的堆叠网络深度,穷尽算力来提高效果。

Be First to Comment

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注