CS224N学习笔记(十)Question answering
Motivation: Question answering
为例避免收集大量的信息,而通过直接提问获得问题的答案。
通常把这样一个问题分解成两部分:
- 寻找包含这些问题的答案的相关文件:通过传统的文献或者方式,或者网页搜索等。
- 在一个文件或者段落中精准的找到答案:通常包含阅读理解(Machine Comprehension)等。
Machine Comprehension的定义:如果有一段文本,和一个相关的问题。这个问题能够被大多native speakers正确回答;如果此时机器能够提供一个回答,如果大多数speakers同意这个回答,并且这个回答不包含与问题关系的信息。那么就可以说达到了一定的Machine Comprehension。
Stanford Question Answering Dataset (SQuAD)
Stanford建立的一个问答的树库,在最初的版本包含100k个问答的例子,答案一定是文本中的一部分,如图:
每个问题都提供有几个标准答案:
提供有几种评价模型的手段,所有的评价方法都忽略冠词(a,an,the):
- Exact match:三个答案,答对了1分,答错了0分
- F1 score:计算Precision,Recall,harmonic mean F1等
SQuAD 2.0:改进了数据集和测试集,加入了一些没有答案的问题,如图:
SQuAD数据集的缺点:
- 答案的形式固定,都是在文章中的原话,无法回答是/不是,多少个,解释为什么等问题。
- 问题都是根据文章段落构建的,并不是一种真的的回答和理解,只要在文章中找答案的定位即可。
- 无法组织这种多文本融合的问题。
Question Answering system举例
课程中举例了几种Question Answering system并解释它是如何运作的。
Stanford Attentive Reader
模型的步骤:
- 首先把文本(passage)和问题(Question),通过双向lstm网络进行编码。
- 取问题编码后的第一个隐藏层和最后一个隐藏层作为,连接到一块,作为总的编码。记文本编码后的向量是 ,问题编码后的向量是。
- 根据注意力模型,计算答案开始位置在文本中的概率分布:,以及答案结束位置在文中中的概率分布:。
- 然后就可以进行训练了。
步骤如图所示:
这里和公式一样,但是是分别训练出来的两个不同的参数矩阵。最后计算的结果实际上是softmax的输出,也就是概率分布。
Stanford Attentive Reader++
该方法是在Stanford Attentive Reader的改进,主要改进一下几个方面:
- 在得到双向lstm编码后的question后,不是简单的取最后一步和第一步的隐藏层连接,而是定义一个学习矩阵,计算权参数,然后根据这个加权和得到最终编码的,如图所示:
- 对于的构建,不仅见考虑最简单的词向量(word embedding),还要考虑语法特征规则(one-hot向量编码),以及是都正确匹配答案等。具体如图所示:
BiDAF:双向attention flow
BiDAF的结构如图所示:
BiDAF共有6层,分别是Character Embedding Layer、Word Embedding Layer、Contextual Embedding Layer、Attention Flow Layer、Modeling Layer和Output Layer。其中前三层是一个多层级上下文不同粒度的表征编码器。第四层则是双向注意流层,这是原文的核心层。第五层是一个编码层,编码第四层输出的问题感知的上下文表征。第六层就是一个预测答案的范围。假设context为 ,query为
前面三层就是常规的各种神经网络编码组合到了一块,课程主要解释了第四层。
第四层认为attention模型是双向的两个,由context到question和由question到context。
和图中不同,不妨假设前三层编码的结果还是和。
首先,计算和相似矩阵(attention必备):
是模型训练得到的。
接着,计算Context-to-question Attention(C2Q),对每一个 context word 而言哪些 question words 和它最相关。计算如下:
接着计算Question-to-Context (Q2C) attention,对每一个 question word 而言哪些 context words 和它最相关,为这些 context words 对回答问题很重要,故直接取相关性矩阵中最大的那一列。
然后得到一个新的context的编码的形式,总的输出:
之后就是第五层第六层,课程里面没有细说。
FusionNet
也是改变了attention模型中的相关系数的计算方法,并且结合了其他的模型,如图所示: