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:基于分层图网络的多跳阅读理解模型相关推荐

  1. 【论文笔记】基于分层深度强化学习的移动机器人导航方法

    目录 摘要 关键词 0 引言 1 基于分层深度强化学习的导航方法 1.1 模型框架 1.1.1 避障控制模型 1.1.2 目标驱动控制模型 1.1.3 行为选择模型 1.2 模型训练 2 实验分析 2 ...

  2. 【论文笔记】基于生成对抗网络的强化学习算法的研究

    目录 摘要 关键词 0 引言 1 相关理论 1.1 强化学习理论 1.2 生成对抗网络理论 1.3 基于生成对抗网络的强化学习算法 1.3.1 算法总体结构框架 2 实验与分析 3 总结 摘要 解决: ...

  3. 基于分层注意力网络的方面情感分析

    点击上方蓝字关注我们 基于分层注意力网络的方面情感分析 宋婷1, 陈战伟2, 杨海峰1 1 太原科技大学计算机科学与技术学院,山西 太原 030024 2 中国移动通信集团山西有限公司,山西 太原 0 ...

  4. 论文浅尝 | 基于异质图交互模型进行篇章级事件抽取

    笔记整理:娄东方,浙江大学 & 恒生电子股份有限公司博士后,研究方向为事件抽取 来源:ACL2021 链接:https://arxiv.org/abs/2105.14924 GitHub项目地 ...

  5. 论文笔记:基于深度学习的遥感影像变化检测综述

    论文主要信息 本篇博文主要是对该论文进行总结和翻译,如有错漏,欢迎指出.(目前仅对有监督学习部分进行了整理) 标题:Deep learning for change detection in remo ...

  6. [深度学习论文笔记]医学图像分割U型网络大合集

    [深度学习论文笔记]医学图像分割U型网络大合集 2015 U-Net: Convolutional Networks for Biomedical Image Segmentation (MICCAI ...

  7. 【论文笔记】Retro-Reader:基于回溯式阅读器的机器阅读理解模型

    Zhuosheng Zhang, Junjie Yang, Hai Zhao, Department of Computer Science and Engineering, Shanghai Jia ...

  8. 【ACL19 论文笔记】EPAr:探索+提议+组装:多跳阅读理解的可解释模型

    Yichen Jiang, Nitish Joshi, Yen-Chun Chen Mohit Bansal ; UNC Chapel Hill Explore, Propose, and Assem ...

  9. 一种基于Voronoi图的曲边化随机颗粒模型生成方法

    一种基于Voronoi图的曲边化随机颗粒模型生成方法 简介  在数值模拟中,除了对物体的整体模拟,还要对物体的细观层面进行模拟,以探讨裂纹的生产.扩展:或者细观层面的变化情况.特别是对于某些颗粒增强型 ...

最新文章

  1. Unity3D 材料
  2. 【Java Web开发指南】JQuery基础笔记
  3. No identifier specified for entity
  4. 【数据平台】sklearn库特征工程之数据预处理
  5. python androidhelper怎么点击屏幕_python:如何模拟helper方法?
  6. Oracle的if else if
  7. Python-属性(property)
  8. JDBC获得数据库连接及使用
  9. 手机号脱敏处理_C#简单代码实现对手机号邮箱等隐私信息进行*号打码
  10. the java home_the java_home environment variable is not defined correctly
  11. 中国电信云计算重庆基地建成
  12. KaTeX数学公式语法
  13. Java实习日记(8)
  14. 东华复试OJ-43 丑数
  15. 结构化程序设计(structured programming)
  16. android 版本权限差别,安卓手机root前后有什么区别 root后哪些高权限操作
  17. 国家进口的爱乐维与德国药店的爱乐维的区别
  18. 2021全新PHP短网址生成系统/短链接生成系统/URL缩短器系统源码/站长亲测
  19. 控制搜索引擎蜘蛛的爬行收录
  20. 求生之路2服务器搭建(基于LinuxGSM一键完成,完美支持8人)

热门文章

  1. 无线路由WDS无线中继功能详解[转]
  2. mysql无法停止slave_遇到诡异的问题 stop slave 无法停止
  3. Python中的时间函数datetime.timedelta()
  4. spring boot 项目在启动时调用接口
  5. picasso介绍及使用
  6. 2020-05-14
  7. 一篇搞懂python文件读写操作(r/r+/rb/w/w+/wb/a/a+/ab)
  8. php 获取配置信息,PHP系统配置信息的获取
  9. 复选框如何实现单选框效果
  10. 作为程序员的你 是喜欢代码还是喜欢工作 ?