【EMNLP20 论文笔记】HGN:基于分层图网络的多跳阅读理解模型
Yuwei Fang, Siqi Sun, Zhe Gan, Rohit Pillai, Shuohang Wang, Jingjing Liu
Microsoft Dynamics 365 AI Research; Hierarchical Graph Network for Multi-hop Question Answering原文:https://arxiv.org/pdf/1911.03631.pdf
源码:https://github.com/yuwfan/HGN (official ** pytorch)
多跳阅读理解数据集 HotpotQA 排名第六(2021/3/29)
文章目录
- 1 introduction
- 2 Hierarchical Graph Network
- 2.1 overview
- 2.2 Graph Construction 图构造模块
- Paragraph Selection
- Nodes and Edges
- 2.3 Context Encoding 上下文编码模块
- 2.4 Graph Reasoning 图推理模块
- 2.5 Multi-task Prediction Module 多任务预测模块
- 3 Experiments
1 introduction
相较于传统的阅读理解问题,多跳阅读理解为模型提出了新的挑战。此时为了正确回答问题,需要模型同时有从多个文档,多个段落收集信息并将各个信息进行一定的逻辑整合推理的能力。看下面一个来自于多跳阅读理解问题的经典数据集 HotpotQA 的例子:
此时为了回答问题需要先通过问题中提到的 “Big Stone Gap” 找到 director(支持文档 S1),再顺次推理得到最后的答案(支持文档 S4),也就是说此时不仅限于传统的阅读理解数据集的要求,同时需要模型能够将多个文档的信息进行整合(比如 S1 和 S4 共同作用)再利用相关信息推理得到最后的答案。
存在的挑战之一为如何融合不同粒度的信息(这里中间步骤的信息可以是文章 / 段落 / 句子 / 实体)以推理得到最后的答案。某些方法采用实体图(entity graph)的方法,通过在图上进行推理以得到最后的答案。但是注意到这样的操作存在一定的问题:
- 部分模型直接选取实体图中的实体作为答案(显然不合理,答案不一定是实体)
- 部分模型将实体的表示重新放回原本文档的表示以获得答案 ans span(举例大名鼎鼎的 DFGN),但是此时只是为了得到答案而作的操作,无法利用实体图的特点得到推理过程和对应的 evidence
- 同理,大多数模型进行的推理过程比较简单,难以支持较为复杂的问题
直观来说,想要从一系列文档中得到一个需要多跳推理的阅读理解问题的答案,需要经过以下几个步骤:
- 选择出和问题相关的段落
- 从段落中取出相关证据 evidence
- 利用证据推理得到最后答案
基于以上的思路,本文提出一个新的帮助多跳阅读理解问题解答和推理的模型:Hierarchical Graph Network (HGN),这里使用构造分层图(hierarchical graph)的形式来整合不同粒度的信息
这里包含四种类型的结点:问题 questions + 段落 paragraphs + 句子 sentence + 实体 entities,首先用预训练模型(BERT / RoBERTa)来进行上下文信息的编码(contextual encoding),得到这些分层图中结点的初始表示;再将上面得到的表示通过一个 GNN 来完成图传播,得到更新的表示后再用于后续的几个子任务。注意到最后的答案不一定就是 GNN 中的实体,此时同时使用一个 span prediction 的模块来得到最后的 ans span
2 Hierarchical Graph Network
2.1 overview
先来看看模型整体结构:
此时主要分为四个主要的部分:
- Graph Construction Module 图构造模块:用于构造分层图(hierarchical graph)以连接不同粒度,不同来源 source 的信息。
- Context Encoding Module 上下文编码模块:也就是通过一个 RoBERTa-based 的编码器得到图中各个结点的初始表示
- Graph Reasoning Module 图推理模块:利用基于图注意力的方法(graph-attention-based)完成结点的表示更新
- Multi-task Prediction Module 多任务预测模块:同时完成多个子任务以得到最后的答案:选择段落 + 寻找支持证据 + 实体预测 + 提取 answer span
2.2 Graph Construction 图构造模块
主要目标是构造分层图,也就是得到里面的结点和边的关系
这里主要分为两个部分完成:
- 选取得到相关的多跳段落(multi-hop paragraphs)
- 对选取段落的对应的 句子 / 实体 之间添加边作连接
Paragraph Selection
首先寻找第一跳的结点,也就是从问题出发得到的初始结点,具体按照以下步骤进行 →
① 寻找 title 和问题 Q 中的任何一个 phrase 匹配的段落(title matching)
② 同时训练一个段落评分器(paragraph ranker),具体就是预训练的 RoBERTa 后面接上一个二分类器,判断各个段落内确实有支持证据的概率
③ 如果此时有多个段落通过 title matching 被选中,则只有评分最高的两个段落会被最后保留
④ 如果此时 title matching 没有选中任何一个段落,继续搜索段落内出现了 Q 问题中涉及的实体 entity 的段落
⑤ 如果还是没找到任何一个段落,此时选取通过 ranker 后评分最高的段落
进一步考察第二跳的结点:第二跳的结点应该是和第一跳结点存在一定的相连关系的实体,但是这里不考虑直接依赖实体匹配(会引入大量噪声),这里利用的是第一跳的段落中的超链接(hyperlink)来寻找可能存在的第二段落,并构建两个结点之间的边,注意这里的边是双向的。
同理为了避免引入过多噪音,多跳操作的每一个引入新的 paragraph 都通过 ranker 保留前 N 个评分最高的段落,其他舍弃
Nodes and Edges
注意此时提取得到的结果本身就是自带一种层级关系的 → 比如段落内包含句子 → 句子包含实体
此时共存在四种结点:问题结点 + 段落结点 + 句子结点 + 实体结点
此时按照如下规则建立结点和结点之间的边的关系(共七种)
- 问题结点和段落结点相连(first-hop 的段落)
- 问题结点和问题中本身出现的实体结点相连
- 将当前段落结点(paragraph node)和该段落的所有句子结点(sentence node)相连
- 句子结点通过句子中包含的超链接和其他段落结点相连
- 针对每一个句子结点,此时提取出该句子中的所有实体,并将所有实体结点和该句子结点相连
- 段落之间相连
- 出现在同一个段落的句子之间相连
2.3 Context Encoding 上下文编码模块
这里给定一个建立好框架的分层图,负责得到所有图中的结点的对应的初始表示( initial representations)
将所有选取出的段落 paragraphs 拼接得到上下文 C,再和当前问题 Q 向量拼接 → 扔进一个预训练好的 RoBERTa + 一个跟在后面的 bi-attention layer(也就是双向注意力),此时得到上下文表示 C 和问题表示 Q:Q={q0,q1,...,qm−1}∈Rm∗dQ = \{q_0 , q_1, ... , q_{m-1}\} \ \in R^{m*d}Q={q0,q1,...,qm−1} ∈Rm∗d C={c0,c1,...,cn−1}∈Rn∗dC = \{c_0 , c_1 , ... , c_{n-1}\} \in R^{n*d}C={c0,c1,...,cn−1}∈Rn∗d
这里的 m 和 n 分别是问题和上下文的长度,注意这里的每一个 qi 和 ci 都是长度为 d 的向量
再把这里得到的表示 C 放进一个双向的 LSTM ( BiLSTM ,注意这里是实际上使用的时候是共享参数的),得到的输出记作 M∈Rn∗2dM \in R^{n*2d}M∈Rn∗2d
此时通过 M 得到 C 中不同的三种结点的不同的表示(段落 paragraph + 句子 sentence + 实体 entity),此时基于 (backward LSTM 的起始结点的隐藏状态)和(forward LSTM 的结束结点的隐藏状态)分别计算 pi 和 si 和 ei:
这里的 Pstart(i),Sstart(i),Estart(i)P^{(i)}_{start}, S^{(i)}_{start}, E^{(i)}_{start}Pstart(i),Sstart(i),Estart(i) 分别表示第 i 个段落/ 句子 / 实体结点的起始位置,而 Pend(i),Send(i),Eend(i)P^{(i)}_{end}, S^{(i)}_{end}, E^{(i)}_{end}Pend(i),Send(i),Eend(i) 同理对应结束位置,这里的 [;][ ; ][;] 也就是向量拼接,得到的拼接结果再通过一个 MLP 层,注意这里的参数不是共享的
综上,此时得到的 pi 和 si 和 ei 也就是第 i 个 段落 / 句子/ 实体结点的对应的初始表示
同理这里得到问题结点的初始表示,对于 RoBERTa + 一个跟在后面的 bi-attention layer 给出的输出 Q,再通过一个池化层得到问题 Q 的初始表示:q=maxpooling(Q)q = maxpooling(Q)q=maxpooling(Q)
注意这里满足维度都是 d,也就是 q,pi,ei,si∈Rdq, p_i , e_i ,s_i \in R^dq,pi,ei,si∈Rd
2.4 Graph Reasoning 图推理模块
负责更新此时分层图中的结点表示,也可以理解为将整体的上下文的信息都融入表示。通过在构造的分层图上进行推理实现,这里定义:P={pi}i=1np;S={si}i=1ns;E={ei}i=1ne;P = \{p_i\}_{i=1}^{n_p}; \text{ } S = \{s_i\}_{i=1}^{n_s}; \text{ } E = \{e_i\}_{i=1}^{n_e}; P={pi}i=1np; S={si}i=1ns; E={ei}i=1ne;,注意这里的 np 和 ns 和 ne 分别表示三种结点出现在整个图中的数量,同理定义 H={q,P,S,E}∈Rg∗d;g=np+ne+ns+1H = \{q,P,S,E\} \in R^{g*d}; \text{ } g = n_p+n_e+n_s+1H={q,P,S,E}∈Rg∗d; g=np+ne+ns+1
这里使用 Graph Attention Network (GAT) 来模拟信息在图上传递的过程:GAT 将所有的结点作为输入,对于第 i 个结点的表示 hi,此时通过 i 结点对应的邻居结点 Ni 的情况来更新 hi 的表示得到 h’:
这里的 NiN_iNi 表示结点 i 的所有的邻居结点的集合,W 是需要学习的权重矩阵,这里的 aij 是注意力系数:
这里的 weijw_{e_{ij}}weij 是关系类型 ij 对应的权重(也就是结点 i 这种结点和 结点 j 这种结点对应相连的时候的对应的关系对应的权重),这里的 f()f()f() 是 LeakyRelu 激活函数,经过推理后得到所有结点的更新表示,记作 H’:H′={h0′,h1′,...,hg′}∈Rg∗dH' = \{h_0', h_1', ... , h_g'\} \in R^{g*d}H′={h0′,h1′,...,hg′}∈Rg∗d
再基于门控注意力机制对上面的信息作一个融合,得到后续用于作 span 提取的上下文表示集合 G:
这里的 Wm,Wm′,Ws,WtW_m, W'_m,W_s,W_tWm,Wm′,Ws,Wt 都是需要学习的权重矩阵
2.5 Multi-task Prediction Module 多任务预测模块
得到结点的更新表示后用于几个子任务:
- 基于 paragraph 结点的段落选择
- 基于句子结点的支持证据预测
- 基于实体结点和上下文表示 G 的答案预测
对于 段落选择任务 = 当前的段落到底有没有包含确实的证据 和 支持证据预测任务 = 当前的句子结点到底是不是支持证据,直接通过两层的 MLP 作为一个分类器来实现:
这里的 osent∈Rnso_{sent} \in R^{n_s}osent∈Rns 表示每一个句子是否真的是支持证据,opara∈Rnpo_{para} \in R^{n_p}opara∈Rnp 同理
进一步预测当前实体 E 是不是答案,同理通过一个 MLP:
注意这里计算的 oentityo_{entity}oentity 本身并不帮助我们得到预测的答案,只是算算而已,用在损失函数里。注意本身正确答案可能就不是任意一个实体,则此时直接将实体的损失函数记作 0
真的拿来作答案决策的为:
这里是从综合上下文表示 G 中选择答案开始和结尾的结点,同理经过两层 MLP,分别预测当前的结点是不是答案的开始 / 结束位置
同理,这里利用 G 的第一个隐藏表示配合 MLP 来预测答案类型:
注意如果这里预测出来的答案类型为 yes 或者 no,就直接回答对应的 yes / no,不再返回上面预测出的起始位置 + 结束位置的答案
最后的训练是多个子任务共同训练的:
这里的 λ1,λ2,λ3,λ4\lambda_1, \lambda_2, \lambda_3, \lambda_4λ1,λ2,λ3,λ4 都是超参数,损失函数用的都是交叉熵损失函数(本质都转化为了分类问题)
3 Experiments
这里用到的数据集是 HotpotQA,也就是经典的多跳阅读理解数据集了
针对这个数据集一般存在两个子任务:
- 答案预测
- 支持证据预测
来看看效果:
作者分析了几个点:
- 很多错误集中于(同义但是不同表述的答案),比如 “EPA vs. Environmental Protection Agency” / “American-born vs. U.S. born”,可以认为就还是算是答对了吧这种 …
- 缺乏常识帮助模型进行判断,如果将常识同时加入模型或许会有一定的提升(比如模型不知道 “second” means “Code#02”
- 在需要离散推理的部分表现不好,比如一些需要比较两个东西的问题
- 可能有的问题存在多个正确的答案,一般模型只能够给出一个
- 在多跳推理部分出现错误,或者明明给出了正确的对应的支持证据最后还是给了错误的答案
阅读仓促,存在错误 / 不足欢迎指出!期待进一步讨论~
转载请注明出处。知识见解与想法理应自由共享交流,禁止任何商用行为!
【EMNLP20 论文笔记】HGN:基于分层图网络的多跳阅读理解模型相关推荐
- 【论文笔记】基于分层深度强化学习的移动机器人导航方法
目录 摘要 关键词 0 引言 1 基于分层深度强化学习的导航方法 1.1 模型框架 1.1.1 避障控制模型 1.1.2 目标驱动控制模型 1.1.3 行为选择模型 1.2 模型训练 2 实验分析 2 ...
- 【论文笔记】基于生成对抗网络的强化学习算法的研究
目录 摘要 关键词 0 引言 1 相关理论 1.1 强化学习理论 1.2 生成对抗网络理论 1.3 基于生成对抗网络的强化学习算法 1.3.1 算法总体结构框架 2 实验与分析 3 总结 摘要 解决: ...
- 基于分层注意力网络的方面情感分析
点击上方蓝字关注我们 基于分层注意力网络的方面情感分析 宋婷1, 陈战伟2, 杨海峰1 1 太原科技大学计算机科学与技术学院,山西 太原 030024 2 中国移动通信集团山西有限公司,山西 太原 0 ...
- 论文浅尝 | 基于异质图交互模型进行篇章级事件抽取
笔记整理:娄东方,浙江大学 & 恒生电子股份有限公司博士后,研究方向为事件抽取 来源:ACL2021 链接:https://arxiv.org/abs/2105.14924 GitHub项目地 ...
- 论文笔记:基于深度学习的遥感影像变化检测综述
论文主要信息 本篇博文主要是对该论文进行总结和翻译,如有错漏,欢迎指出.(目前仅对有监督学习部分进行了整理) 标题:Deep learning for change detection in remo ...
- [深度学习论文笔记]医学图像分割U型网络大合集
[深度学习论文笔记]医学图像分割U型网络大合集 2015 U-Net: Convolutional Networks for Biomedical Image Segmentation (MICCAI ...
- 【论文笔记】Retro-Reader:基于回溯式阅读器的机器阅读理解模型
Zhuosheng Zhang, Junjie Yang, Hai Zhao, Department of Computer Science and Engineering, Shanghai Jia ...
- 【ACL19 论文笔记】EPAr:探索+提议+组装:多跳阅读理解的可解释模型
Yichen Jiang, Nitish Joshi, Yen-Chun Chen Mohit Bansal ; UNC Chapel Hill Explore, Propose, and Assem ...
- 一种基于Voronoi图的曲边化随机颗粒模型生成方法
一种基于Voronoi图的曲边化随机颗粒模型生成方法 简介 在数值模拟中,除了对物体的整体模拟,还要对物体的细观层面进行模拟,以探讨裂纹的生产.扩展:或者细观层面的变化情况.特别是对于某些颗粒增强型 ...
最新文章
- Unity3D 材料
- 【Java Web开发指南】JQuery基础笔记
- No identifier specified for entity
- 【数据平台】sklearn库特征工程之数据预处理
- python androidhelper怎么点击屏幕_python:如何模拟helper方法?
- Oracle的if else if
- Python-属性(property)
- JDBC获得数据库连接及使用
- 手机号脱敏处理_C#简单代码实现对手机号邮箱等隐私信息进行*号打码
- the java home_the java_home environment variable is not defined correctly
- 中国电信云计算重庆基地建成
- KaTeX数学公式语法
- Java实习日记(8)
- 东华复试OJ-43 丑数
- 结构化程序设计(structured programming)
- android 版本权限差别,安卓手机root前后有什么区别 root后哪些高权限操作
- 国家进口的爱乐维与德国药店的爱乐维的区别
- 2021全新PHP短网址生成系统/短链接生成系统/URL缩短器系统源码/站长亲测
- 控制搜索引擎蜘蛛的爬行收录
- 求生之路2服务器搭建(基于LinuxGSM一键完成,完美支持8人)
热门文章
- 无线路由WDS无线中继功能详解[转]
- mysql无法停止slave_遇到诡异的问题 stop slave 无法停止
- Python中的时间函数datetime.timedelta()
- spring boot 项目在启动时调用接口
- picasso介绍及使用
- 2020-05-14
- 一篇搞懂python文件读写操作(r/r+/rb/w/w+/wb/a/a+/ab)
- php 获取配置信息,PHP系统配置信息的获取
- 复选框如何实现单选框效果
- 作为程序员的你 是喜欢代码还是喜欢工作 ?