ABCNN 学习笔记

介绍

论文地址

ABCNN是将注意力机制应用在卷积网络中的模型,在 answer selection(AS)、paraphrase identification(PI)和textual entailment(TE)等领域有很大价值。文章指出,之前的模型大多对两个要匹配的句子提取语义时,都不会考虑句子间的影响,而是单独提取特征,而ABCNN在编码句子的时候使用注意力机制考虑句子间的相互影响。

作者介绍了基础的BCNN模型,并分别讨论了三种ABCNN模型。

下表中,((s_0, s_1^+))为正确的配对,((s_0,s_2^-))为错误的。

(s_0) (s_1^+) (s_2^-)
( extrm{AS}) how much did Waterboy gross? the movie earned $161.5 million this was Jerry Reed’s final film appearance
( extrm{PI}) she struck a deal with RH to pen a book today she signed a contract with RH to write a book she denied today that she struck a deal with RH
( extrm{TE}) an ice skating rink placed outdoors is full of people a lot of people are in an ice skating park an ice skating rink placed indoors is full of people

BCNN

Basic Bi-CNN(BCNN)是基础的模型,不涉及到注意力。模型中的参数见下表。

ABCNN 学习笔记

在BCNN中,主要有输入层、卷积层、池化层、输出层。

ABCNN 学习笔记

输入层

模型使用时,将句子长度补到最大长度(s = max_i length_i = max { ext{length of }s_0, ext{length of }s_1}),但是图示中,为了能够更清楚的展示模型是如何运作的,将句子长度设为5和7。

每一个单词经过编码后为(mathbb{R}^{d_0}),句子则会变成(mathbb{R}^{d_0 imes s})。其中,句子方向为列方向,单词的表示维度为行。

卷积层

图中表示的卷积层为(mathbb{R}^{d_0 imes w},w=3),叠加(d_1)个,就会得到卷积层的输出,此时列方向长度(s + w - 1)。卷积时设置(v_j = 0,j < 1 ext{ or } j > s)。对于第(i)个单词,(c_i)为它的向量表示,卷积层输出为

[p_i = anh (W cdot c_i + b) ]

(W)为卷积核的集合。

池化层

经过卷积层,数据已经可以从单词粒度表示到词语(phrase)了。

这里的平均池化层有两种,一种应用在最后一层,最后一层输出层之前的池化都为另一种。

w-ap

这种池化层对应模型图中的w-ap,池化层的步长为1,跨度为(w),这样就会将输入向量的列长度转换回句子长度(s),所以,这种池化层搭配上面的卷积层可以无限叠加,直到提取出高抽象度的语义。

all-ap

而all-ap池化层是在输出层前的最后一步,在列方向上求一次平均,将向量转换为(d_1)一个维度。

输出层

输出层一般是一个logistic regression,应该根据具体任务进行设计。

作者发现,如果将不同卷积-池化层的输出都传递给output layer,效果会更好,因为这种方式考虑了不同的级别上的语义。

ABCNN

作者介绍了三种的ABCNN模型,并解释了每种注意力机制的原理,三种模型如图。

ABCNN 学习笔记

ABCNN-1

模型如(a)所示。卷积层的输入,由之前的 feature map,变成了 feature map 和 attention feature map 的加权结果,而后者是由注意力矩阵通过两个学习出的矩阵(W_1)(W_2)得来的,下面说一说这个注意力矩阵(A)

注意力矩阵(A)是考虑到两个句子的feature map 的。我们称第一个句子的特征矩阵每一列为第一个句子的一个unit,第二个句子特征矩阵的每一列为第二个句子的一个unit。(A in mathbb{R}^{len_1 imes len_2}),注意力矩阵的每一行可以表示为与第一个句子的每一个unit相关,每一列与第二个句子的每一个unit相关。

(F_{i,r} in mathbb{R}^{d imes s},iin { 0, 1 })为representation feature map,注意力矩阵可以这样计算:

[A_{i,j} = ext{match-score}(F_{0,r}[:, i], F_{1, r}[:, j]) ]

而attention feature map:

[F_{0,a} = W_0 cdot A^T,F_{1,a} = W_1 cdot A ]

作者说,match-score取(frac{1}{1 + |x - y|})效果很好。

ABCNN-2

第二种ABCNN的注意力是放在池化层的,不再使用平均池化,而是加权的,权重和注意力机制有关。

注意力矩阵(A in mathbb{R}^{len_1 imes len_2}),每一行都和第一个句子的一个unit相关,每一列都和第二个句子的unit的相关。计算时,第一个句子的池化的权重系数为(A)的列方向和,第二个句子用行方向和,设(F_{i, r}^c)为第(i)个句子的卷积层输出,(F_{i,r}^p)为池化输出,如下式

[F_{i,r}^p[:, j] = sum_{k=j:j+w} a_{i,k}F_{i,r}^c[:, k] ]

其中,(a_{0,j} = sum A[j,:],a_{1,j} = sum A[:, j])

我们可以注意到几点区别。

  • ABCNN-1在卷积层添加注意力,ABCNN-2在池化层,相比较而言,在池化层的影响更大,即第二种方式可以在更大层面上影响句子的语义。
  • ABCNN-1相比ABCNN-2多了两个将representation feature map转化为 attention feature map 的矩阵,所以参数更多。

ABCNN-3

通过研究前两种模型,很容易产生将二者融合起来的想法。

ABCNN-3就是将前两种做法融合起来,在词层面、短语层面都有很好的表示。