目录
参考 机器阅读理解打破人类记录,解读阿里iDST SLQA技术
SQuAD 数据集是行业内公认的机器阅读理解标准水平测试,也是该领域顶级赛事,被誉为机器阅读理解界的 ImageNet(图像识别领域的顶级赛事)。
SQuAD 是由 Rajpurkar 等人[1]提出的一个最新的阅读理解数据集。该数据集包含 10 万个(问题,原文,答案)三元组,原文来自于 536 篇维基百科文章,而问题和答案的构建主要是通过众包的方式,让标注人员提出最多 5 个基于文章内容的问题并提供正确答案,且答案出现在原文中。SQuAD 和之前的完形填空类阅读理解数据集如 CNN/DM[2],CBT[3]等最大的区别在于:SQuAD 中的答案不在是单个实体或单词,而可能是一段短语,这使得其答案更难预测。SQuAD 包含公开的训练集和开发集,以及一个隐藏的测试集,其采用了与 ImageNet 类似的封闭评测的方式,研究人员需提交算法到一个开放平台,并由 SQuAD 官方人员进行测试并公布结果。
机器阅读理解的评测维度分为 EM(Exact Match,精准匹配分数)和 F1(精确率和召回率的平均,模糊匹配分数)。
本次阿里巴巴参与测评的系统名为 SLQA,Semantic Learning for Question Answering,是 iDST NLP 团队提出的「基于分层融合注意力机制」的深度神经网络系统。评测证明,相比传统方法,SLQA 的效果取得了显著的提升。
采用传统方法解决机器阅读理解问题,一般会将该过程分为以下几个步骤:
在此过程中,基础语言模型、依存分析等模块的准确率在一定程度上会影响训练效果,特征工程的优劣也同样左右着是否能训练得到可用的模型。
人类在进行阅读理解时,常见思维顺序如下:
因此,构建模型的主要思想是在捕捉问题和文章中特定区域关联的同时,借助分层策略,逐步集中注意力,使答案边界清晰。
同时,为了避免过于关注细节,采用融合方式将全局信息加入注意力机制,进行适度纠正,确保关注点正确。这种逐步聚焦并兼顾全局的方式与其他参赛者已经公布的的做法不太相同,也是团队此次刷榜登顶的关键所在。
目前业界主流的基于 End2End 学习的机器阅读理解模型主要为Encode-Interaction-Pointer框架。
SLQA 系统包含如下基本结构:Encoder Layer(文本表征),Attention Layer(注意力机制),Match Layer(问题篇章匹配)以及 Output Layer(答案预测)。
重点探索和研究的Layer是第三层(Hierarchical Attention Fusion Network)。
由于 SQuAD 的答案限定于来自原文,模型只需要判断原文中哪些词是答案即可,因此是一种抽取式的 QA 任务而不是生成式任务。
几乎所有做 SQuAD 的模型都可以概括为同一种框架:Embed 层,Encode 层,Interaction 层和 Answer 层。
Match-LSTM 的 Answer 层包含了两种预测答案的模式,分别为 Sequence Model 和 Boundary Model。
主要步骤如下:
相比于之前工作,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 来预测答案开始和结束位置。
代码:https://github.com/allenai/bi-att-flow
DCN 最大的特点在于 Answer 层,其 Answer 层使用了一种多轮迭代 pointing 机制,每轮迭代都会产生对答案开始和结束位置的预测,并基于这两个预测使用 LSTM 和 Highway Maxout Network 来更新下一轮的答案范围预测。而在 Interaction 层,DCN 使用和 BiDAF 类似的双向注意力机制计算 query-aware 的原文表示。
Multi-Perspective Matching 在 Encode 层同样使用 char, word 两个 embedding,只不过 char embedding 使用 LSTM 进行编码。在 Encode 层之前,该模型使用一个过滤操作,作用是过滤掉那些和问题相关度低的原文词。该模型最大的特点在 Interaction 层,该层针对每个原文词使用一种 multi-perspective 的匹配函数计算其和问题的匹配向量,并使用 BiLSTM 来进一步聚合这些匹配向量。匹配的形式包括每个原文词和整个问题的表示匹配,每个原文词和每个问题词匹配后进行最大池化,和每个原文词和每个问题词匹配后进行平均池化。最后在 Answer 层,基于匹配向量聚合表示使用两个前馈网络来预测答案开始和结束位置。
FastQAExt 使用了一种轻量级的架构,其 Embed 层除了 word 和 char 两种 embeeding 作为输入以外,还额外使用了两个特征:
并且这两个特征同样用在了问题词上。
在 Interaction 层,FastQAExt 使用了两种轻量级的信息 fusion 策略:
此外,在 Answer 层,FastQAExt 首先计算了一个问题的总表示,接着将 query-aware 原文表示和问题总表示共同输入两个前馈网络产生答案开始和结束位置概率。在确定答案范围时,FastQAExt 使用了 Beam-search。
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。
Ruminating Reader 是 BiDAF 的改进和扩展,它将之前的单 Interaction 层扩展为了双 Interaction 层。
【使用强化学习进行训练】
和之前介绍的 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 同样使用了双 Interaction 层架构,其第一 Interaction 层负责捕捉原文和问题之间的交互信息,而第二 Interaction 层负责捕捉原文内部各词之间的交互信息。具体来说,
在其他方面,r-net 的 Embed 层同样使用了 word 和 char 两种 embedding 以丰富输入特征。在 Answer 层,r-net 首先使用一个 attention-pooling 的问题向量作为一个 RNN 的初始状态,该 RNN 的状态和最终的原文表示共同输入一个 pointer networks 以产生答案开始概率,接着基于开始概率和原文表示产生另一个 attention-pooling 向量,该向量和 RNN 状态共同经过一次 RNN 更新后得到 RNN 的新状态,并基于新状态来预测答案结束概率。
相比于之前的工作,Mnemonic Reader 同样使用了类似于 r-net 和 Ruminating Reader 的两层 Interaction 层设计。其中第一个 Interaction 层负责捕捉原文和问题之间的交互信息,第二 Interaction 层负责捕捉原文内部的长时依赖信息。不同于 r-net 的是,r-net 使用了单向注意力+门机制来编码这些交互信息,而 Mnemonic Reader 使用了双向注意力机制来编码交互信息,因此能够捕捉更加细粒度的语义信息。
在 Answer 层,我们使用对问题敏感的表示方法,具体来说,问题表示分为两种:显式的问题类型 embedding 和隐式的问题向量表示。
进一步地,我们使用了 Memory Network[12] 的框架来预测答案范围,将问题表示作为一个可更新的记忆向量,在每次预测答案概率后将候选答案信息更新至记忆向量中。该过程可以持续多轮,因此可以根据之前预测信息来不断修正当前预测,直到产生正确的答案范围。
[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 .
参考谷歌大脑团队和 CMU 联合推出的 QANet,发表在ICLR2018:
QANet: Combining Local Convolution with Global Self-Attention for Reading Comprehension
给定一个包含 n 个单词的上下文片段 \(C={c_1,c_2,...,c_n}\)
,我们考虑包含 m 个单词的查询语句 \(Q={q_1,q_2,...,q_m}\)
,模型输出为一个包含 j 个单词的片段 C 中的答案区间 \(S={c_i,c_{i+1},...,c_{i+j}}\)
。
QANet 包含五个主要的组成部分:
仅仅使用卷积(convolution)和自注意力机制(self-attention)构建了一个神经网络,使得模型的训练速率和推断速率大大加快,并且可以并行处理输入的单词。
卷积操作可以对局部相互作用建模(捕获文本的局部结构),而使用自注意力机制则可以对全局交互进行建模(学习每对单词之间的相互作用)。据作者们介绍,这也是领域内首次将卷积和自注意力机制相结合。由于卷积层和自注意力机制都没有消耗时间的递归操作,所以作者们不仅大胆地把模型深度增加到了问答任务中史无前例的超过 130 层,同时还在训练、推理中都有数倍的速度提升。(相较于基于 RNN 的模型,训练速度提升了3-13倍,推理速度提升了 4-9 倍)
左图为包含多个编码器模块的 QANet 整体架构。
右图为基本编码器模块单元,QANet 所使用的所有编码器都是按照这个模式构建的,仅仅修改模块中卷积层的数量。(其实前两步都是 attention is all you need里有的,第三步是加上的)
区别于一般的编码器-解码器结构中使用的 Attention model(输入和输出的内容不同),self attention 机制并不是输入和输出之间的 attention 机制,而是输入内部的单词或者输出内部单词之间的 attention 机制。Self-attention即K=V=Q,在 QANet 中,作者使得原文中每一对单词的相互作用都能够被刻画出来,捕获整篇文章的内部结构。
使用 self-attention 有以下好处:
更多的知识,请移步:
使用数据增强技术对原始数据集进行了扩充,用更多数据训练了模型。
具体来说,他们把英文原文用现有的神经机器翻译器翻译成另一种语言(QANet 使用的是法语)之后再翻译回英语。这个过程相当于对样本进行了改写,这样使得训练样本的数量大大增加,句式更加丰富。