【CS224n】(lecture11)Question Answering

学习总结

文章目录

一、QA介绍

QA:构建能够自动回答人类用自然语言提出的问题的系统。
【CS224n】(lecture11)Question Answering

1.1 QA的分类:

(本task主要讲texutal QA,不考虑KB-QA、visual-QA等)

  • 根据信息来源分类:一个文本段落,所有的Web文档,知识库,表格,图像;
  • 问题类型:Factoid vs non-factoid, open-domain vs closed-domain, simple vs compositional等等;
  • 回答类型:A short segment of text, a paragraph, a list, yes/no等等。

QA系统的类型:

  • 根据任务类型
    • 1.任务型机器人用于完成用户特定任务,机器人利用语义去执行后台已对接的能力,帮用户完成特定任务。例如预订酒店,销售产品等。
    • 特点:智能决策,状态转移,槽位填充,多轮问答。
  • 解答型机器人
    • 用于解答用户的问题,机器人的回复来源于特定知识库,以特定回复回答用户。例如跟百科问答相关的机器人或者产品客服机器人。
    • 特点:问答模型,信息检索,单轮为主。
  • 闲聊型机器人
    • 跟用户的无目的闲聊,机器人回复不限制,多以趣味性跟个性化回复为主。
    • 特点:开放域,个性化,内容丰富。

根据解决方案:

  • 基于检索式的问答系统:根据问题从数据库搜索最接近的问题,返回相应答案。特点:稳定可控,缺乏灵活性。
  • 基于生成式的问答系统:根据实际问题直接生成答案。特点:回复更加丰富,相对灵活,生成答案不受控。(多用于闲聊机器人)

1.2 QA的框架

问答系统通常包括三个环节,NLU(自然语言理解),DM(中控平台),NLG(自然语言生成)。其中:

  • DM主要包括对话状态跟踪(Dialogue State Tracking)跟策略学习(Policy Learning)两个部分。
  • 如下图所示,其中NLU主要是对用户问题的解析,可以理解为把用户问题转化为机器能理解的语言。对话状态跟踪主要是获得当前的状态,可以理解为机器人所理解的用户问题的所处的状态,策略学习主要是根据当前系统的状态采取的策略(例如用户在这里可能是要询问地址,那么就返回的策略就是跟询问地址相关的),NLG是对用户的问题的回复,可以理解为用户最终会看到的机器人返回的结果。【CS224n】(lecture11)Question Answering

【CS224n】(lecture11)Question Answering

IBM Watson在2011年打败Jeopardy champions

1.3 QA在深度学习领域

Open-Retrieval Question Answering一个重要方面是其表现力,能够检索开放语料库中的任何文本,而不是局限于信息检索所返回的封闭集,模型的框架如下所示:
【CS224n】(lecture11)Question Answering
几乎所有至今最先进的QA问答系统都是建立在端到端的预训练语言模型中(如BERT等)。

1.4 Beyond textual QA problems

【CS224n】(lecture11)Question Answering
除了文本QA问题,今天我们要讨论问的QA如何回答基于非结构化数据文档的问题:
【CS224n】(lecture11)Question Answering

二、阅读理解

2.1 reading comprehension

阅读理解reading comprehension:阅读一篇文章,并回答基于文章的相关问题。

  • 在生活中有很多实际的应用;
  • 许多NLP任务可以归结为一个阅读理解任务。

2.2 SQuAD数据集

斯坦福开发的SQuAD1.1、SQuAD2.0。这两个数据集都是抽取式问答,因此

可以建模为序列标注问题(预测passage的每个token是答案开头和结尾的概率),在评价指标上可以使用F1和EM(exact match)
【CS224n】(lecture11)Question Answering
SQuAD-1.1数据集介绍将SQuAD数据集可视化如下草图,每一个元素表示的就是答案,问题,以及问题编号。答案中给出了答案的起始位置和答案的文本字符串。

我们要的数据包括context,这代表一个段落,而对于这个段落会有几个问题和对应的答案,所以还需要question和text以及answer start,text就是question的答案。这个数据集一个question只有一个答案。result中的字段除了id外其余的就是我们训练需要的字段。

