lecture10 - Question Answering

lecture9是project tips没有太多tech的东西,先跳了接着往后看,此外这堂课多了几个较复杂的模型,detail没有太弄清

课程内容

项目文档的写法(Project writeup)

这是Manning在课件上展示的项目文档的建议结构,同时也是写论文的一个通用的结构,我觉得很清晰,也在这记录一下:
在这里插入图片描述

问答模型产生的动机(Motivation)

随着网页文档数量的急剧增加,在用户输入问题后,仅仅返回答案相关的文档是不够的,并且设备很可能无法处理如此多的文档,我们需要更进一步,对这些相关文档进行答案的提取(answer extract),manning的例子中,还提到了另一种问答系统,谷歌的知识图谱(Knowledge Graph),但这节课不探讨它。
于是,像这样的问答系统的构建大致可以分为两个步骤:
1、根据问题检索出相关的文档
这个是信息检索领域的课题,会包含在Stanford CS276n这门课中
2、在相关文档中提取答案
本节课程的主要内容,又可以称为阅读理解问题(Reading comprehension)

问答数据集(Question Answering Dataset)

首先,要说明一下如何认定一个问答模型理解(comprehend)了一个段落。
下面这段话来自微软研究院的Christopher.J.C.Burges:
“A machine comprehends a passage of text if, for any question regarding that text that can be answered correctly by a majority of native speakers,
that machine can provide a string which those speakers would agree both answers that question, and does not contain information irrelevant to that question.”
也就是说,模型能提供一个令对应语言母语者认为可以回答所提供问题的,且不包含与该问题不相关信息的答案,就认为模型理解了这个段落,当然,前提是这个问题是一个合理的(可以被大部分母语者正确回答的)

SQuAD(Stanford Question Answering Dataset)

factoid question:指的是一些很客观的,能够被事实确定的问题,例如“她的名字是什么?”是一个factoid question,但类似“你觉得她怎么样?”这样的问题就不是一个factoid question。

目前leaderboard上的排名靠前的模型都用了谷歌的BERT。

SQuAD version 1.1

这个版本的SQuAD由两个部分组成,一个question以及与之相关的一个段落(passage),其特点是,问题的答案一定是给定段落的一个连续片段,是一种extractive question answering。
例子:
在这里插入图片描述
注:蓝色部分为问题答案

答案评估(evaluation)

对于每一个问题,会有人工回答的三个答案,称为优质答案(Gold answers)
在这里插入图片描述
对于模型给出的回答,有两个指标用于评估:
1、EM(exact match)
对于每个问题,简单地看所给答案是否与三个备选人工答案之一相匹配,若匹配得到1分,反之0分。
2、F1-Score
计算方式就是一个关于精度(Precision)以及召回率(recall)的调和平均。其中的定义为:
T P TP TP:真正例,预测正确的正例
F P FP FP:假正例,预测错误的正例
T N TN TN:真反例,预测正确的反例
F N FN FN:假反例,预测错误的反例(即实际标签为正例)

P r e c i s i o n = T P T P + F P Precision = \frac{TP}{TP+FP} Precision=TP+FPTP

R e c a l l = T P T P + F N Recall = \frac{TP}{TP+FN} Recall=TP+FNTP

在这里,计算F1首先需要将模型给出的答案与人工答案当作词袋模型(bag of words)。
然后precision就相当于人工答案的词袋中有多少出现在模型的词袋中。而recall相当于模型的词袋中有多少出现在人工答案的词袋中。
一般来说,F1衡量的效果会比较好。需要注意的是,两个metric的计算都会忽略掉标点符号与冠词(a\an\the)。

SQuAD version2.0

在SQuADv1中,存在比较主要的问题:数据集中的passage一定有答案,这样的话模型只需要对抽取出的段落进行打分排序,输出最高的即可,而不需要判断这些段落是否为合理的答案。
SQuAD v2对此作出了改进,1/3的用作训练集的问题是没有答案的,而1/2的测试集的问题没有答案,在面对这些模型时,模型只有输出代表无答案的TOKEN才算正确。
在这里插入图片描述

SQuAD的优点与缺点

缺点:
1、只包含基于段落的问答(span-based answer),缺少其他形式的问答,例如,判断题,或者更进一步的推断题。
2、问题是基于给定的段落提出的,没有融入现实世界中的常识,即仅仅与段落相关。
3、几乎没有多段落式的答案,即特定问题仅对应特定的一个片段。

优点:
1、SQuAD是一个干净的数据集,也是被使用得最多的问答数据集。
2、这是一个很好的可以用于产生工业级Baseline模型的数据集。

经典模型

下面开始介绍几个典型模型,不过其实只有Stanford Attentive Reader是说得比较详细的。。其他几个我并没有太清楚结构(可能也是因为其他几个结构比较复杂)。

Stanford Attentive Reader(DrQA)

这是一个基于attention机制的模型,基本结构是RNNs。
该模型最终输出答案的起始位置START/END。
下面上图:
在这里插入图片描述
输入分为passage和question两部分,两部分均输入至一个Bi-LSTM中,在最后输出时,进行如下处理:
1、question部分的输入取其最后的隐状态向量作为输出,此处是两个方向最后隐状态的拼接。
2、以1中的向量为query向量,我们学习两套不同的矩阵 W 1 W1 W1 W 2 W2 W2分别对应预测出的START/END位置。
3、随后,我们将passage部分每一步的隐状态与矩阵以及question部分的query向量做矩阵乘法,这样得到两套不同的attention,分别针对START/END的预测。
其中,每一套attention的权重按下式计算:
a i    =    s o f t m a x ( q T W j p i ) a_i\;=\;softmax(q^TW_jp_i) ai=softmax(qTWjpi)
j j j下标代表不同矩阵, p i p_i pi代表每个时间步的passage隐状态(双向)

随后,还有改进版的Attentive Reader++,这个结构稍微复杂一些,有机会找原文来细品。结构如下:
在这里插入图片描述

BiDAF(Bi-Directional Attention Flow for Machine Comprehension)

这个模型里面有一个很有意思的网络层-Attention Flow Layer,是一个双向流动的Attention,所谓双向是相对于DrQA来说的,不单是Question对Passage的Attention,还有Passage对Question的Attention。这个同样,有机会找原文读,单独写一篇blog,结构如下:
在这里插入图片描述

Fusion Net

这个应该是Manning课上提到过的比较复杂的模型之一了,不仅在形式上对原来的点乘式的Attention进行了改进,还在模型中融合了许多不同形式的Attention机制。同样,有机会找原文读。
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值