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 j M ) 是premise的输入序列经过LSTM之后得到的隐层输出。
    • h k t ( 1 k N ) 是hypothesis的隐层输出向量。
  2. word-by-word attention的意思是为每个hypothesis中的词引入一个 a k ,用于表示hypothesis,并称这个 a k 向量为attention向量,具体公式如下:

    mark

    mark

    这里的attention权重 a k j 表示hypothesis中第k个词和premise中第j个词之间的关系。

    mark

    h j 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 i t 与premise中每个词的表示 H s 计算得到一个权重向量,然后再对premise中的词进行加权求和,得到hypothesis的 h i t 在每个时刻对应的注意力向量 a i ,即(attention过程)
  3. 把hypothesis中该词的表示 h i t 和其对应的attention的上下文向量 a i 拼接在一起,输入到一个LSTM中,最后时刻的 h m h N m 作为输出以预测label。

与Word-to-Word Attention区别

mark

两者的主要区别就是计算 e k j 的不同。

  • 这里用 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

其中,

  • h i 1 r R l 是经过单向m-LSTM得到的隐层输出。

  • α i , j 表示passage中的第i个词和question中的第j个词之间的匹配关系。然后用 α ¯ 对question的隐层输出进行加权,并将其跟passage的隐层输出进行拼接,得到一个新的向量,并输入到m-LSTM中,得到 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向量,用来表示终止词,得到 H ¯ r

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

    mark

    mark

    其中, h k a 也是经过一个LSTM的输出。

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

    mark

    mark

  • 损失函数如下:

    mark

The Boundary Model

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

mark

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

猜你喜欢

转载自blog.csdn.net/tiweeny/article/details/81437763
net