机器阅读理解学习笔记

1 机器阅读理解概述

1.1 简介

机器阅读理解(Machine reading comprehension,MRC)是一种利用算法使计算机理解文章语义并回答相关问题的技术。

近几年研究趋势如下:

1.2 任务

机器阅读理解可以分为以下几种常见任务:

1)完形填空(Cloze Tests)

从原文中删除部分字词,要求模型使用正确的字词进行填空。

2)多项选择(Multiple Choice)

给定文档、问题、候选答案列表,要求模型从候选答案列表中选择正确的答案。

3)片段抽取(Span Extraction)

给定文档、问题,答案是给定文档中的一个片段,要求模型标识出答案的正确开始和结束位置。

4)自由回答(Free Answering)

给定文档、问题,要求模型自动生成相应的答案。 

各种任务的对比如下:

1.3 数据集

1)完形填空(Cloze Tests)

  • CNN & Daily Mail
  • CBT
  • LAMBADA
  • Who-did-What
  • CLOTH
  • CliCR

2)多项选择(Multiple Choice)

  • MCTest
  • RACE

3)片段抽取(Span Extraction)

  • SQuAD
  • NewsQA
  • TriviaQA
  • DuoRC

4)自由回答(Free Answering)

  • bAbI
  • MS MARCO
  • SearchQA
  • NarrativeQA
  • DuReader

1.4 评价标准

对于不同类型的任务,有不同的评价指标。

  • 针对完形填空(Cloze Tests)和多项选择(Multiple Choice)任务,通常使用准确性(Accuracy)。
  • 针对片段抽取(Span Extraction)任务,通常使用精确匹配(EM)F1值。
  • 针对自由回答(Free Answering)任务,通常使用ROUGE-L和BLEU。

相关计算方式如下:

1.5 典型方法架构

典型的基于深度学习的机器阅读理解模型,以文档和问题为输入,以答案为输出。通常包含以下四个模块:

  • Embeddings:将单词映射为对应的词向量,可能还会加上POS、NER等信息;
  • Feature Extraction:分别提取文档和问题的上下文特征,通常使用CNN、RNN等模型;
  • Context-Question Interaction:提取文档和问题间的交互特征,通常使用attention机制。
  • Answer Prediction:针对不同的任务使用对应的方式生成答案。

2 论文笔记

2.1 片段抽取(Span Extraction)

================================================================================================

ICLR 2017:MACHINE COMPREHENSION USING MATCH-LSTM AND ANSWER POINTER

================================================================================================

概述

最近提出的SQuAD数据集提供了一种机器阅读理解的新形式,答案是来自文档的一个片段,而不是一个单词或者预先设置好的选项。本文针对这种形式提出了不依赖手工特征的,基于Match-LSTM和Pointer Net的端到端神经网络模型。根据解码方式的不同,本文提出的模型又可以分为序列模型和边界模型两种。

模型架构

设文档为,问题为,其中d是词向量的维度,P和Q分别是文档和问题的长度。对于序列模型,答案为,对于边界模型,答案为,其中是1到P之间的整数,表示答案中的词在文档中的位置。全部的训练表示为

模型由三部分组成:LSTM Preprocessing Layer、Match-LSTM Layer、Answer Pointer Layer

1)LSTM Preprocessing Layer

使用一个单向的LSTM,分别对文档和问题进行编码,得到本层输出:

,其中

2)Match-LSTM Layer

对于文档中的每一个位置,计算其对于问题中每个单词的注意力:

​​其中:

  • 表示问题中的第个词对于问题中的个词的的匹配度;
  •  是为了维度匹配进行的广播操作;

文档中位置的词与问题信息融合后的交互表示为:

然后把输入到一个单向的LSTM,得到:

类似的,从反向使用同样的方式,得到反向的交互表示:

最后把两个方向的结果进行拼接,得到本层的输出:

其中

3)Answer Pointer Layer

本文提出两种解码方式,分别称为序列模型和边界模型。序列模型一个接一个的预测答案中的词,预测的答案可以不是文档中连续的片段。边界模型预测答案在文档中的开始和结束位置,保证是文档中的连续片段。

实验表明,边界模型效果更好。

3.1)序列模型

序列模型的输出为,表示每个词在文档中的位置。由于需要一个结束的信号,所以的范围设置为1到P+1,其中P+1代表解码结束。

首先使用注意力机制,对于文档中的每一个位置计算分数:

