Match-LSTM和Pointer Net

Match-LSTM

简介

Match-LSTM是由(Wang & Jiang,2016)发表在NAACL的论文提出,用于解决NLI(Natural Language Inference,文本蕴含)问题。

  • premise:前提,代表上下文
  • hypothesis:假设,代表一个陈述性的结论 文本蕴含问题:给定一个premise(前提),根据这个premise去判断相应的hypothesis(假说)正确与否,如果从这个premise中能够推断出这个hypothesis,那么就判断为entailment(蕴含),否则就是contradiction(矛盾)。

Word-by-Word Attention

Match-LSTM是在Rocktaschel et al. (2015)提出的word-by-word attention的基础上进行了改进,先解释一下Rocktaschel et al. (2015)提出的基本模型

mark

  1. 用LSTM处理premise和hypothesis,(用premise的最后一个输出初始化hypothesis的LSTM),得到它们的隐层输出。

    其中,

    • $h_j^s(1 \le j \le M )$是premise的输入序列经过LSTM之后得到的隐层输出。
    • $h_{k}^{t}(1\leq k\leq N)$是hypothesis的隐层输出向量。
  2. word-by-word attention的意思是为每个hypothesis中的词引入一个 $a_k$ ,用于表示hypothesis,并称这个 $a_k$ 向量为attention向量,具体公式如下:

    mark

    mark

    这里的attention权重$a_{kj}$表示hypothesis中第k个词和premise中第j个词之间的关系。

    mark

    $hj^s$ 是premise的隐层输出,$h_k^t$ 是hypothesis的隐层输出,$h{k-1}^a$ 是将输入一个RNN之后得到的隐层状态。

    mark

  3. 最后利用$h_N^a$和$h_N^t$来预测label:y,即判断premise和hypothesis之间的关系。

模型

以下为结构图:

mark

  1. 用两个LSTM处理premise和hypothesis序列。得到两个隐状态$h^s$和$h^t$(s对应前提,t对应假设)。

  2. 用下面的公式计算注意力向量$a_k$,这里计算得到的$e$经过归一化和加权求和得到假设$h^t$对前提$h^s$在每个时刻的注意力向量$a_k$,即attention过程。

    上式中$h^m$的计算,用下面的公式计算,其中输入$m_k$是$[a_k,h_k^t]$的拼接,即把$m_k$输入到LSTM中。

  3. 把最后时刻的$h^m$即$h_N^m$作为输出以预测label。

【简化版】

  1. 将premise和hypothesis两句话输入到两个LSTM中,用对应LSTM的隐层输出premise和hypothesis中每个位置对应上下文信息的一种表示,分别对应图中的$H^s$和$h^t$
  2. 对于hypothesis中的某个词的表示$h^t_i$与premise中每个词的表示$H^s$计算得到一个权重向量,然后再对premise中的词进行加权求和,得到hypothesis的$h^t_i$在每个时刻对应的注意力向量$a_i$,即(attention过程)
  3. 把hypothesis中该词的表示$h^t_i$和其对应的attention的上下文向量$a_i$拼接在一起,输入到一个LSTM中,最后时刻的$h^m$即$h_N^m$作为输出以预测label。

与Word-to-Word Attention区别

mark

两者的主要区别就是计算$e_{kj}$的不同。

  • 这里用$h^m$代替了$h^a$。

    • 之前的$h^m$是利用RNN得到的,$h^a$是用mLSTM得到的。
  • 为了得到premise跟hypothesis之间的matching关系,用LSTM对它们进行建模,作者认为LSTM能够将premise和hypothesis之间重要的match关系进行保留,忽略不重要的match关系。具体公式如下:

    mark

  • 最后利用$h_N^m$来预测。

Pointer Net

简介

Pointer Network是Vinyals et al.(2015)在NIPS发表的论文中提出的,是为了实现从输入序列中找到相应的tokens来作为输出,其他的阅读理解任务中,可能只需要用输入序列构建一个词典,再从这个候选词典中找到概率最大的一个词作为答案,然而SQuAD数据集的输出答案的长度是变化的,因而无法采用构建词典的方式,而pointer net是利用attention作为pointer,从输入序列中选择一个位置,并将这个位置所指向的词作为输出。对pointer net有兴趣的话,可以参看这个链接进行学习:Pointer net。AS-Reader、AoA-Reader和R-Net等模型都用了PtrNet作为输出层的结构。

原理

Pointer是从一个输入序列中选点的一种方法,是Attention的变体。它不像Attention那样把输入信息编码成一个context vector,而是将attention转化为一个pointer,来选择输入序列中的元素。

与Attention区别

  • Attention:公式如下,前两个公式是整合encoder和decoder的隐式状态,学出来encoder、decoder隐式状态与当前输出的权重关系a,然后根据权重关系a和隐式状态e得到context vector用来预测下一个输出。

    mark

  • Pointer Net:公式如下,Pointer没有最后一个公式,即将权重关系a和隐式状态整合为context vector,而是直接通过softmax,指向输入序列选择中最有可能是输出的元素。

    mark

模型结构

mark

论文中提出了两个模型,且都包含以下三个部分:

  • 用LSTM对question和passage进行预处理。
  • 用match-LSTM对question和passage进行match。
  • 利用Pointer Net从passage中选择tokens作为答案。

两个模型的区别在于在于第三部分,由于pointer net没有限定所指向的位置必须是连续的,所以第一个模型sequence model直接将答案在passage中出现的位置序号作为答案序列$a=( a{1} ,a{2},… ) $,第二个模型只预测答案的起始位置跟终止位置,即$a=(a{s} ,a{e})$。

LSTM Preprocessing Layer

用单向LSTM对passage和question进行预处理。

mark

Match-LSTM Layer

这里将question当做premise,将passage当做hypothesis,用标准的word-by-word attention得到attention向量,具体公式如下:

mark

其中,

  • $\vec{h}_{i-1}^r \in R^l$是经过单向m-LSTM得到的隐层输出。

  • $\vec{\alpha_{i,j}}$表示passage中的第i个词和question中的第j个词之间的匹配关系。然后用$\overline{\alpha}$对question的隐层输出进行加权,并将其跟passage的隐层输出进行拼接,得到一个新的向量,并输入到m-LSTM中,得到$\bar{H^r}$,具体公式如下:

    mark

    mark

再从另一个方向进行相同的处理,将两者进行合并,得到最后的输出向量$H^{r} $

mark

Answer Pointer Layer

The Sequence Model
  • 由于这个模型是生成答案的位置序列$a=(a{1} ,a{2},…)$,每个元素表示的是这个词在passage中位置,其取值范围在1到P+1之间,当出现了P+1时,则答案生成终止。因此在$H^{r}$的最后中加入了一列0向量,用来表示终止词,得到$\bar{H} ^{r} $。

  • 这里再次用到了attention方法去得到向量$\betak \in R^{(P+1)}$,$\beta{k,j}$表示选择passage中的第j个词作为答案序列的第k个词的概率,$\beta_{k,(P+1)}$表示在第k个位置停止答案生成的概率。公式如下:

    mark

    mark

    其中,$h_k^a$也是经过一个LSTM的输出。

  • 模型生成答案的概率公式如下:

    mark

    mark

  • 损失函数如下:

    mark

The Boundary Model

因为boundary model只需要生成答案的起始和终止位置,因此不用在$H^{r}$最后加入一个零向量来表示答案生成结束。生成答案序列的概率模型如下:

mark

其余部分与上个模型相同。