阅读理解模型汇总

SQuAD阅读理解模型

SQuAD简介

SQuAD 是由 Rajpurkar 等人[1]提出的一个最新的阅读理解数据集。该数据集包含 10 万个(问题,原文,答案)三元组,原文来自于 536 篇维基百科文章,而问题和答案的构建主要是通过众包的方式,让标注人员提出最多 5 个基于文章内容的问题并提供正确答案,且答案出现在原文中。SQuAD 和之前的完形填空类阅读理解数据集如 CNN/DM[2],CBT[3]等最大的区别在于:SQuAD 中的答案不在是单个实体或单词,而可能是一段短语,这使得其答案更难预测。SQuAD 包含公开的训练集和开发集,以及一个隐藏的测试集,其采用了与 ImageNet 类似的封闭评测的方式,研究人员需提交算法到一个开放平台,并由 SQuAD 官方人员进行测试并公布结果。
在这里插入图片描述

模型

自从 SQuAD 数据集公布以来,大量具有代表性的模型纷纷涌现,极大地促进了机器阅读理解领域的发展,下面就 SQuAD 榜单上代表性的模型进行介绍。总的来说,由于 SQuAD 的答案限定于来自原文,模型只需要判断原文中哪些词是答案即可,因此是一种抽取式的 QA 任务而不是生成式任务。
几乎所有做 SQuAD 的模型都可以概括为同一种框架:
Embed 层,Encode 层,Interaction 层和 Answer 层。

Embed 层负责将原文和问题中的 tokens 映射为向量表示;
Encode 层主要使用 RNN 来对原文和问题进行编码,这样编码后每个 token 的向量表示就蕴含了上下文的语义信息;
Interaction 层是大多数研究工作聚焦的重点,该层主要负责捕捉问题和原文之间的交互关系,并输出编码了问题语义信息的原文表示,即 query-aware 的原文表示;
最后 Answer 层则基于 query-aware 的原文表示来预测答案范围。
在这里插入图片描述

Match-LSTM[4]

在这里插入图片描述
Match-LSTM 的 Answer 层包含了两种预测答案的模式,分别为 Sequence Model 和 Boundary Model。Sequence Model 将答案看做是一个整数组成的序列,每个整数表示选中的 token 在原文中的位置,因此模型按顺序产生一系列条件概率,每个条件概率表示基于上轮预测的 token 产生的下个 token 的位置概率,最后答案总概率等于所有条件概率的乘积。Boundary Model 简化了整个预测答案的过程,只预测答案开始和答案结束位置,相比于 Sequence Model 极大地缩小了搜索答案的空间,最后的实验也显示简化的 Boundary Model 相比于复杂的 Sequence Model 效果更好,因此 Boundary Model 也成为后来的模型用来预测答案范围的标配。

在模型实现上,Match-LSTM 的主要步骤如下:

  1. Embed 层使用词向量表示原文和问题;

  2. Encode 层使用单向 LSTM 编码原文和问题 embedding;

  3. Interaction 层对原文中每个词,计算其关于问题的注意力分布,并使用该注意力分布汇总问题表示,将原文该词表示和对应问题表示输入另一个 LSTM 编码,得到该词的 query-aware 表示;

  4. 在反方向重复步骤 2,获得双向 query-aware 表示;

  5. Answer 层基于双向 query-aware 表示使用 Sequence Model 或 Boundary Model 预测答案范围。

BiDAF[5]

Bidirectional Attention Flow for Machine Comprehension
在这里插入图片描述
相比于之前工作,BiDAF(Bi-Directional Attention Flow)最大的改进在于 Interaction 层中引入了双向注意力机制,即首先计算一个原文和问题的 Alignment matrix,然后基于该矩阵计算 Query2Context 和 Context2Query 两种注意力,并基于注意力计算 query-aware 的原文表示,接着使用双向 LSTM 进行语义信息的聚合。另外,其 Embed 层中混合了词级 embedding 和字符级 embedding,词级 embedding 使用预训练的词向量进行初始化,而字符级 embedding 使用 CNN 进一步编码,两种 embedding 共同经过 2 层 Highway Network 作为 Encode 层输入。最后,BiDAF 同样使用 Boundary Model 来预测答案开始和结束位置。

