【EMNLP20 论文笔记】HGN:基于分层图网络的多跳阅读理解模型

本文介绍了HGN模型,一种用于多跳阅读理解的模型,通过分层图网络融合不同粒度信息进行推理。模型包含图构造、上下文编码、图推理和多任务预测模块,解决了传统方法在复杂问题推理上的不足。实验在HotpotQA数据集上表现出色。
摘要由CSDN通过智能技术生成

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


相较于传统的阅读理解问题,多跳阅读理解为模型提出了新的挑战。此时为了正确回答问题,需要模型同时有从多个文档,多个段落收集信息并将各个信息进行一定的逻辑整合推理的能力。看下面一个来自于多跳阅读理解问题的经典数据集 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 = { q 0 , q 1 , . . . , q m − 1 }   ∈ R m ∗ d Q = \{q_0 , q_1, ... , q_{m-1}\} \ \in R^{m*d} Q={ q0,q1,...,qm1} Rmd C = { c 0 , c 1 , . . . , c n − 1 } ∈ R n ∗ d C = \{c_0 , c_1 , ... , c_{n-1}\} \in R^{n*d} C={ c0,c1,...,cn1}Rnd
这里的 m 和 n 分别是问题和上下文的长度,注意这里的每一个 qi 和 ci 都是长度为 d 的向量

再把这里得到的表示 C 放进一个双向的 LSTM ( BiLSTM ,注意这里是实际上使用的时候是共享参数的),得到的输出记作 M ∈ R n ∗ 2 d M \in R^{n*2d}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值