学习总结
(1)陈丹琦讲到自己17年在DrQA问答系统,也算是领航人,将Open-domain (textual) question answering分为两部分:Retriever和Reader部分,前者筛选出k个维基百科文档,后者再利用BiDAF等模型进行进一步筛选出QA问答的answer。
(2)有个视频讲解BiDAF模型得不错:视频。
文章目录
- 二、阅读理解
- (1)LSTM-based vs BERT models
- (2)带注意力机制的seq2seq模型
- (3)BiDAF: the Bidirectional Attention Flow model
一、QA介绍
QA:构建能够自动回答人类用自然语言提出的问题的系统。
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.2 QA的框架
问答系统通常包括三个环节,NLU(自然语言理解),DM(中控平台),NLG(自然语言生成)。其中:
- DM主要包括对话状态跟踪(Dialogue State Tracking)跟策略学习(Policy Learning)两个部分。
- 如下图所示,其中NLU主要是对用户问题的解析,可以理解为把用户问题转化为机器能理解的语言。对话状态跟踪主要是获得当前的状态,可以理解为机器人所理解的用户问题的所处的状态,策略学习主要是根据当前系统的状态采取的策略(例如用户在这里可能是要询问地址,那么就返回的策略就是跟询问地址相关的),NLG是对用户的问题的回复,可以理解为用户最终会看到的机器人返回的结果。
IBM Watson在2011年打败Jeopardy champions
1.3 QA在深度学习领域
Open-Retrieval Question Answering一个重要方面是其表现力,能够检索开放语料库中的任何文本,而不是局限于信息检索所返回的封闭集,模型的框架如下所示:
几乎所有至今最先进的QA问答系统都是建立在端到端的预训练语言模型中(如BERT等)。
1.4 Beyond textual QA problems
除了文本QA问题,今天我们要讨论问的QA如何回答基于非结构化数据文档的问题。非结构化数据,比如维基百科的文本。
二、阅读理解
2.1 reading comprehension
阅读理解reading comprehension:阅读一篇文章,并回答基于文章的相关问题。
- 在生活中有很多实际的应用;
- 许多NLP任务可以归结为一个阅读理解任务。
- 一般以抽取式阅读理解(Span-extraction Reading Comprehension为例),由篇章(passage)、问题(question)和答案(answer)构成,答案要求是从篇章(passage)中抽取出一个文本片段(span),即可化简为预测篇章(passage)中的一个起始位置和终止位置。
2.2 SQuAD数据集
斯坦福开发的SQuAD1.1、SQuAD2.0。这两个数据集都是抽取式问答,因此可以建模为序列标注问题(预测passage的每个token是答案开头和结尾的概率),在评价指标上可以使用F1和EM(exact match)
无论是训练集、验证集还是测试集,对于每一个问答数据样本都会有“context", "question"和“answers”三个key。我们可以使用一个下标来选择一个样本。注意answers的标注,answers除了给出了文本片段里的答案文本之外,还给出了该answer所在位置(以character开始计算,上面的例子是第515位)。
SQuAD-1.1数据集介绍将SQuAD数据集可视化如下草图,每一个元素表示的就是答案,问题,以及问题编号。答案中给出了答案的起始位置和答案的文本字符串。
我们要的数据包括context,这代表一个段落,而对于这个段落会有几个问题和对应的答案,所以还需要question和text以及answer start,text就是question的答案。这个数据集一个question只有一个答案。result中的字段除了id外其余的就是我们训练需要的字段。
另外SQuAD 2.0数据集可以通过NLP 高引论文解读两篇 | BERT模型、SQuAD数据集了解。
- Passage 是来自维基百科的一段文本,系统需要回答问题,在文章中找出答案
- 答案必须是文章中的一系列单词序列,也就是提取式问答
- 100k examples
(1)SQuAD evaluation, v1.1
- 系统在两个指标上计算得分
- 精确匹配:1/0的准确度,是否匹配三个答案中的⼀个
- F1:将系统和每个答案都视为词袋,并评估:
- 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
(2)带注意力机制的seq2seq模型
- 除了源句和目标句,我们还有两个序列:段落和问题(长度不平衡)
- 我们需要建模找出文章中哪些词与问题最相关(以及哪些疑问词)
- 我们不需要一个自回归解码器来逐字生成目标句子。相反,我们只需要训练两个分类器来预测答案的开始和结束位置。
(3)BiDAF: the Bidirectional Attention Flow model
《BiDAF: the Bidirectional Attention Flow model》 是RNN时代的一篇经典工作,可以参考知乎上的一篇解读。多年来,BiDAF architecture有许多变体和改进,但其核心思想是 the Attention Flow layer。
1)encoder
- 为上下文(context)和查询问题(query)中的每个单词,使用单词embedding(Glove)和字母字符embedding(基于CNNs的字符embedding):
- 然后使用2个双向LSTM分别为上下文context和查询query生成上下文嵌入embedding,即Contextual Embedding,这样就得到BiDAF的embedding层。
2)attention 双向注意流
idea:attention应该双向流动,从上下文到问题,从问题到上下文。
- 首先计算每一对的相似度分数,即令相似矩阵(的维度为6H):
- Context-to-Question (C2Q) 注意力 (哪些查询词与每个上下文词最相关),即对每一个context word,哪些query words和它最相关。通过softmax得到attention distribution(如下公式),最终是得到加权求和的每个词向量表示:
- Question-to-Context (Q2C) 注意力(上下文中最重要的单词相对于查询的加权和——通过max略有不对称),即对于query来说,哪些context words和它最相关。
- 通过max取得上下文中的每个单词对于问题的相关度
- 其中:
3)Modeling and output layers
- Modeling layer:
- attention层是query和context的交互层;
- modeling层是context words之间的交互层。
- Output layer(两个分类器预测答案的起始点和终点位置):
4)BiDAF在SQuAD数据集上的表现
在SQuAD v1.1数据集上的F1值为77.3:
- 如果没有context-to-query attention,则F1值为67.7;
- 如果没有query-to-context attention,则F1值为73.7;
- 如果没有character embeddings,则F1值为75.4。
(4)BERT应用在阅读理解上
BERT用在来阅读理解时,最朴素的做法就是,将一个样本的passage和Question作为两个原始的segment用【sep】拼接起来作为BERT的输入
- BERT是一种深度双向transformer的编码器encoder部分,在大量文本上进行了预训练(维基百科+ BooksCorpus)。
- BERT在两个任务上进行预训练:
- MLM:Masked language model
- NSP:Next sentence prediction
- BERTbase版本有12 layers and 110M个参数;BERTlarge有24 layers 和 330M 的参数量。
这里BERT的作用可以理解为一个提取特征的encoder,其对于每个passage的token都生成了一个包含上下文信息以及篇章同问题之间的交互信息(具体去了解transformer,它是BERT的backbone)的向量(representation)。接下里针对QA任务构建简单的下游网络,其实就是两个预测层,分别预测该representation对应的token是答案开头或者起始的概率。训练目标:将起始位置和终止位置的交叉熵损失平均,得到模型最终的总损失。
(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。
- 掩蔽连续的单词跨度,而不是15%的随机单词
- 利用span的两个端点预测中间的所有掩码词=将span的信息压缩到它的两个端点
(7)存在的问题
我们的模型在SQuAD上的表现已经超过人类的水平,但不代表其已经具有阅读理解能力了。当前系统在对抗性示例或领域外分布的示例上仍然表现不佳,模型很容易被其他候选项迷惑。下图的栗子源自《Adversarial Examples for Evaluating Reading Comprehension Systems》,是文本对抗领域的开山之作,
论文地址:https://arxiv.org/pdf/1707.07328.pdf
- 黑色字体为原文本中的内容;
- 蓝色字体为根据文本内容所产生的的干扰片段(adversarial distracting sentence)。
- 在加入干扰片段后,人类可以判断出,问题所对应的答案并不会产生改变,但阅读理解模型的回答却由原来的John Elway(绿色字体)变为了Jeff Dean(红色字体)。
领域(不同数据集)间迁移能力差:
(Sen and Saffari, 2020): What do Models Learn from Question Answering Datasets?
这里提到了acl2021的best paper:《Beyond Accuracy: Behavioral Testing of NLP Models with CheckList》
这篇论文认为模型在held-out集合上的测评结果不能真正的代表这个模型的能力,因为测试集规模小并且往往和训练集有相似的分布,同时一些指标也不见得合理,并且将模型表现聚合到一个指标上,就不能很好地发现模型在哪些case上比较差进而进行针对性的改进。因此,本文提出了一套基于软件工程领域的“黑箱测试”理论的模型评估套件——checklist 。更多的内容可以参看论文,这里只截取danqi课程相关的内容,即checklist针对BERT-large(在SQuAD上微调)的测试结果:
从这里可以看出来,虽然bert在SQuAD上的表现超过了人类表现,但是却经不起checklist的检验,主要体现在双重否定,属性、人和物品之间的比较级,指代分辨,主客体区分上。可见QA问题远远没有被解决。
三、Open-domain (textual) question answering
开放域文本问答,与阅读理解不同,Open-domain (textual) QA并不会基于给定的文章给出答案,而是从大规模的知识库或者文本集合(如维基百科等)中返回答案。
DrQA是一个开放域问答系统。陈丹琦在Facebook时发表了《Reading Wikipedia to Answer Open-Domain Questions(阅读维基百科来回答开放域问题)》,DrQA即要完成大规模阅读MRS,在一个非常庞大的非结构化文档语料库中寻找问题的答案。最大的挑战就是文档检索与文本的机器理解如何更好的结合。论文中结合了基于二元语法哈希(bigram hashing)和TF-IDF匹配的搜索组件,以及一个训练用来在维基百科段落中寻找答案的RNN模型。
3.1 Retriever-reader framework
将问题分解为两阶段,首先检索出最相关的passage,然后转化为一个阅读理解问题。这里danqi很快地过了两篇论文:
Lee et al., 2019. Latent Retrieval for Weakly Supervised Open Domain Question Answering
- 输入和输出:
- Input: a large collection of documentsand
- Output: an answer string
- 模型的两个部件:
- Retriever:
- Reader:
- 在陈丹琦的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:
Karpukhin et al., 2020. Dense Passage Retrieval for Open-Domain Question Answering
小结:这两个区别简单来说就是,前者需要question和passage联合输入模型,这样经过排列组合后,模型的计算量就大大增加了。后者直接将question和passage编码为固定向量,然后直接计算相似度,减少了复杂度。这样训练出来的Retriever比传统的 IR 检索模型强很多。
PS:传统的 IR 信息检索模型介绍:博客。
3.2 Dense retrieval + generative models
之前提到的都是从已有的文本中抽取答案,随着研究的进展,生成式问答出现了。这篇论文提出,先通过检索找到和问题强相关的上下文,然后将其输入给seq2seq模型,训练模型直接生成正确答案。
Izacard and Grave 2020. Leveraging Passage Retrieval with Generative Models for Open Domain Question Answering
最近的研究工作表明,生成答案代替抽取答案会更好。
随着预训练的发展,人们发现一些“巨无霸”模型(如T5模型)甚至不需要上下文信息,只需要给其输入问题,它就能从自身参数保存的知识中寻找到正确答案。
Roberts et al., 2020. How Much Knowledge Can You Pack Into the Parameters of a Language Model?
- 谷歌提出的T5和之前模型不同,是将不同形式的任务统一转化为条件式生成任务;
- 使用同套模型参数完成不同的条件式生成任务有2个关键因素:
- 要给模型注入任务信息(这也是迁移学习常用的方法),T5则是使用自然语言描述 or 简短提示(Prompt)作为输入文本的前缀表示目标任务,如对于英语到汉语的机器翻译,可以在输入文本的头部加上“translate English to German”;
- 模型的容量:transformer层数、注意力头的数目和隐含层向量的维度等都会影响。
3.3 不需要 reader 模型
这篇论文直接将知识库切分为phrases(60 billion),然后encoding,再将question进行encoding,最后进行phrase vector和question vector之间的相似度评估(近邻搜索),返回最相似的phrase作为答案。这种做法的效果竟然也很好。
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
(5)基于维基百科的开放域问题问答系统DrQA (6)https://www.zhihu.com/people/xiao-guo-zhen-60
(7)b站课程视频:https://www.bilibili.com/video/BV18Y411p79k?p=11
(8)论文笔记 | Adversarial Examples for Evaluating Reading Comprehension Systems (9)知识库问答KB-QA——非结构化知识篇 (10)squad数据集:https://rajpurkar.github.io/SQuAD-explorer/