2016 MACHINE COMPREHENSION USING MATCH-LSTM AND ANSWER POINTER

2016 MACHINE COMPREHENSION USING MATCH-LSTM AND ANSWER POINTER [1]

摘要

机器文本理解是自然语言处理的一个重要问题。一个最近发布的数据集: SQuAD ,提供了大量真实的问题,并且该数据集的答案是通过众包 (crowdsourcing) 人为创造的。 SQuAD 为评估机器理解算法提供了具有一定挑战性的测试,从某些部分来看,是因为 SQuAD 的答案不是来自一个小型的候选答案集合,它具有可变的长度。为了这个任务,作者提出一个端到端的神经架构。该架构是基于: (1) 一个是作者之前提出的用于文本蕴含任务 (textual entialment) 的模型:match-LSTM[2] 、 (2) 一个是序列到序列 (sequence-to-sequence) 模型: Pointer Net[3] 用于强迫输出字符是取自输入句子。对于 SQuAD 任务,作者提出两种使用 Pointer Net 的方式。作者通过实验验证了他们模型的性能比起使用对数几率回归 (logistic regression) 和手工特征要好。

match-LSTM 简介

在最近的学习自然语言推理的工作中,作者提出了一个 match-LSTM 模型用于预测文本蕴含 (textual entailment)。
在文本蕴含任务中, 会给出两个句子,其中一个是“前提 (premise) 句子”,另一个是“假设 (hypothesis) 句子”,然后预测“前提句子”是否蕴含该“假设句子”。
为了进行这样的预测,作者通过使用 match-LSTM 来顺序遍历“假设句子”中的每个单词。在“假设句子”的每个位置中,注意力机制被用于获取“前提句子”的一个加权向量表示。这个加权后的“前提句子”的向量表示会和“假设句子”的当前单词的向量表示进行结合,然后喂进一个 LSTM,这就是所谓的 match-LSTM。

Pointer Net 简介

[3]提出了一个 Pointer Network (Ptr-Net) 来解决一种特定的问题:模型生成的输出句子中的单词必须是来自输入句子。为了替代从固定的单词表中选择一个单词输出, Ptr-Net 使用注意力机制作为一个指针从输入句子中选择一个单词作为输出。
作者使用 Ptr-Net 是为了使用输入文本中的单词来构建答案。

模型框架

