【cs224n-7】Question Answering

问答系统(Question Answering)实际需求很多,比如我们常用的谷歌搜索就可看做是问答系统。通常我们可以将问答系统看做两部分:从海量的文件中,找到与问题相关的可能包含回答的文件,这一过程是传统的information retrieval;从文件或段落中找到相关的答案,这一过程也被称作Reading Comprehension阅读理解,也是这一讲关注的重点。

MCTestReading Comprehension

【cs224n-7】Question Answering

Stanford Question Answering Dataset (SQuAD)

     Reading Comprehension需要数据是Passage即文字段落,Question问题以及相应的Answer回答。SQuAD就是这样的数据集。对于每个问题都有人类提供的三个标准答案,并提供了两个评估指标:

  1. Exact Match,即模型回答与任意一个标准答案匹配即计数为1,否则为零。统计整体的准确率。
  2. F1,将系统和每个答案都视为词袋,并评估Precision 和 Recall 的调和平均值,分数是(宏观)平均每题F1分数

【cs224n-7】Question Answering

F1测量被视为更可靠的指标

 SQuAD2.0

  • SQuAD1.0的一个缺陷是,所有问题都有答案的段落
  • 系统(隐式地)排名候选答案并选择最好的一个,这就变成了一种排名任务
  • 你不必判断一个span是否回答了这个问题
  • SQuAD2.0中 ⅓ 的训练问题没有回答,大约 ½ 的开发/测试问题没有回答
    • 对于No Answer examples, no answer 获得的得分为1,对于精确匹配和F1,任何其他响应的得分都为0
  • SQuAD2.0最简单的系统方法对于一个 span 是否回答了一个问题有一个阈值评分
  • 或者您可以有第二个确认回答的组件类似 自然语言推理 或者 答案验证

    SQuAD存在其局限性:1.答案需直接截取自段落中的文字,没有是非判断、计数等问题。2.问题的选择依赖于段落,可能与实际中的信息获取需求不同那个。3.几乎没有跨句子之间的理解与推断。

Stanford Attentive Reader

  思路是对于Question,先利用Bidirectional LSTM提取其特征向量。

    【cs224n-7】Question Answering

再对Passage中的每个单词进行Bidirectional LSTM提取其特征向量, 并对每个单词对应的特征向量与问题的特征向量进行Attention操作,分别得到推测答案起始位置与终止位置的attention score,损失函数为【cs224n-7】Question Answering

     【cs224n-7】Question Answering

 之后还在该模型基础上进行了改进:

  1. 对于question部分,不仅仅是LSTM最后的输出,而是用了类似于self-attention的weighted sum来表示,并且增多了BiLSTM的层数。
  2. 对于passage的encoding,除了利用Glove得到的word embedding之外,还加入了一些语言学的特征,如POS(part of speech)和NER(named entity recognition) tag以及term frequency。另外还加入了比较简单的特征如段落中单词是否出现在问题中的binary feature,对于这种match,又分为三种即exact match, uncased match(不区分大小写), lemma match(如drive和driving)。更进一步,还引入了aligned question embedding, 与exact match相比,这可以看做是对于相似却不完全相同的单词(如car与vehicle)的soft alignment: 【cs224n-7】Question Answering ,其中 【cs224n-7】Question Answering 代表了段落中单词 【cs224n-7】Question Answering 与问题中单词 【cs224n-7】Question Answering 的相似度。

【cs224n-7】Question Answering

BiDAF: Bi-Directional Attention Flow for Machine Comprehension

    另一个比较重要的QA模型是BiDAF,其模型结构如下。

【cs224n-7】Question Answering

其核心思想是Attention应该是双向的,既有从Context(即passage)到Query(即Question)的attention,又有从Query到Context的attention。

首先计算similarity matrix

【cs224n-7】Question Answering

       其中 【cs224n-7】Question Answering 分别代表context vector与query vector。

       对于Context2Query Attention,我们想要知道对于每个context word,哪些query word比较重要,因此得到attention score及weighted vector:

【cs224n-7】Question Answering

而对于Query2Context Attention,我们想要知道对于query,哪些context words与任意一个query words相似度较高,我们得到对于query来说最关键的context words的加权求和:

【cs224n-7】Question Answering

由此,我们得到了Attention Flow Layer 的输出

【cs224n-7】Question Answering

再对其进行多层LSTM与Softmax得到相应的输出。

人们尝试不同的 Attention

   Dynamic CoattentionNetworks for Question Answering

  协同注意力Co-Attention是注意力机制的一种变体,以机器阅读理解为例,注意力机制就很像我们人在做阅读理解时所使用的一种技巧——带着问题去阅读,先看问题,再去文本中有目标地阅读以寻找答案。协同注意力Co-Attention是一种双向的注意力,不仅我们要给阅读的文本段落生成一个注意力权重,还要给问句也生成一个注意力权重。

【cs224n-7】Question Answering

      协同注意力可以分为两种方式:

  • Parallel Co-Attention:将数据源A和数据源B的信息结合(Bilinear等方式),再基于结合的信息分别对两种数据源生成其对应的Attention。
  • Alternating Co-Attention:先基于数据源A的信息,产生数据源B的Attention,再基于加入Attention之后的数据源B的信息,去生成数据源A的Attention,类似交替使用两次传统的Attention

 

【cs224n-7】Question Answering

  FusionNet(Huang, Zhu, Shen, Chen 2017)

这篇文章从三个角度扩展了现有的注意方法。首先,它提出了一种“history of word”的新概念,用于表征从最低的词向量到最高的语义层表示中的attention信息。其次,它确定了更好地利用“history of word”概念的attention评分功能。第三,它提出了一个全意识的多层次attention机制来捕获一个文本中的完整信息(如问题)并逐层将其用于对等体(如上下文或段落)中。

【cs224n-7】Question Answering

其他模型的Attention

【cs224n-7】Question Answering

参考:

https://zhuanlan.zhihu.com/p/67214500

https://zhuanlan.zhihu.com/p/63502183