机器阅读理解-笔记

机器阅读理解-笔记

当前的机器阅读理解 (Machine Reading Comprehension) 任务,基本上是以基于文本问答的方式实现的。由于深度学习及大规模数据集的出现,使得机器阅读理解蓬勃发展。本文主要讨论机器阅读理解任务典型的数据集和模型、亟待解决的问题以及未来的发展趋势。

机器阅读理解任务可以分为:完形填空 (Cloze Test)、 跨度选取 (Span Extraction)、多项选择 (Multiple Choice)、基于对话的问答 (Conversational Question Answering)、多文本问答 (Multi-Passage Machine Reading Comprehension)、自由问答 (Free Answering)。

完形填空 (Cloze Test)

完形填空通常是删除文章中的一些单词或者实体 (entity),然后尝试将空缺单词填上,一些测试会提供候选答案。完形填空需要理解上下文并且能够使用词汇,用于测试语言熟练度 (language proficiency)。这个任务也被看做是单词的预测。

机器阅读理解-笔记

评估指标常用准确率 (accuracy):在 mm 个问题中回答对 nn 个问题,那么准确率用 nm\frac{n}{m} 表示。

CNN & Daily Mail

论文:《Teaching Machines to Read and Comprehend》

数据:DeepMind Q&A Dataset rc-data

CNN & Daily Mail据集包含了来源于美国有线电视新闻网 (CNN) 的 9300 篇文章及380k问题和来源于《每日邮报》 (Daily Mail) 的 220, 000 篇文章和879k问题。文章中的一些实体被替换为占位符,然后去预测该实体是哪个实体。 为了避免根据该数据集外的知识回答问题,所有实体都进行了匿名化处理。

数据格式:

每篇文章为一个 .question 文件,文件中包含五部分:文章来源、文章内容、包含空格 (@placeholder) 的问题、答案、实体代号对应的原始词汇,每部分为一行,行间使用空行隔开。

机器阅读理解-笔记

论文参考:陈丹琦 - A Thorough Examination of the CNN/Daily Mail Reading Comprehension Task

CLOTH

论文:《Large-scale Cloze Test Dataset Created by Teachers》

数据:CLOTH Dataset

CLOTH (CLOze test by TeacHers) 数据集来自于中国中学生的英语考试。

机器阅读理解-笔记

CMRC 2017、 CMRC 2019

跨度选取 (Span Extraction)

词汇或者实体不足以回答问题,需要使用一些完整的句子。 这类问题通常是给定上下文和问题,然后从相应上下文中提取一段文本作为问题的答案。

机器阅读理解-笔记

评估指标常用 EM (exact match) 和 F1 score。EM 是准确率的变体,是指预测的答案序列与真实答案序列完全匹配记为正确答案,由此计算所得的准确率。F1 score 是分类任务中常用的评价指标,使用混淆矩阵计算精确率和召回率,进而计算两者的调和平均值即为 F1 score。

tokens in reference tokens not in reference
tokens in candidate TP FP
tokens not in candidate FN TN

其中:true positive (TP), false positive (FP), true negative (TN) false negative (FN).

 precision =TPTP+FP recall =TPTP+FNFl=2×P×RP+R \begin{aligned} \text { precision } &=\frac{\mathrm{TP}}{\mathrm{TP}+\mathrm{FP}} \\ \text { recall } &=\frac{\mathrm{TP}}{\mathrm{TP}+\mathrm{FN}} \end{aligned} \\ \mathrm{Fl}=\frac{2 \times P \times R}{P+R}

度量了预测和真实答案之间的平均重叠度。

SQuAD

论文:SQuAD 1.0 《SQuAD: 100,000+ Questions for Machine Comprehension of Text》

SQuAD 2.0 《SQuAD: 100,000+ Questions for Machine Comprehension of Text》

数据集:SQuAD

SQuAD (Stanford Question Answering Dataset)数据集是机器阅读理解领域的里程碑式的数据集。该数据集来源于维基百科文章,对 536 篇文章整理出超过100000个问题答案对,答案不是原文的一个词,而是原文的一个连续文本片段。数据以json格式给出,只给出了训练集以及验证集,如果要获取在测试集上的效果,需要上传模型,官方会把你的模型在测试集上跑,得出结果后再反馈给你。