为了从文章 (passage) 中选择一段文本作为问题的答案,作者使用了 Ptr-Net 。
一种应用 Ptr-Net 的直接方法是将一个答案当做一个单词序列,序列中的单词都是来自于输入的文章,但是无视一个事实:这些单词在原文章中是连续,因为 Ptr-Net 并没有作出连续性 (consecutivity) 假设。【这里的意思,可能意味着使用 Ptr-Net 从输入文章中得到的单词序列,其各个单词可能在原文章中是不连续的】
另一种方式,如果想要确保连续性,可以使用 Ptr-Net 只预测答案的起点和终点。在这种情况下,Ptr-Net 只需要从输入文章中选择两个单词。
作者把使用上述的第一种应用方式构建的模型叫做 sequence model ;第二种应用方式构建的模型叫做 boundary model
sequence modelboundary model 都是由三层结构组成:(1) LSTM 预处理层,使用 LSTMs 对文章和问题进行预处理。 (2) match-LSTM 层,进行文章和问题之间的匹配。 (3) Answer Pointer 层,使用 Ptr-Net 从文章中选择单词集合作为答案。 两个模型的不同点在于第三层。

  1. LSTM 预处理层 (LSTM Preprocessing Layer)
    该层的主要目的是将上下文信息融合进文章或问题中每个单词的向量表示中。作者使用了一个标准的单向 LSTM 来分别处理文章和问题,具体实现公式如下:


    其中 , 是文章和问题经过 LSTM 后的隐藏层表示 (hidden representations) 。

  2. Match-LSTM Layer
    match-LSTM 循序地遍历整个文章。在文章的位置 ,使用标准的逐字 (word-by-word) 注意力机制来获取注意力权重向量 ,具体实现公式如下:
    \overrightarrow{{\boldsymbol{\rm{G}}}}_i = \rm{tanh}(\boldsymbol{\rm{W}}^q\boldsymbol{\rm{H}}^q + (\boldsymbol{\rm{W}}^p\boldsymbol{\rm{h}}_i^p + \boldsymbol{\rm{W}}^r\overrightarrow{\boldsymbol{\rm{h}}}_{i-1}^r + \boldsymbol{\rm{b}}^p) \otimes \boldsymbol{\rm{e}}_Q)

    其中 。 是 LSTM 的隐含层神经元个数(从后面可以看出,作者将所有用到的 LSTM 的隐含层神经元个数都设置为 ), 是单向 match-LSTM 的上一个 (位置 ) 隐藏层状态, () 表示通过重复复制 (repeat) 一个向量或者标量 次,从而产生一个矩阵(复制后的 个向量,在新的维度上进行堆叠 (stack))或者列向量。
    由此产生的注意力权重 表示文章的第 个单词与问题的第 个单词之间的匹配度 (degree of matching)。接着,作者使用注意力权重向量 对问题进行加权,并与文章的第 个单词的表示向量进行结合,具体实现公式如下:

    再将 喂进一个标准的单向 LSTM 形成作者所谓的 match-LSTM 。

    其中,
    作者还进一步建立了一个反方向的 match-LSTM。 目的是获取文章中各个单词在全部方向上的上下文编码表示。具体实现公式如下:
    \overleftarrow{{\boldsymbol{\rm{G}}}}_i = \rm{tanh}(\boldsymbol{\rm{W}}^q\boldsymbol{\rm{H}}^q + (\boldsymbol{\rm{W}}^p\boldsymbol{\rm{h}}_i^p + \boldsymbol{\rm{W}}^r\overleftarrow{\boldsymbol{\rm{h}}}_{i+1}^r + \boldsymbol{\rm{b}}^p) \otimes \boldsymbol{\rm{e}}_Q)

    其他部分与正向的 match-LSTM 相似。
    最后再将两个方向的 match-LSTM 输出结果进行拼接,具体实现公式如下:


  3. Answer Pointer Layer
    最后一层, the Answer Pointer (Ans-Ptr) Layer ,受到 the Pointer Net 的启发。该层使用 作为输入。由于存在之前提到的 the sequence modelthe boundary model 两种模式,因此,下面分别讲述这两种模式的具体实现:

    • The Sequence Model
      the sequence model 中,答案通过一个整数 (integer) 序列 表示,各个整数分别代表所选择的单词在原文章中的位置。
      因为一个答案的长度是不固定的,为了在一个确定的时间点停止答案单词的生成,作者设置 的取值范围为 到 , 是一个特殊值,代表答案的结束。 当 时,停止答案生成。
      为了生成第 个答案单词,首先使用注意力机制来获取一个注意力权重向量 。 表示选择文章中第 j 个单词作为第 k 个答案单词的概率, 表示在位置 k 停止答案生成的概率。 的具体计算公式如下:


      是 与 一个零向量的拼接, , 是 answer LSTM 的上一个 (位置 k-1) 的隐藏层状态, answer LSTM 定义公式如下:

      【这个 answer LSTM 与 match-LSTM 十分相似】
      对答案序列的生成概率进行建模:


      在模型训练时,最小化下面定义的损失函数【对数似然函数?】:

      【很好奇,这种模式生成的答案,人类是否可以读懂,可能答案中的单词是乱序的】
    • The Boundary Model
      The Boundary Model 的工作方式与 The Sequence Model 十分相似, 不同的是它只需要预测两个索引 和 。因此,在 the Boundary Model 中,不需要特殊值 ,不需要对 进行零填充,答案生成的概率模型简化为:

      【实际实现过程中是否需要满足 】
      作者还对 the boundary model 进行扩展:加入了一个查找机制 (search mechanism) 。在预测的过程中,作者尝试着限制范围的长度 (the length of the span) 和通过 由 计算得到的最高概率 进行范围的全局搜索 (globally search the span)。此外,如果范围 (boundary) 是一个固定长度的序列,则可以创建双向 Ans-Ptr (类似于双向的 match-LSTM) 。
      【不是很懂那个搜索机制的具体实现,只知道限制了文章中单词搜索的范围 (boundary or the span),不再是 到 (这里的 是非固定的数值)。文章的实验部分也没有详细说明,只能后续从开源代码进行分析。】
      【这个搜索机制,貌似以后会用到,可以学一下】

模型结构图:

2016 MACHINE COMPREHENSION USING MATCH-LSTM AND ANSWER POINTER_第1张图片

实验部分参数设置

  • 使用 GloVe 预训练词向量, 未登录词初始化为零向量。
  • LSTM 的隐含层维度 为 150 或者 300。
  • 使用 ADAMAX 优化器 , 其中 , 来对模型进行优化。
  • 每次更新时, batch 大小为30。
  • 没有使用 L2 正则化约束。
  • 两个性能评估指标:
    • 基本真实答案的精确匹配百分比 (percentage of exact match with the ground truth answers)。
    • 词层次的F1分数 (word-level F1 score) ,对比预测的答案和基础真实答案的每个单词。

实验结果

2016 MACHINE COMPREHENSION USING MATCH-LSTM AND ANSWER POINTER_第2张图片

作者提供的开源代码

https://github.com/shuohangwang/SeqMatchSeq

Reference

  1. Wang S, Jiang J. Machine comprehension using match-lstm and answer pointer[J]. arXiv preprint arXiv:1608.07905, 2016.
  2. Wang S, Jiang J. Learning natural language inference with LSTM[J]. arXiv preprint arXiv:1512.08849, 2015.
  3. Vinyals O, Fortunato M, Jaitly N. Pointer networks[C]//Advances in Neural Information Processing Systems. 2015: 2692-2700.

你可能感兴趣的:(2016 MACHINE COMPREHENSION USING MATCH-LSTM AND ANSWER POINTER)