另外SQuAD 2.0数据集可以通过NLP 高引论文解读两篇 | BERT模型、SQuAD数据集了解。
【CS224n】(lecture11)Question Answering

  • Passage 是来⾃*的⼀段⽂本,系统需要回答问题,在⽂章中找出答案
  • 答案必须是⽂章中的⼀系列单词序列,也就是提取式问答
  • 100k examples

(1)SQuAD evaluation, v1.1

  • 系统在两个指标上计算得分
    • 精确匹配:1/0的准确度,您是否匹配三个答案中的⼀个
    • F1:将系统和每个答案都视为词袋,并评估:
       Precision  = T P T P + F P ,  Recall  = T P T P + F N ,  harmonic mean  F 1 = 2 P R P + R \text { Precision }=\frac{T P}{T P+F P}, \text { Recall }=\frac{T P}{T P+F N}, \text { harmonic mean } \mathrm{F} 1=\frac{2 P R}{P+R}  Precision =TP+FPTP​, Recall =TP+FNTP​, harmonic mean F1=P+R2PR​
    • Precision 和 Recall 的调和平均值
    • 分数是(宏观)平均每题F1分数
  • F1测量被视为更可靠的指标,作为主要指标使⽤
    • 它不是基于选择是否和⼈类选择的跨度完全相同,⼈类选择的跨度容易受到各种影响,包括换行
    • 在单次级别匹配不同的答案
  • 这两个指标忽视标点符号和冠词(a, an, the only)

(2)SQuAD 2.0

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

2.3 神经网络模型

(1)LSTM-based vs BERT models

【CS224n】(lecture11)Question Answering

(2)带注意力机制的seq2seq模型

  • 除了源句和目标句,我们还有两个序列:段落和问题(长度不平衡)
  • 我们需要建模找出文章中哪些词与问题最相关(以及哪些疑问词)
  • 我们不需要一个自回归解码器来逐字生成目标句子。相反,我们只需要训练两个分类器来预测答案的开始和结束位置。

(3)BiDAF: the Bidirectional Attention Flow model

《BiDAF: the Bidirectional Attention Flow model》 是RNN时代的一篇经典工作,可以参考知乎上的一篇解读
【CS224n】(lecture11)Question Answering

  • 多年来,BiDAF architecture有许多变体和改进,但其核心思想是 the Attention Flow layer。

1)encoder

  • 为上下文(context)和查询问题(query)中的每个单词,使用单词embedding(Glove)和字母字符embedding(基于CNNs的字符embedding):
    e ( c i ) = f ( [ GloVe ⁡ ( c i ) ; charEmb ⁡ ( c i ) ] ) e\left(c_{i}\right)=f\left(\left[\operatorname{GloVe}\left(c_{i}\right) ; \operatorname{charEmb}\left(c_{i}\right)\right]\right) e(ci​)=f([GloVe(ci​);charEmb(ci​)]) e ( q i ) = f ( [ GloVe ⁡ ( q i ) ; charEmb ⁡ ( q i ) ] ) e\left(q_{i}\right)=f\left(\left[\operatorname{GloVe}\left(q_{i}\right) ; \operatorname{charEmb}\left(q_{i}\right)\right]\right) e(qi​)=f([GloVe(qi​);charEmb(qi​)])
  • 然后使用2个双向LSTM分别为上下文context和查询query生成上下文嵌入embedding。
    c → i = LSTM ⁡ ( c → i − 1 , e ( c i ) ) ∈ R H q → i = LSTM ⁡ ( q → i − 1 , e ( q i ) ) ∈ R H c ← i = LSTM ⁡ ( c ← i + 1 , e ( c i ) ) ∈ R H q ← i = LSTM ⁡ ( q ← i + 1 , e ( q i ) ) ∈ R H c i = [ c → i ; c ← i ] ∈ R 2 H q i = [ q → i ; q ← i ] ∈ R 2 H \begin{array}{ll} \overrightarrow{\mathbf{c}}_{i}=\operatorname{LSTM}\left(\overrightarrow{\mathbf{c}}_{i-1}, e\left(c_{i}\right)\right) \in \mathbb{R}^{H} & \overrightarrow{\mathbf{q}}_{i}=\operatorname{LSTM}\left(\overrightarrow{\mathbf{q}}_{i-1}, e\left(q_{i}\right)\right) \in \mathbb{R}^{H} \\ \overleftarrow{\mathbf{c}}_{i}=\operatorname{LSTM}\left(\overleftarrow{\mathbf{c}}_{i+1}, e\left(c_{i}\right)\right) \in \mathbb{R}^{H} & \overleftarrow{\mathbf{q}}_{i}=\operatorname{LSTM}\left(\overleftarrow{\mathbf{q}}_{i+1}, e\left(q_{i}\right)\right) \in \mathbb{R}^{H} \\ \mathbf{c}_{i}=\left[\overrightarrow{\mathbf{c}}_{i} ; \overleftarrow{\mathbf{c}}_{i}\right] \in \mathbb{R}^{2 H} & \mathbf{q}_{i}=\left[\overrightarrow{\mathbf{q}}_{i} ; \overleftarrow{\mathbf{q}}_{i}\right] \in \mathbb{R}^{2 H} \end{array} c i​=LSTM(c i−1​,e(ci​))∈RHc i​=LSTM(c i+1​,e(ci​))∈RHci​=[c i​;c i​]∈R2H​q ​i​=LSTM(q ​i−1​,e(qi​))∈RHq ​i​=LSTM(q ​i+1​,e(qi​))∈RHqi​=[q ​i​;q ​i​]∈R2H​