其中:

  • 表示从文档中选择第j个单词作为答案中第k个词的概率;
  • 表示与0拼接的结果;
  • 是为了维度匹配进行的广播操作;

最后得到答案为:

损失函数为:

3.1)边界模型

和序列类似,不过只预测开始和结束两个位置,最后得到答案为:

后续实验中,对边界模型进行了扩展测试,比如限制答案的跨度小于15个单词,并且使用全局搜索代替贪心算法计算

实验结果

================================================================================================

ICLR 2017:BI-DIRECTIONAL ATTENTION FLOW FOR MACHINE COMPREHENSION

================================================================================================

概述

本文指出,之前的模型存在几个特点:1)注意力权重仅用于从文档中相关信息,把文档表示为一个固定大小的向量;2)当前时间步的注意力权重受前一个时间步的输出影响;3)通常是单向的,只有文档对问题的注意力。

本文提出双向注意力流网络( Bi-Directional Attention Flow Network、BIDAF),在不同粒度上分层的对文档进行多阶段的建模表示,从以下几个方面对之前注意力模型进行改进:1)注意力权重用于为文档中的每个时间歩分别从之前的层中提取信息,而不是把文档表示为一个固定大小的向量。2)每个时间歩的注意力权重分别计算,不依赖于上一个时间歩的输出;3)使用了两个方向的注意力,即问题对文档和文档对问题。

模型架构

设输入问题为,文档为。模型包含以下几层:

1)Character Embedding Layer

把词中的每个字转换成字向量,然后对每个词的所有字向量使用CNN提取特征,最后使用max pooling得到每个词的字向量表示。

2)Word Embedding Layer

把词转换成词向量,然后把词向量和字向量拼接,输入到一个Highway Network,分别得到问题和文档的输入层向量

Highway Network的计算方式如下:

3)Contextual Embedding Layer

使用双向LSTM分别对问题和文档提取上下文信息,得到本层输出

4)Attention Flow Layer

本层用于融合问题和文档的信息,本层分别两个方向的注意力信息:问题对文档和文档对问题。

首先计算一个相关度矩阵,其中表示文档中的第个词和问题中的第j个词的相关度。计算方式如下:

问题对文档注意力(Query-to-context Attention,Q2C)表示问题中的每个词对于文档中得每个词的关注程度,计算方式为。 后续计算中,文档中词的融合问题向量表示为

文档对问题注意力(Context-to-query Attention,C2Q)表示文档中的每个词对于问题中得每个词的关注程度,表示为,计算方式为。后续计算中,文档中词的问题向量表示为

最后,把上一层的输出,和本层的Q2C、C2Q两个向量拼接,得到文档中每个词的问题感知的上下文表示(query-aware representation):

5)Modeling Layer

对于上一层的输出,使用两层的双向LSTM提取特征,得到最终的上下文表示

6)Output Layer

本层对于不同的任务,可以选择不同的形式,对于阅读理解,需要预测答案在文档中的开始和结束位置。

开始位置的计算方式为:

对于结束位置,首先把输入到另外一个LSTM,得到,然后计算方式和开始位置一样:

损失函数为:

实验结果

1)阅读理解

2)原型填空

================================================================================================

ACL 2017:Gated Self-Matching Networks for Reading Comprehension and Question Answering

================================================================================================

概述

本文提出了一种适用于阅读理解的门控自匹配网络(gated self-matching network)。模型在基于注意力的RNN中增加了一个额外的门,根据问题和文档中不同部分的相关性分配相应的注意力分数。同时,自匹配机制(self-matching)可以有效地从整篇文档中提取答案相关信息。

模型架构

模型包含四部分:1)使用RNN分别提取问题和文档的特征表示;2)通过门控匹配层(gated matching layer)匹配问题和文档的交互表示;3)通过自匹配层(self-matching layer)聚合文档特征信息;4)使用指针网络(pointer network)预测的答案边界。

1)问题、文档编码层

设输入问题为,文档为。首先把输入的词转换词向量和字向量表示,其中字向量使用双向RNN对词中的每个字进行编码,然后取RNN的最后的隐藏状态作为整个词的字向量表示。

然后使用另一个双向RNN分别对问题和文档提取特征:

2)问题、文档交互层

本层使用基于门控注意力的循环神经网络(Gated Attention-based Recurrent Networks),将问题信息融入文档的表示当中。对于文档每个位置的,融合问题信息的特征表示为:

其中:

3)自匹配层

对问题感知的段落表示( question-aware passage representation)使用自注意力,提取上下文特征:

其中:

4)输出层

使用指针网络预测答案的开始和结束位置:

其中:

预测答案的开始位置时,初始隐藏状态使用基于注意力的问题特征表示:

实验结果

特征分析

================================================================================================

ICLR 2018:QANET: COMBINING LOCAL CONVOLUTION WITH GLOBAL SELF-ATTENTION FOR READING COMPREHENSION

================================================================================================

概述

当前的问答模型主要基于RNN,速度相对较慢。本文提出的模型基于CNN和自注意力机制,分别用于提取局部和全局信息,模型训练速度可以达到3到13倍、推理速度可以达到4到9倍的提升。

得益于速度的提升,模型可以使用更多的数据进行训练。本文提出一种数据增强的方法,通过将原始句子从英语翻译成另一种语言,然后再翻译成英语,这不仅增加了训练数据的数量,而且使句子表述更加多样化。

模型架构

设文档为,问题为,答案为

模型由五部分组成:embedding layer、 embedding encoder layer、context-query attention layer、model encoder layer、 output layer

1)Input Embedding Layer

每个词由词向量和字向量两部分组成。

词向量使用GloVe预训练得到,后续训练过程中固定,不参与模型训练。

字向量通过以下方式得到:首先把词中的每个字转换成字向量,把所有字的字向量进行拼接,然后截断或者扩展到固定长度,然后使用最大池化,得到固定长度的字向量。字向量随机初始化,参与模型训练。

然后把拼接,得到。把拼接后的结果输入到一个Highway Network,计算方式如下:

最终每个词的输入向量表示为。 

2) Embedding Encoder Layer

本文提出使用编码块,编码块的结构为【卷积层xN+自注意力层+全连接层】,其中卷积层使用深度可分离卷积(depthwise separable convolutions),自注意力层使用多头注意力(multi-head attention)。每一层之间都会使用layernorm和残差连接。编码块第一层卷积前使用positional encoding加入位置信息。

本层由一个编码块组成,其中卷积层数量为4。

3)Context-Query Attention Layer

首先计算文档和问题中每个词的相关性,得到相关矩阵。其中相关性的计算方式为:

中每一行使用softmax进行归一化(计算问题中每个词对于文档中某个词的重要性)得到。然后把归一化后的矩阵和问题矩阵相乘,得到文档对问题注意力(context-to-query attention)信息

中的每一列使用softmax进行归一化(计算文档中每个词对于问题中某个词的重要性)得到 ,问题对文档注意力(query-to-context attention)信息计算方式为

4)Model Encoder Layer

本层由7个编码块组成,其中每个编码块中的卷积层数量为2,每个位置的输入为。其中每隔3个编码块间共享权重。

5)Output layer

本层预测答案的开始和结束位置,计算方式为:

其中分别表示从下到上的编码块的输出。

损失函数为:

数据增强

本文利用机器翻译技术,使用英语转法语、法语转英语两个模型,对原始数据进行转译,实现数据增强。

首先把原始数据输入到英语转法语模型,使用beam search进行解码,得到k个法语句子。然后再把k个候选分别输入到法语转英语模型,使用beam search进行解码,得到k个英语句子。操作完成后,原来的一个英语句子,可以得到种表达。

实验结果

1)SQuAD

2)TriviaQA

特征分析

================================================================================================

ACL 2018:Stochastic Answer Networks for Machine Reading Comprehension

================================================================================================

概述

本文提出了一种随机回答网络(stochastic answer network)模拟机器阅读理解中的多步推理过程,模型在训练过程中在答案预测层使用了一种随机预测dropout策略。实验证明这种简单的技巧可以提高模型的健壮性。

模型在训练期间固定推理的次数,然后随机dropout部分推理的结果。在推理时,对所有推理的结果取均值,生成最后的答案。

模型架构

设问题为,文档为,答案为

1)Lexicon Encoding Layer

首先把问题和文档中的每个词转换为词向量。

对于文档中的词,除了词向量之外,模型还加入了以下几种特征向量:

  • 9维的词性标注向量(POS tagging embedding)
  • 8维的命名实体标签向量(named-entity recognizer embedding)
  • 3维的文档、问题中的词的匹配向量(binary exact match feature):
  • 280维的问题增强的文档词向量(Question enhanced passages word embeddings):