机器阅读理解-笔记

SQuAD 2.0 更新更多文章,其中一些问题在提供的文章中是没有答案的,也就是说根据文章,所提出的问题是无法回答的。下面是一个无法回答的问题:

机器阅读理解-笔记

处理这类问题最简单的就是设置一个阈值,如果预测的阈值小于该阈值则为无法回答。

参考模型:BiDAF Bidirectional Attention Flow for Machine Comprehension 代码

NewsQA、TriviaQA、CMRC-2018、CAIL2019

多项选择 (Multiple Choice)

多项选择 (Multiple Choice) 是根据提供的文本提问,然后选择正确的候选答案。与完形填空不同,不再局限于文本中的词汇或者实体。但是必须提供候选答案。

机器阅读理解-笔记

评估指标常用准确率.

RACE

论文:《RACE:Large-scale Reading Comprehension Dataset From Examinations》

数据:

RACE 数据集为中国中学生英语阅读理解题目,给定一篇文章和 5 道 4 选 1 的题目,包括了 28000+ 篇文章和 100,000 问题。相对CNN&Dailymail和SQuAD,RACE更注重推理能力。RACE Dataset

数据以txt格式给出,数据集的high文件夹下有20794篇文章,每篇文章有4个问题;middle文件夹下有7139篇文章,每篇文章有5个问题。训练集的high文件夹下有18728篇文章,占比90%,middle文件夹下有6409篇文章,占比90%;验证集的high文件夹下有1021篇文章,占比5%,middle文件夹下有368篇文章,占比5%;测试集的high文件夹下有1045篇文章,占比5%,middle文件夹下有362篇文章,占比5%。

机器阅读理解-笔记

SWAG

基于对话的问答 (Conversation QA)

很多时候理解一篇文章是通过一连串连续的问答进行的,也就是说有些问题是由关系的,而非孤立存在的。基于对话的问答更依赖以前的问答记录,需要更强的指代消除 (Coreference Resolution)。

机器阅读理解-笔记

CoQA

论文: CoQA: A Conversational Question Answering Challenge

数据:

CoQA包含127000多个问题和8000多个对话的答案。每段对话都是由两名工作人员以问答的形式对一篇文章进行对话收集而成。CoQA的独特之处在于:1)问题是会话性的;2)答案可以是自由格式的文本;3)每个答案后面都有一个在文中强调过的证据;4)文章来自七个不同的领域。CoQA存在许多现有阅读理解数据集中不存在的具有挑战性的现象,如共引用和语用推理。 CoQA has a lot of challenging phenomena not present in existing reading comprehension datasets, e.g., coreference and pragmatic reasoning.

机器阅读理解-笔记

QuAC

多文本问答 (Multi-Passage)

人们经常是先提出一个问题,然后在所有可能相关文章中寻找答案。而不是每个问题都有一个明确相关的段落。多文本问答面临着大量的文本、干扰文本、无答案或者多种答案,以及当面对复杂问题时需要综合多篇文章进行回答等挑战。多文档机器阅读理解论文引介

机器阅读理解-笔记

使用的方法:“retrieve then read”,首先从文章中检索多篇相关文章,然后根据多篇文章的内容以及问题做出回答。为了降低检索的错误率,一种方法是引入ranker组件,另一种方法是联合训练检索和阅读过程。

MS MARCO

论文:MS MARCO: A Human Generated MAchine Reading COmprehension Dataset

数据:MS MARCO

所有的问题都来自真实的用户查询,每个问题从必应搜索引擎中搜索10个相关文档作为上下文。这些问题的标记答案是由人类产生的,因此它们不局限于上下文的范围,需要更多的推理和总结。一个问题有多个答案,有时甚至是冲突的,这对机器选择正确的答案更具挑战性。

这个数据集是有人读完所有相关文章之后人工生成的答案,所以答案有可能是文章的某个span,也有个能是多个span,答案有可能是问题和文章的综合汇总,甚至答案都没出现在文章或者问题中。