2)attention

【CS224n】(lecture11)Question Answering

  • 首先计算每一对的相似度分数 ( c i , q j ) \left(\mathbf{c}_{i}, \mathbf{q}_{j}\right) (ci​,qj​): S i , j = w s i m ⊤ [ c i ; q j ; c i ⊙ q j ] ∈ R w s i m ∈ R 6 H S_{i, j}=\mathbf{w}_{\mathrm{sim}}^{\boldsymbol{\top}}\left[\mathbf{c}_{i} ; \mathbf{q}_{j} ; \mathbf{c}_{i} \odot \mathbf{q}_{j}\right] \in \mathbb{R} \quad \mathbf{w}_{\mathrm{sim}} \in \mathbb{R}^{6 H} Si,j​=wsim⊤​[ci​;qj​;ci​⊙qj​]∈Rwsim​∈R6H
  • Context-to-Question (C2Q) 注意力 (哪些查询词与每个上下文词最相关): α i , j = softmax ⁡ j ( S i , j ) ∈ R a i = ∑ j = 1 M α i , j q j ∈ R 2 H \alpha_{i, j}=\operatorname{softmax}_{j}\left(S_{i, j}\right) \in \mathbb{R} \quad \quad \mathbf{a}_{i}=\sum_{j=1}^{M} \alpha_{i, j} \mathbf{q}_{j} \in \mathbb{R}^{2 H} αi,j​=softmaxj​(Si,j​)∈Rai​=j=1∑M​αi,j​qj​∈R2H
  • Question-to-Context (Q2C) 注意力(上下文中最重要的单词相对于查询的加权和——通过max略有不对称) β i = softmax ⁡ i ( max ⁡ j = 1 M ( S i , j ) ) ∈ R N b = ∑ i = 1 N β i c i ∈ R 2 H \beta_{i}=\operatorname{softmax}_{i}\left(\max _{j=1}^{M}\left(S_{i, j}\right)\right) \in \mathbb{R}^{N} \quad \mathbf{b}=\sum_{i=1}^{N} \beta_{i} \mathbf{c}_{i} \in \mathbb{R}^{2 H} βi​=softmaxi​(j=1maxM​(Si,j​))∈RNb=i=1∑N​βi​ci​∈R2H

3)Modeling and output layers

  • Modeling layer:
    m i = BiLSTM ⁡ ( g i ) ∈ R 2 H \mathbf{m}_{i}=\operatorname{BiLSTM}\left(\mathbf{g}_{\mathrm{i}}\right) \in \mathbb{R}^{2 H} mi​=BiLSTM(gi​)∈R2H
  • Output layer:
    p start  = softmax ⁡ ( w start  ⊤ [ g i ; m i ] ) p end  = softmax ⁡ ( w end  ⊤ [ g i ; m i ′ ] ) m i ′ = BiLSTM ⁡ ( m i ) ∈ R 2 H w start  , w end  ∈ R 10 H \begin{aligned} p_{\text {start }}=\operatorname{softmax}\left(\mathbf{w}_{\text {start }}^{\top}\left[\mathbf{g}_{i} ; \mathbf{m}_{i}\right]\right) & p_{\text {end }}=\operatorname{softmax}\left(\mathbf{w}_{\text {end }}^{\top}\left[\mathbf{g}_{i} ; \mathbf{m}_{i}^{\prime}\right]\right) \\ & \mathbf{m}_{i}^{\prime}=\operatorname{BiLSTM}\left(\mathbf{m}_{i}\right) \in \mathbb{R}^{2 H} \quad \mathbf{w}_{\text {start }}, \mathbf{w}_{\text {end }} \in \mathbb{R}^{10 H} \end{aligned} pstart ​=softmax(wstart ⊤​[gi​;mi​])​pend ​=softmax(wend ⊤​[gi​;mi′​])mi′​=BiLSTM(mi​)∈R2Hwstart ​,wend ​∈R10H​

(4)BERT应用在阅读理解上

BERT用在来阅读理解时,最朴素的做法就是,将一个样本的passage和Question作为两个原始的segment用【sep】拼接起来作为BERT的输入
【CS224n】(lecture11)Question Answering

  • BERT是一种深度双向transformer的编码器encoder部分,在大量文本上进行了预训练(*+ BooksCorpus)。
  • BERT在两个任务上进行预训练:
    • MLM:Masked language model
    • NSP:Next sentence prediction
  • BERTbase版本有12 layers and 110M个参数;BERTlarge有24 layers 和 330M 的参数量。

【CS224n】(lecture11)Question Answering
这里BERT的作用可以理解为一个提取特征的encoder,其对于每个passage的token都生成了一个包含上下文信息以及篇章同问题之间的交互信息(具体去了解transformer,它是BERT的backbone)的向量(representation)。接下里针对QA任务构建简单的下游网络,其实就是两个预测层,分别预测该representation对应的token是答案开头或者起始的概率。

其训练目标就是两个loss相加。
【CS224n】(lecture11)Question Answering

(5)BiDAF 和 BERT 之间的区别

  • BERT模型有更多的参数(110M或330M), BiDAF有 大约 2.5M 参数;
  • 两者的backbone不同。BiDAF是建立在几个双向lstm之上的,在训练和推理时都是线性的;而BERT是建立在transformer(没有递归架构,更容易并行化)。
  • BERT是大规模语料预训练得到的,而BiDAF只是建立在GloVe之上(所有剩余的参数需要从监督数据集学习),从头训练。

(6)针对下游任务设计更好的预训练目标

danqi这里用QA做例子很好地渗透了一种思想:预训练为什么work,其实就是因为其任务本身和下游任务之前存在overlap(当然也要加上充足的数据量),比如MLM任务可以很好地锻炼模型的“理解能力”,所以BERT在NLU任务上刷榜了,又比如自回归和生成类任务天然更搭,所以GPT在生成类任务上更好一些。因此,其提出了一个针对阅读理解任务的预训练目标,即span-BERT。
【CS224n】(lecture11)Question Answering

  • 掩蔽连续的单词跨度,而不是15%的随机单词
  • 利用span的两个端点预测中间的所有掩码词=将span的信息压缩到它的两个端点 y i = f ( x s − 1 , x e + 1 , p i − s + 1 ) \mathbf{y}_{i}=f\left(\mathbf{x}_{s-1}, \mathbf{x}_{e+1}, \mathbf{p}_{i-s+1}\right) yi​=f(xs−1​,xe+1​,pi−s+1​)

(7)存在的问题

我们的模型在SQuAD上的表现已经超过人类的水平,但不代表其已经具有阅读理解能力了。当前系统在对抗性示例或领域外分布的示例上仍然表现不佳,模型很容易被其他候选项迷惑。
【CS224n】(lecture11)Question Answering
领域(数据集)间迁移能力差:
【CS224n】(lecture11)Question Answering
这里提到了acl2021的best paper:《Beyond Accuracy: Behavioral Testing of NLP Models with CheckList》

这篇论文认为模型在held-out集合上的测评结果不能真正的代表这个模型的能力,因为测试集规模小并且往往和训练集有相似的分布,同时一些指标也不见得合理,并且将模型表现聚合到一个指标上,就不能很好地发现模型在哪些case上比较差进而进行针对性的改进。因此,本文提出了一套基于软件工程领域的“黑箱测试”理论的模型评估套件——checklist。更多的内容可以参看论文,这里只截取danqi课程相关的内容,即checklist针对BERT-large(在SQuAD上微调)的测试结果:
【CS224n】(lecture11)Question Answering
从这里可以看出来,虽然bert在SQuAD上的表现超过了人类表现,但是却经不起checklist的检验,主要体现在双重否定,属性、人和物品之间的比较级,指代分辨,主客体区分上。可见QA问题远远没有被解决。

三、Open-domain (textual) question answering

开放域文本问答,与阅读理解不同,Open-domain (textual) QA并不会基于给定的文章给出答案,而是从大规模的知识库或者文本集合(如*等)中返回答案。。

3.1 Retriever-reader framework

【CS224n】(lecture11)Question Answering
将问题分解为两阶段,首先检索出最相关的passage,然后转化为一个阅读理解问题。这里danqi很快地过了两篇论文:
【CS224n】(lecture11)Question Answering

Lee et al., 2019. Latent Retrieval for Weakly Supervised Open Domain Question Answering

【CS224n】(lecture11)Question Answering

Karpukhin et al., 2020. Dense Passage Retrieval for Open-Domain Question Answering

这两个区别简单来说就是,前者需要question和passage联合输入模型,这样经过排列组合后,模型的计算量就大大增加了。后者直接将question和passage编码为固定向量,然后直接计算相似度,减少了复杂度。
  • Input: a large collection of documents D = D 1 , D 2 , … , D N \mathscr{D}=D_{1}, D_{2}, \ldots, D_{N} D=D1​,D2​,…,DN​ and Q Q Q
  • Output: an answer string A A A
  • Retriever: f ( D , Q ) ⟶ P 1 , … , P K f(\mathscr{D}, Q) \longrightarrow P_{1}, \ldots, P_{K} \quad f(D,Q)⟶P1​,…,PK​ K is pre-defined (e.g., 100)
  • Reader: g ( Q , { P 1 , … , P K } ) ⟶ A g\left(Q,\left\{P_{1}, \ldots, P_{K}\right\}\right) \longrightarrow A g(Q,{P1​,…,PK​})⟶A A reading comprehension problem!
    In DrQA,
  • Retriever = A standard TF-IDF information-retrieval sparse model (a fixed module)
  • Reader = a neural reading comprehension model that we just learned
  • Trained on SQuAD and other distantly-supervised QA datasets
    Distantly-supervised examples: ( Q , A ) ⟶ ( P , Q , A ) (\mathrm{Q}, \mathrm{A}) \longrightarrow(\mathrm{P}, \mathrm{Q}, \mathrm{A}) (Q,A)⟶(P,Q,A)

3.2 Dense retrieval + generative models

之前提到的都是从已有的文本中抽取答案,随着研究的进展,生成式问答出现了。这篇论文提出,先通过检索找到和问题强相关的上下文,然后将其输入给seq2seq模型,训练模型直接生成正确答案。
【CS224n】(lecture11)Question Answering

Izacard and Grave 2020. Leveraging Passage Retrieval with Generative Models for Open Domain Question Answering

随着预训练的发展,人们发现一些“巨无霸”甚至不需要上下文信息,只需要给其输入问题,它就能从自身参数保存的知识中寻找到正确答案。
【CS224n】(lecture11)Question Answering

Roberts et al., 2020. How Much Knowledge Can You Pack Into the Parameters of a Language Model?
## 3.3 不需要reader 模型 这篇论文直接将知识库切分为phrases(60 billion),然后encoding,再将question进行encoding,最后进行phrase vector和question vector之间的相似度评估(近邻搜索),返回最相似的phrase作为答案。这种做法的效果竟然也很好。 ![在这里插入图片描述](https://www.icode9.com/i/ll/?i=c3a4142f532b42019e4726dd7b7f33fc.png#pic_center =700x)

3.4 Dense retrieval + generative models

最近的研究工作表明,生成答案代替抽取答案会更好。
【CS224n】(lecture11)Question Answering

Reference

(1)课程ppt:https://web.stanford.edu/class/cs224n/slides/
(2)Speech and Language Processing :https://web.stanford.edu/~jurafsky/slp3/
(3)课程官网:https://see.stanford.edu/Course/CS224N#course-details
(4)https://zhuanlan.zhihu.com/p/451347191

上一篇:One More Check: Making “Fake Background” Be Tracked Again


下一篇:SDN:核心价值是弹性 主要应用场景是数据中心