Reasoning about Entailment with Neural Attention

这篇论文主要讲了他们第一次应用深度学习取得了比现阶段人工特征更好的结果(201509),模型架构大体是:LSTM—Attention—FC分类
https://arxiv.org/pdf/1509.06664v1.pdf
【论文笔记】Reasoning about Entailment with Neural Attention

LSTM层

他们使用两个不同的LSTM来分别对Premise和Hypothesis进行向前传播,LSTMhypothesisLSTM_{hypothesis}的第一个中间状态 c0c_0 是由LSTMpremiseLSTM_{premise}的最后一个中间状态初始化的。他们的说法是,没有必要重复对Hypothesis进行encode(指将hypothesis句子经过和Premise同一个LSTM的处理称为encode),这样在LSTMhypothesisLSTM_{hypothesis}里,会更加关注与premise的语义关联的处理

attention层

他们提出了两种方法

  1. 传统方法:将LSTMpremiseLSTM_{premise}输出拼接为矩阵Y作为输入向量,LSTMhypothesisLSTM_{hypothesis}的最后一个输出 hNh_N 作为查询向量,使用加性模型计算attention:
    M=tanh(WyY+WhhNeL)M = tanh(W^yY+W^hh_N\bigotimes e_L)
    α=softmax(wTM)\alpha = softmax(w^TM)
    r=YαTr = Y\alpha^T
    其中\bigotimes操作是外积,作用等价于 WhhN(k×1)W^hh_N\in (k×1)与一个1×L1×L 维的纯1向量点乘

    最后,通过如下计算得到用于分类的最终输出
    h=tanh(Wpr+WxhN)h^* = tanh(W^pr + W^xh_N)

  2. Word-by-word Attention:他们的想法是只利用最后一个输出hn作为查询会遇到LSTM的对前面输入记忆的瓶颈,于是迭代地对每一个LSTMhypothesisLSTM_{hypothesis}的输出都用上面的方法进行注意力计算,并在每次计算中使用了上一次计算的输出(即rt1r_{t-1})。最终得到的rLhr_{L_h}以同样的方式处理。
    Mt=tanh[WyY+(Whht+Wrrt1)eL]M_t = tanh[W^yY+(W^hh_t+W^rr_{t-1}) \bigotimes e_L]
    αt=softmax(wTMt)\alpha_t = softmax(w^TM_t)
    rt=YαLT+tanh(Wtrt1)r_t = Y\alpha^T_L + tanh (W^tr_{t-1})
    h=tanh(WprL+WxhN)h^* = tanh(W^pr_L + W^xh_N)

另外他们将Premise和Hypothesis换位输入仅模型并将最后输入合并进行分类,称为双向注意力,这个操作没有带来性能的提高,他们分析是因为蕴藏的含义具有非对称的关系,所以使用相同模型再次encode Hypothesis时可能会造成噪声(这点暂时不太理解)。

相关文章: