zoukankan      html  css  js  c++  java
  • 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)是基础的模型,不涉及到注意力。模型中的参数见下表。

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

    输入层

    模型使用时,将句子长度补到最大长度(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-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就是将前两种做法融合起来,在词层面、短语层面都有很好的表示。

    一个人没有梦想,和咸鱼有什么区别!
  • 相关阅读:
    Netty的常用概念
    netty学习
    MarkDown思考
    Xshell配置SSH秘钥登录
    Maven中避开测试环节
    Maven文件配置
    机器学习资源
    数学问题-高精度运算
    对局匹配
    发现环
  • 原文地址:https://www.cnblogs.com/TABball/p/13187750.html
Copyright © 2011-2022 走看看