Dynamic Coattention Networks[6]

在这里插入图片描述
DCN 最大的特点在于 Answer 层,其 Answer 层使用了一种多轮迭代 pointing 机制,每轮迭代都会产生对答案开始和结束位置的预测,并基于这两个预测使用 LSTM 和 Highway Maxout Network 来更新下一轮的答案范围预测。而在 Interaction 层,DCN 使用和 BiDAF 类似的双向注意力机制计算 query-aware 的原文表示。

Multi-Perspective Matching[7]

在这里插入图片描述
Multi-Perspective Matching 在 Encode 层同样使用 char, word 两个 embedding,只不过 char embedding 使用 LSTM 进行编码。在 Encode 层之前,该模型使用一个过滤操作,作用是过滤掉那些和问题相关度低的原文词。该模型最大的特点在 Interaction 层,该层针对每个原文词使用一种 multi-perspective 的匹配函数计算其和问题的匹配向量,并使用 BiLSTM 来进一步聚合这些匹配向量。匹配的形式包括每个原文词和整个问题的表示匹配,每个原文词和每个问题词匹配后进行最大池化,和每个原文词和每个问题词匹配后进行平均池化。最后在 Answer 层,基于匹配向量聚合表示使用两个前馈网络来预测答案开始和结束位置。

FastQAExt[8]

在这里插入图片描述
FastQAExt 使用了一种轻量级的架构,其 Embed 层除了 word 和 char 两种 embeeding 作为输入以外,还额外使用了两个特征:1. binary 特征表示原文词是否出现在问题中;2. weighted 特征表示原文词对于问题中所有词的相似度。并且这两个特征同样用在了问题词上。在 Interaction 层,FastQAExt 使用了两种轻量级的信息 fusion 策略:1. Intra-Fusion,即每个原文词和其他原文词计算相似度,并汇总得到原文总表示,接着将该原文词和对应原文总表示输入 Highway Networks 进行聚合,聚合后原文词表示进一步和上下文词表示进行类似的聚合;2. Inter-Fusion,即对每个原文词计算和问题词的相似度,并汇总得到问题总表示,接着将将该原文词和对应问题总表示输入 Highway Networks 进行聚合,得到 query-aware 原文表示。此外,在 Answer 层,FastQAExt 首先计算了一个问题的总表示,接着将 query-aware 原文表示和问题总表示共同输入两个前馈网络产生答案开始和结束位置概率。在确定答案范围时,FastQAExt 使用了 Beam-search。

jNet[9]

在这里插入图片描述
jNet 的 baseline 模型和 BiDAF 类似,其在 Interaction 层除了对每个原文词计算一个对应的问题表示以外,还将 Alignment Matrix 按原文所在维度进行池化(最大池化和平均池化),池化后的值表示原文各词的重要程度,因此基于该值对原文表示进行过滤,剔除不重要的原文词。在 Answer 层,jNet 不仅先预测答案开始位置再预测答案结束位置,还反向地先预测答案结束位置再预测答案开始位置。最后对两方向概率求平均后作为总概率输出。

jNet 的最大创新在于对问题的理解和适应。为了在编码问题表示时考虑句法信息,jNet 使用 TreeLSTM 对问题进行编码,并将编码后表示作为 Interaction 层的输入。为了对不同问题进行适应,jNet 首先使用了问题类型的 embedding,将该 embeeding 作为 Interaction 层输入。另外,jNet 定义了 K 个 cluster 的中心向量,每个 cluster model 了一个特定的问题类型比如"when","where"等,接下来的适应算法分为两步:adapting 和 updating。Adapting 指根据问题总表示和 K 个 cluster 的相似度来更新出一个新的问题表示,并输入 Interaction 层;Updating 层旨在修改 K 个 cluster 的中心以令每个 cluster 可以 model 不同类型的问题。

Ruminating Reader[10]

在这里插入图片描述
Ruminating Reader 是 BiDAF 的改进和扩展,它将之前的单 Interaction 层扩展为了双 Interaction 层。第一个 Interaction 层和 BiDAF 的 Interaction 层相同,输出 query-aware 的原文表示。query-aware 原文表示经过一个双向 LSTM 编码,其输出的最后一位隐层状态作为 query-aware 原文表示的总结。接着,该总结向量依次与各原文词表示和各问题词表示经过一个 Highway Network 处理,以将总结向量的信息重新融入原文和问题表示当中。最后,基于更新后的原文和问题表示,使用第二个 Interaction 层来捕捉它们之间的交互,并生成新的 query-aware 的原文表示。Ruminating Reader 的 Embed 层,Encode 层和 Answer 层和 BiDAF 相同。

ReasoNet[11]

在这里插入图片描述
和之前介绍的 Embed-Encode-Interaction-Answer 框架不同,ReasoNet 使用了 Memory Networks 的框架[12]。在使用 BiRNN 编码问题和原文后,问题的最后一位隐层状态初始化为一个中间状态 s,而原文和问题表示作为 Memory。接下来是一个多轮迭代的过程,在每一轮迭代中,中间状态 s 首先经过一个逻辑回归函数来输出一个 binary random variable t,t 为真,那么 ReasoNet 停止,并且用当前中间状态 s 输出到 Answer 模块产生对答案的预测;否则,中间状态 s 会和 Memory(原文和问题)中每一位表示计算注意力,并基于注意力求原文和问题的加权表示 x,x 和 s 共同作为一个 RNN 的输入,产生新的中间状态 s 并进入下一轮迭代。由于出现了 binary random variable,ReasoNet 使用了强化学习的方法进行训练。

r-net[13]

在这里插入图片描述
r-net 同样使用了双 Interaction 层架构,其第一 Interaction 层负责捕捉原文和问题之间的交互信息,而第二 Interaction 层负责捕捉原文内部各词之间的交互信息。具体来说,在第一 Interaction 层,r-net 首先使用了类似于 Match-LSTM 的方法,即对原文中每个词,计算其关于问题的注意力分布,并使用该注意力分布汇总问题表示,将原文该词表示和对应问题表示输入 RNN 编码,得到该词的 query-aware 表示。不同的是,在原文词表示和对应问题表示输入 RNN 之前,r-net 使用了一个额外的门来过滤不重要的信息。接着,在第二 Interaction 层,r-net 使用了同样的策略来将 query-aware 表示进一步和自身进行匹配,将回答答案所需的证据和问题信息进行语义上的融合,得到最终的原文表示。

在其他方面,r-net 的 Embed 层同样使用了 word 和 char 两种 embedding 以丰富输入特征。在 Answer 层,r-net 首先使用一个 attention-pooling 的问题向量作为一个 RNN 的初始状态,该 RNN 的状态和最终的原文表示共同输入一个 pointer networks 以产生答案开始概率,接着基于开始概率和原文表示产生另一个 attention-pooling 向量,该向量和 RNN 状态共同经过一次 RNN 更新后得到 RNN 的新状态,并基于新状态来预测答案结束概率。

Mnemonic Reader[14]

在这里插入图片描述
相比于之前的工作,我们的 Mnemonic Reader 同样使用了类似于 r-net 和 Ruminating Reader 的两层 Interaction 层设计。其中第一个 Interaction 层负责捕捉原文和问题之间的交互信息,第二 Interaction 层负责捕捉原文内部的长时依赖信息。不同于 r-net 的是,r-net 使用了单向注意力+门机制来编码这些交互信息,而 Mnemonic Reader 使用了双向注意力机制来编码交互信息,因此能够捕捉更加细粒度的语义信息。在 Answer 层,我们使用对问题敏感的表示方法,具体来说,问题表示分为两种:显式的问题类型 embedding 和隐式的问题向量表示。进一步地,我们使用了 Memory Network[12] 的框架来预测答案范围,将问题表示作为一个可更新的记忆向量,在每次预测答案概率后将候选答案信息更新至记忆向量中。该过程可以持续多轮,因此可以根据之前预测信息来不断修正当前预测,直到产生正确的答案范围。

性能对比

下图是 SQuAD 榜单排名,其中 EM 表示预测答案和真实答案完全匹配,而 F1 用来评测模型的整体性能。可以看到,目前 r-net, ReasoNet 和 Mnemonic Reader 分列 SQuAD 榜单的前三名,但是 ReasoNet 和 Mnemonic Reader 距离第一名 r-net 还是存在一定的差距。值得一提的是,人类在 SQuAD 数据集上的性能分别为 82.3 和 91.2,因此目前最 state-of-the-art 的方法也远未达到人类的水平,让计算机具备人类的阅读理解能力的道路依然漫长。
在这里插入图片描述

总结

总结以上工作,有以下几点思考:

  1. 大规模语料集的构建是推进机器阅读理解发展的重要前提。从 15 年提出的 CNN/DM 完形填空数据集,到近期的 SQuAD 数据集,再到之后的若干新数据集,每一个新数据集都提出了当前方法无法有效解决的新问题,从而促使研究人员不断探索新的模型,促进了该领域的发展。

  2. 针对抽取式阅读理解任务,可以看到有如下几个技术创新点:一. 建立在单向或双向注意力机制上的 Interaction 层对于模型理解原文和问题至关重要,而[10],[13]和[14]中更复杂的双 Interaction 层设计无疑要优于之前的单 Interaction 层设计,原因是在问题-原文交互层之上的原文自交互层使得更多的语义信息能在原文中流动,因此在某种程度上部分解决了长文本中存在的长时依赖问题。二. 多轮推理机制如[6],[11]和[14]对于回答复杂问题具备一定帮助,尤其是针对 SQuAD 中的答案不是一个单词而可能是一个短语的情况,多轮推理机制可以不断缩小预测范围,最终确定正确答案位置。三. 对问题敏感的问题表示方法[9],[14]能够更好地 model 各类型问题,并根据问题类型聚焦于原文中的特定单词,比如 when 类问题更加聚焦于原文中的时间信息,而 where 类问题更关注空间信息。

参考文献

[1] Pranav Rajpurkar, Jian Zhang, Konstantin Lopyrev, and Percy Liang. 2016. Squad: 100,000+ questions for machine comprehension of text. In Proceedings of EMNLP.

[2] Karl Moritz Hermann, Tomas Kocisky, Edward Grefenstette, Lasse Espeholt, Will Kay, Mustafa Suleyman, , and Phil Blunsom. 2015. Teaching ma- chines to read and comprehend. In Proceedings of NIPS.

[3] Felix Hill, Antoine Bordes, Sumit Chopra, and Jason Weston. 2016. The goldilocks principle: Reading childrens books with explicit memory representa- tions. In Proceedings of ICLR.

[4] Shuohang Wang and Jing Jiang. 2017. Machine comprehension using match-lstm and answer pointer. In Proceedings of ICLR.

[5] Minjoon Seo, Aniruddha Kembhavi, Ali Farhadi, and Hananneh Hajishirzi. 2017. Bidirectional attention flow for machine comprehension. In Proceedings of ICLR.

[6] Caiming Xiong, Victor Zhong, and Richard Socher. 2017. Dynamic coattention networks for question answering. In Proceedings of ICLR.

[7] Zhiguo Wang, Haitao Mi, Wael Hamza, and Radu Florian. 2016. Multi-perspective context matching for machine comprehension. arXiv preprint arXiv:1612.04211 .

[8] Dirk Weissenborn, Georg Wiese, and Laura Seiffe. 2017. Fastqa: A simple and efficient neural architecture for question answering. arXiv preprint arXiv:1703.04816 .

