CS224N学习笔记(十)Question answering

Motivation: Question answering

为例避免收集大量的信息,而通过直接提问获得问题的答案。
通常把这样一个问题分解成两部分:

  • 寻找包含这些问题的答案的相关文件:通过传统的文献或者方式,或者网页搜索等。
  • 在一个文件或者段落中精准的找到答案:通常包含阅读理解(Machine Comprehension)等。

Machine Comprehension的定义:如果有一段文本,和一个相关的问题。这个问题能够被大多native speakers正确回答;如果此时机器能够提供一个回答,如果大多数speakers同意这个回答,并且这个回答不包含与问题关系的信息。那么就可以说达到了一定的Machine Comprehension。
CS224N学习笔记(十)Question answering

Stanford Question Answering Dataset (SQuAD)

Stanford建立的一个问答的树库,在最初的版本包含100k个问答的例子,答案一定是文本中的一部分,如图:
CS224N学习笔记(十)Question answering
每个问题都提供有几个标准答案:
CS224N学习笔记(十)Question answering
提供有几种评价模型的手段,所有的评价方法都忽略冠词(a,an,the):

  • Exact match:三个答案,答对了1分,答错了0分
  • F1 score:计算Precision,Recall,harmonic mean F1等

SQuAD 2.0:改进了数据集和测试集,加入了一些没有答案的问题,如图:
CS224N学习笔记(十)Question answering
SQuAD数据集的缺点:

  • 答案的形式固定,都是在文章中的原话,无法回答是/不是,多少个,解释为什么等问题。
  • 问题都是根据文章段落构建的,并不是一种真的的回答和理解,只要在文章中找答案的定位即可。
  • 无法组织这种多文本融合的问题。

Question Answering system举例

课程中举例了几种Question Answering system并解释它是如何运作的。

Stanford Attentive Reader

模型的步骤:

  1. 首先把文本(passage)和问题(Question),通过双向lstm网络进行编码。
  2. 取问题编码后的第一个隐藏层和最后一个隐藏层作为,连接到一块,作为总的编码。记文本编码后的向量是pip_i ,问题编码后的向量是qq
  3. 根据注意力模型,计算答案开始位置在文本中的概率分布:ai=softmaxi(qTWspi){a_i}={softmax_i}{({q^T}{W_s}\stackrel{-}{p}_i)},以及答案结束位置在文中中的概率分布:ai=softmaxi(qTWspi){a_i^’}={softmax_i}{({q^T}{W_s^’}\stackrel{-}{p}_i)}
  4. 然后就可以进行训练了。

步骤如图所示:
CS224N学习笔记(十)Question answering
CS224N学习笔记(十)Question answering
CS224N学习笔记(十)Question answering
这里Ws{W_s^’}Ws{W_s}公式一样,但是是分别训练出来的两个不同的参数矩阵。最后计算的结果实际上是softmax的输出,也就是概率分布。

Stanford Attentive Reader++

该方法是在Stanford Attentive Reader的改进,主要改进一下几个方面:

  1. 在得到双向lstm编码后的question后,不是简单的取最后一步和第一步的隐藏层连接,而是定义一个学习矩阵ww,计算权参数bb,然后根据这个加权和得到最终编码的qq,如图所示:
    CS224N学习笔记(十)Question answering
  2. 对于pip_i的构建,不仅见考虑最简单的词向量(word embedding),还要考虑语法特征规则(one-hot向量编码),以及是都正确匹配答案等。具体如图所示:
    CS224N学习笔记(十)Question answering

BiDAF:双向attention flow

BiDAF的结构如图所示:
CS224N学习笔记(十)Question answering
BiDAF共有6层,分别是Character Embedding Layer、Word Embedding Layer、Contextual Embedding Layer、Attention Flow Layer、Modeling Layer和Output Layer。其中前三层是一个多层级上下文不同粒度的表征编码器。第四层则是双向注意流层,这是原文的核心层。第五层是一个编码层,编码第四层输出的问题感知的上下文表征。第六层就是一个预测答案的范围。假设context为 x1,x2xn{x_1 , x_2 \cdots x_n},query为 q1,q2qn{q_1 , q_2 \cdots q_n}
前面三层就是常规的各种神经网络编码组合到了一块,课程主要解释了第四层。
第四层认为attention模型是双向的两个,由context到question和由question到context。
和图中不同,不妨假设前三层编码的结果还是qiq_icic_i
首先,计算qiq_icic_i相似矩阵(attention必备):
CS224N学习笔记(十)Question answering
WsimTW_{sim}^T是模型训练得到的。
接着,计算Context-to-question Attention(C2Q),对每一个 context word 而言哪些 question words 和它最相关。计算如下:
CS224N学习笔记(十)Question answering
接着计算Question-to-Context (Q2C) attention,对每一个 question word 而言哪些 context words 和它最相关,为这些 context words 对回答问题很重要,故直接取相关性矩阵中最大的那一列。
CS224N学习笔记(十)Question answering
然后得到一个新的context的编码的形式,总的输出:
CS224N学习笔记(十)Question answering
之后就是第五层第六层,课程里面没有细说。

FusionNet

也是改变了attention模型中的相关系数的计算方法,并且结合了其他的模型,如图所示:
CS224N学习笔记(十)Question answering
CS224N学习笔记(十)Question answering