最终问题中每个词的特征向量为300维, 文档中每个词的特征向量为600维。

为了保证本层的输出向量的维度统一,针对上述两个向量,分别使用两个全连接神经网络进行编码:

最后得到问题和文档的编码向量

2)Contextual Encoding Layer

在上一层的输出的基础上,为每一个词拼接一个使用德英翻译数据预训练得到的词向量。然后使用一个2层的BiLSTM分别对问题和文档进行编码,最后把2层的输出进行拼接,得到本层输出

3)Memory Generation Layer

首先对于问题和文档中的每个词计算相关度,得到相关度矩阵:

其中经过单层全连接神经网络得到

对于文档中的每个词,把上下文特征和对应的问题感知特征进行拼接:

然后使用自注意力机制提取文档间每个词的相关度:

最后,通过一个BiLSTM提取文档中词的特征表示:

4)Answer module

设最终的推理步数为T,本层使用一个GRU编码存储信息,存储信息的计算方式为:

对于每个时间歩,答案的开始和结束位置计算方式为:

对多个时间歩的结果取平均,得到最后的结果:

训练过程中,会随机丢弃部分时间歩的结果,如

实验结果

 

 

 

特征分析

================================================================================================

ACL 2018:Simple and Effective Multi-Paragraph Reading Comprehension

================================================================================================

概述

本文研究使用整个文档作为输入的阅读理解方法。在训练阶段,从文档中选取多个段落作为样本输入,然后利用shared-normalization对多个段落的输出进行归一化,使模型产生全局正确的输出。

本文首先提出基于pipelined的方法。然后,介绍可用于计算每个段落置信度分数的训练模型方法,并展示如何将这种方法与多段落选择结合,进一步提高性能。

模型架构

1)基于pipelined的方法

首先使用TF-IDF选择相应的段落,然后使用阅读理解模型处理。为了处理由远监督学习产生的噪声,本文使用summed objective function。 

在计算IDF时,仅计算相关文档中的段落数,而不是整个语料库,这样可以提升效果。

对于噪声数据问题,使用summed objective function,它对所有answer span的概率之和进行优化。

 

 其中A是所有answer span的起始位置,n是文档中的所有字符,是模型的输出。

 本文的阅读理解模型由以下几层构成:

Embedding:由word embedding和character embedding组成。使用CNN+Max Pool提取character embedding特征,然后和word embedding拼接。

Pre-Process:使用共享的bi-directional GRU对问题和段落分别进行编码。

Attention:使用bi-directional attention机制得到段落的query-aware context representation。设分别为段落和问题上一步的输出,计算段落和问题的双向注意力分数:

 

 把结果进行拼接:,输入到一个ReLU层,得到本层输出。

Self-Attention:把上阶段的输出依次输入bi-directional GRU、self-Attention、带ReLU的全连接层。然后和上阶段的输出相加,得到本阶段输出。

Prediction:使用bidirectional GRU层和全连接层,计算答案开始位置分数。然后把各个字符开始位置的分数,和上一阶段的输出进行拼接,再次输入bidirectional GRU层和全连接层,得到答案的结束位置。然后使用softmax获取最终的输出。

Dropout:对所有的GRUs、word embeddings、attention的输入做Dropout处理。

2)基于段落置信度分数的方法

之前的方法没有对不包含答案的段落产生低置信度分数,并且训练目标也不要求段落之间的置信度分数进行对比,所以容易受没有包含答案的段落影响。

本文通过从文档中对段落进行取样(包括不包含答案的段落),然后使用shared-normalization进行训练,这样可以让模型生成全局正确的输出。在上述模型的基础上,通过对softmax前的分数使用un-normalized和un-exponentiated的方法,使该模型可以适应于多个段落的比较。

本文使用四种方法对模型进行训练,并对比结果。

Shared-Normalization:首先分别对所有段落进行计算,然后对所有段落的输出进行归一化,并输入到softmax,得到最终的答案位置。

Merge:把所有段落进行拼接,计算答案位置。段落间添加分隔符。

No-Answer Option:除了答案开始和结束位置,另外计算一个no-answer的分数。首先把答案的开始和结束位置的损失函数进行重新表示:

 然后把两类分数组合,得到最终的损失函数:

Sigmoid:使用Sigmoid计算每个字符分别属于开始和结束位置的概率。

实验结果

1)基于pipelined的方法

2)基于段落置信度分数的方法

     

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值