[9] Junbei Zhang, Xiaodan Zhu, Qian Chen, Lirong Dai, Si Wei, and Hui Jiang. 2017. Exploring question understanding and adaptation in neural- network-based question answering. arXiv preprint arXiv:1703.04617 .

[10] Yichen Gong and Samuel R. Bowman. 2017. Ruminating reader: Reasoning with gated multi-hop attention. arXiv preprint arXiv:1704.07415 .

[11] Yelong Shen, Po-Sen Huang, Jianfeng Gao, and Weizhu Chen. 2016. Reasonet: Learning to stop reading in machine comprehension. arXiv preprint arXiv:1609.05284 .

[12] Sainbayar Sukhbaatar, Arthur Szlam, Jason Weston, and Rob Fergus. 2015. End-to-end memory networks. In Proceedings of NIPS.

[13] Microsoft Research Asia. 2017. R-NET: MACHINE READING COMPREHENSION WITH SELF-MATCHING NETWORKS. In Proceedings of ACL.

[14] Minghao Hu, Yuxing Peng, and Xipeng Qiu. 2017. Mnemonic Reader for Machine Comprehension. arXiv preprint arXiv:1705.02798

  • 1
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
涉及内容包括但不限于:中英文敏感词、语言检测、中外手机/电话归属地/运营商查询、名字推断性别、手机号抽取、身份证抽取、邮箱抽取、中日文人名库、中文缩写库、拆字词典、词汇情感值、停用词、反动词表、暴恐词表、繁简体转换、英文模拟中文发音、汪峰歌词生成器、职业名称词库、同义词库、反义词库、否定词库、汽车品牌词库、汽车零件词库、连续英文切割、各种中文词向量、公司名字大全、古诗词库、IT词库、财经词库、成语词库、地名词库、历史名人词库、诗词词库、医学词库、饮食词库、法律词库、汽车词库、动物词库、中文聊天语料、中文谣言数据、百度中文问答数据集、句子相似度匹配算法集合、bert资源、文本生成&摘要相关工具、cocoNLP信息抽取工具、国内电话号码正则匹配、清华大学XLORE:中英文跨语言百科知识图谱、清华大学人工智能技术系列报告、自然语言生成、NLU太难了系列、自动对联数据及机器人、用户名黑名单列表、罪名法务名词及分类模型、微信公众号语料、cs224n深度学习自然语言处理课程、中文手写汉字识别、中文自然语言处理 语料/数据集、变量命名神器、分词语料库+代码、任务型对话英文数据集、ASR 语音数据集 + 基于深度学习的中文语音识别系统、笑声检测器、Microsoft多语言数字/单位/如日期时间识别包、中华新华字典数据库及api(包括常用歇后语、成语、词语和汉字)、文档图谱自动生成、SpaCy 中文模型、Common Voice语音识别数据集新版、神经网络关系抽取、基于bert的命名实体识别、关键词(Keyphrase)抽取包pke、基于医疗领域知识图谱的问答系统、基于依存句法与语义角色标注的事件三元组抽取、依存句法分析4万句高质量标注数据、cnocr:用来做中文OCR的Python3包、中文人物关系知识图谱项目、中文nlp竞赛项目及代码汇总、中文字符数据、speech-aligner: 从“人声语音”及其“语言文本”产生音素级别时间对齐标注的工具、AmpliGraph: 知识图谱表示学习(Python)库:知识图谱概念链接预测、Scattertext 文本可视化(python)、语言/知识表示工具:BERT & ERNIE、中文对比英文自然语言处理NLP的区别综述、Synonyms中文近义词工具包、HarvestText领域自适应文本挖掘工具(新词发现-情感分析-实体链接等)、word2word:(Python)方便易用的多语言词-词对集:62种语言/3,564个多语言对、语音识别语料生成工具:从具有音频/字幕的在线视频创建自动语音识别(ASR)语料库、构建医疗实体识别的模型(包含词典和语料标注)、单文档非监督的关键词抽取、Kashgari中使用gpt-2语言模型、开源的金融投资数据提取工具、文本自动摘要库TextTeaser: 仅支持英文、人民日报语料处理工具集、一些关于自然语言的基本模型、基于14W歌曲知识库的问答尝试--功能包括歌词接龙and已知歌词找歌曲以及歌曲歌手歌词三角关系的问答、基于Siamese bilstm模型的相似句子判定模型并提供训练数据集和测试数据集、用Transformer编解码模型实现的根据Hacker News文章标题自动生成评论、用BERT进行序列标记和文本分类的模板代码、LitBank:NLP数据集——支持自然语言处理和计算人文学科任务的100部带标记英文小说语料、百度开源的基准信息抽取系统、虚假新闻数据集、Facebook: LAMA语言模型分析,提供Transformer-XL/BERT/ELMo/GPT预训练语言模型的统一访问接口、CommonsenseQA:面向常识的英文QA挑战、中文知识图谱资料、数据及工具、各大公司内部里大牛分享的技术文档 PDF 或者 PPT、自然语言生成SQL语句(英文)、中文NLP数据增强(EDA)工具、英文NLP数据增强工具 、基于医药知识图谱的智能问答系统、京东商品知识图谱、基于mongodb存储的军事领域知识图谱问答项目、基于远监督的中文关系抽取、语音情感分析、中文ULMFiT-情感分析-文本分类-语料及模型、一个拍照做题程序、世界各国大规模人名库、一个利用有趣中文语料库 qingyun 训练出来的中文聊天机器人、中文聊天机器人seqGAN、省市区镇行政区划数据带拼音标注、教育行业新闻语料库包含自动文摘功能、开放了对话机器人-知识图谱-语义理解-自然语言处理工具及数据、中文知识图谱:基于百度百科中文页面-抽取三元组信息-构建中文知识图谱、masr: 中文语音识别-提供预训练模型-高识别率、Python音频数据增广库、中文全词覆盖BERT及两份阅读理解数据、ConvLab:开源多域端到端对话系统平台、中文自然语言处理数据集、基于最新版本rasa搭建的对话系统、基于Tens
本书是我的专栏《百图解码支付系统设计与实现》系列文章汇总整理并重新修订。汇集了我十多年支付系统架构设计的经验总结,以实战为导向,深入浅出讲解支付系统的架构设计与实现,涵盖基础概念、核心流程、核心子系统设计、核心技术专题等。这些知识点以实用为目标,可直接应用到日常研发设计中。 全书共18章,分为入门篇、核心子域设计篇、技术专题篇。入门篇(第1~10章)详细讲述支付系统涉及的基本概念,概要设计,核心流程。核心子域设计篇(第4~10章)深入地剖析支付系统各核心子域的架构设计精华。技术专题篇(第11~18章)介绍了一些支付系统领域内非常实用的最佳实践,这些技术还可以应用到非支付系统设计中。 书中通过采用大量手绘风格的图示来讲解专业领域的概念和设计思路,让大家更容易阅读理解,达到“一图胜千言”的效果。虽然绘图对我而言是一大非常大的挑战,需要极强的抽象和表达能力,但我认为这种方式对于阐述支付系统的设计和实现至关重要。有时,我可能用一个小时就能撰写几千字的文章,但为了一幅能准确表达意思的图,却要花费好几个小时。 需要说明的是,所撰写的内容主要基于我个人的经验总结,并以实战为导向,但内容不会与任何特定公司的支付系统直接相关。同时,我努力使文章内容浅显易懂,但毕竟支付是一个高度专业的领域,难以涵盖所有细节。因此,建议有兴趣的读者也多参考其他优秀的书籍或资料。 本书适合初学者入门,同时书中很多设计思路对于想进一步提升架构设计能力的资深研发人员也很有参考价值,并可作为培训机构相关专业的教学参考书。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值