- 发表时间:2015
- 论文链接:https://arxiv.org/pdf/1512.05193.pdf
- 开源代码:https://github.com/galsang/ABCNN (tensorflow) https://github.com/lsrock1/abcnn_pytorch (pytorch)
- 代码语言:python
- 适用: Answer Slection(AS) paraphrase identification (PI) textual entailment (TE)
BCNN: Bi-CNN
介绍ABCNN之前,要先介绍BCNN,该网络是基于孪生网络,包括了两个权重共享(weight-sharing)的CNN网络,每个CNN网络处理一个句子,最后的层处理句子对(sentence pair)任务. 其结构如下所示:
输入层: 如上图,假设有两个句子,分别含有5个词和7个词(实际应用中要将所有句子通过补padding,补成一样长度s,图中为了理解,按照不同长度展示),通过word embedding可以将每个词表示为一个维的向量,则输入为.
卷积层: 卷积核在时间维(长度s)的大小设为w,则在进行卷积操作时,在输入矩阵的左右各补(w-1)列,输入矩阵变为(batchsize, 1, , s+2(w-1)),然后卷积操作的卷积核大小设置为(, w),滤波器数目为, **函数采用tanh,卷积操作后feature map为(batchsize, N, 1, s+w-1), 交换维度成(batchsize, 1, N, s+w-1).
均值池化层: 从上图可以看出,池化层包括两种, 和,对于输出层,采用:对所有列求均值,feature map大小变为(batchsize, N), 即每个句子用一个N维向量表示,再对两个句子对应的N维向量经过某些操作来获取句子对任务得分; :pooling层kernel大小为(1, w),feature map变为(batchsize, 1, N, s),该feature map用于送入下一卷积层.
输出层: 根据具体任务进行选择,如二分类任务,输出层可以为逻辑回归层.
ABCNN: Attention-Based CNN
ABCNN顾名思义就是在BCNN的基础上添加注意力机制,本文提出三种注意力机制:ABCNN-1, ABCNN-2, ABCNN-3.
ABCNN-1: 采用注意力特征矩阵来影响卷积, 是对卷积层的输入feature map进行操作的,的第行表示卷积层输入的左feature map的第个单元(长度为5的有5个单元)与右feature map每个单元的注意力分布,按Figure 3(a)举例, 为了便于理解,左右两个句子长度按照5和7不同长度介绍,此时矩阵 , 的第1行第1列表示左句子第一个词和右句子第一个词的注意力分布(匹配度), 第1行第2列表示左句子第一个词和右句子第二个词的注意力分布(匹配度). 接下来看一下其数学表达式:
假设左右两个feature map分别为 和 , 则:
论文中表示两个向量间的欧式距离, 基于此注意力特征矩阵,生成两个注意力feature map:
其中, ,他们是网络要学习的参数,和表现为Figure 3中的红色矩阵,然后将和作为两个channel构成新的feature map送入卷积层.
ABCNN-2: 由上述介绍可以知道,ABCNN-1在卷积层的输入上计算注意力权重,旨在改善卷积计算的feature map,接下来介绍的ABCNN-2是在卷积的输出上计算注意力权重,旨在reweighting卷积层的输出.
注意力矩阵中的行列意义和ABCNN-1相同, 表示左句子中第j个单元的注意力权重,表示右句子中第j个单元的注意力权重, (和BCNN中卷积层的输出对应上了)为卷积层输出, 则新的feature map 的第列通过w-ap产生:
结合Figure 3(b)来理解一下这个公式,只看左侧(右侧同理),卷积输出feature map 大小为 ,, 看一下7 = 5+3-1(s+w-1),跟BCNN卷积层中的讲解相对应,左侧中间虚框的向量则为, , 则新feature map矩阵的第一列是由卷积输出feature map矩阵的前三列乘以对应前三个加权值的和, 可以看成是一个的滑动窗, 步长为1, 第二列 ,以此类推得到新feature map矩阵,大小为,当卷积层filters数目N与输入feature map的H(每个词的向量维度)相同时,卷积层输入和输出尺度相同,这就使得可以堆叠多个这样的卷积-池化块来提取特征.
ABCNN-3: 该注意力机制是结合了ABCNN-1和ABCNN-2两种.
实验
设置
在三个任务上进行实验验证:AS PI TE
word Embedding通过word2vec初始化,维度为300,训练过程中word Embedding不变,其他参数随机初始化, k-1个卷积-池化块堆叠进行特征提取,最后输出采用逻辑回归层,逻辑回归层的输入为k个consine相似度得分,每个卷积层输出的feature map进行all-ap,左右两个all-ap输出向量求cosine相似度, 一共有k-1个cosine相似度得分,第一层卷积的输入也进行相同操作求cosine相似度,所以一共得到k个相似度得分,这k 个相似度得分堆叠成一个一维向量,送入全连接层(权重) .
结果
- AS任务
one-conv表示一个卷积-池化块, two-conv表示两个卷积-池化块. - PI任务
- TE任务