首先这张图片是本文的基础模型,后续的工作以此展开。BCNN是一个没有添加Attention的模型
输入层
输入句子进行padding后转化成词向量
卷积层
一个窗口最后只生成一个卷积值,然后再句子长度上进行滑动,得到一个长度为sent_len+ws-1的向量(wide conv)
pooling层
论文中提到了两种pooling层,一种是最后一个pooling层–all-ap,还有一种是中间卷积层所用的pooling层–w-ap。主要区别是池化时的窗口大小不同
all-ap:将卷积之后的结果在句长维度上进行Average Pooling, 得到一个列向量,如上图中最上面的pooling层所示。
w-ap:使用滑动窗口的形式,以窗口宽度w对卷积输出进行Average Pooling。因为输入层经过宽卷积后会变成sent_len+w-1,之后经过窗口大小为w的pooling层后仍然会变回sent_len。这样的话,conv-pooling层就可以无限叠加起来。
本文重点:
后面作者以BCNN为基础,介绍了三种Attention机制的模型
第一种:
在卷积前进行attention,通过attention矩阵计算出相应句对的attentionfeature map,然后连同原来的featuremap一起输入到卷积层。主要的原来是将输入扩展成双通道,添加的新通道就是通过Attention Matrix计算出来的attention feature map
第二种:
在池化时进行attention,通过attention对卷积后的表达重新加权,然后再进行池化
第三种:
把前两种方法一起用到CNN中
这篇文章的主要贡献在于展示了如何在CNN中使用Attention的思路,现在有不少使用了基于Attention的CNN模型,均取得了不错的效果