机器阅读理解-笔记

DuReader

论文:《Dureader: a chinese machine reading comprehension dataset from real-world applications》

数据都是来自百度知道和search。其一,这里有很多passage,然后从里面找答案;其二,问题的答案不再是从文章中的span,而是人工标注的答案,当然这里还是给出文章中的fake answer,也就是文章中的相关位置。

参考:https://blog.****.net/cyberspice/article/details/82564370

HotpotQA

论文:HotpotQA: A Dataset for Diverse, Explainable Multi-hop Question Answering

数据:https://hotpotqa.github.io/

不同阅读理解任务对比分析

完形填空数据集容易构建并且容易评估 (evaluation)。但是答案仅仅是文章中一个单词或者实体,不能更好的反映机器的阅读理解水平,也很难在实际生产中应用。多项选择任务是冲多个候选答案中选取正确的答案,这样能够更好的测试机器理解能力,也能更容易评估。但是数据集很难构建,除非使用现成的如考试阅读理解,实际生产中也较难应用。跨度选取与多项选择相似,相较更容易应用于实际生产中,缺点就是答案是文本中的一个片段,与现实生产生活有很大差距。此外答案仅选取自单个短文本。自由问答任务更贴近于实际但是很难构建相应的数据集及评估标准。

模型结构

阅读理解的模型结构通常包含四个部分:Embeddings, Feature Extraction, Context-Question Interaction and Answer Prediction。如下图所示:

机器阅读理解-笔记

Embedding

Embedding 模块是阅读理解中必要的部分,用于将文本表示成固定长度的向量。通常使用预训练词向量 (Distributed Word Representation):Word2Vec 和 GloVe等和预训练上下文表示 (Pre-Trained Contextualized Word Representation):CoVE、ELMo、GPT、BERT。此外,还可以将词级别的嵌入、字符基本的嵌入、命名实体、词频及问题类型等信息综合,作为多粒度的文本表示,用于提供更丰富的语义信息。

Feature Extraction

Feature Extraction 用于提取文本及问题的特征。主要有三种基本形式:RNN、CNN和Transformer。在机器阅读理解中通常使用双向的RNN结构来提取文本特征,通常使用双向RNN每个时间步的隐藏状态的拼接作为词级别的表示,或者使用最后时间步的隐藏状态拼接作为整个句子的表示。 在CNNs中,不同尺寸的卷积核提取不同窗口大小下的局部 n-gram 特征,然后使用池化层降低维度提取特征。但是CNN无法提取长序列特征。Transformer是一种很有效的神经网络,在各种自然语言处理任务中都有很好的表现。Transformer不仅能够对齐而且可以并行。一般还是使用RNN。

Context-Question Interaction

通过提取上下文和问题之间的相关性,模型能够找到答案预测的证据。 注意机制在这方面起着至关重要的作用。

Unidirectional Attention

单向注意流通常是从查询到上下文,根据问题突出上下文中最相关的部分。 人们认为,如果语境词与问题越相似,那么它就越有可能是答案。

Bidirectional Attention

该方法从两个方向进行相互查看,可以受益于上下文和查询之间的交互,并为彼此提供补充信息。 .

One-Hop Interaction

是一种浅层架构,其中上下文和问题之间的交互只计算一次。虽然这种方法可以很好地解决简单的完形填空测试,但当问题需要在上下文中对多个句子进行推理时,这种一跳交互方法很难预测正确答案。

Multi-Hop Interaction

多跳交互要复杂得多,它试图通过对语境和问题的记忆来模仿人类的重读现象。在交互过程中,前一状态信息的有效存储与否直接影响下一交互的性能。需要修改!

Answer Prediction

根据任务的不同答案预测的方法也不同。完形填空需要选择一个词来填空,可以将 query-aware context 及问题映射到单词表上,或者直接用 query-aware context 匹配候选答案。多项选择通常是计算问题聚焦的上下文与候选答案之间的相似性。跨度提取可以看作是完形填空的扩展,对原始输入 token 的位置进行标注,预测答案的起始和终止位置。

参考

NLP-progress Question answering