Hierarchical Graph Network for Multi-hop Question Answering

HGN

由4个模块组成:

  1. Graph Construction Module
  2. Context Encoding Module
  3. Graph Reasoning Module
  4. Multi-task Prediction Module

Graph Construction

  1. 找到最相关的段落

    1. 训练了一个Roberta + binary_cls 检索相关的段落(匹配段落标题和问题)
    2. 如果多个都相关,则选择得分最高的两个
    3. 如果title matching没有结果,那么找包含问题实体的段落
    4. 如果实体也没有结果,那么只用段落匹配的烦最高的两个(first hop)

    接下来是第二跳,寻找能够链接到其他相关段落的facts and entities

    1. entity linking 可能引入噪音, 直接使用wikipedia中的超链接找第二跳的段落
    2. 在含有超链接的句子和链接到的段落之间添加双向边
  2. 为上一步中相关的段落和其中的实体之间添加边

    paragraphs -> sentences -> entities

    1. 每个段落节点,添加到包含的句子的节点的边
    2. 每个句子节点,抽取所有实体,并添加边
    3. 段落之间,句子之间也可以有边

    不同类型的节点从不同的信息源捕获语义, 能比只有同类节点的图更精确地定位证据和找到答案

image-20200708151430988.png

定义了七种边:1. question-paragraph 2. question - its inner entities 3. paragraph - its inner entities 4. sentence - their linked paragraph 5.sentence - its inner entities 6. paragraph-paragraph 7. sentence -sentence (appear in the same paragraph)

Context Encoding

​ 把所有段落拼接起来得到 context C 再拼接上question Q 输入RoBERTa, 后面再接一个Bi-attention layer。 Q = \{q_0, q_1,...,q_{m-1}\} \in \mathcal{R}^{m \times d}C = \{ c_0, c_1,...,c_{n-1}\} \in \mathcal{R}^{n \times d} , m,n 分别是 question 和 context的长度。

​ 在C后用BILSTM, 从BiLSTM的输出 M \in \mathcal{R}^{n \times 2d} 中得到不同节点的表示。entity/sentence/paragraph是context中的一个区域,表示的计算方式:1. 反向LSTM 在开始处的隐藏状态 2. 前向LSTM在结束位置的隐藏状态。 而对于question节点,使用max-pooling获得其表示。
p_i = MLP_1([M[P_{start}^i][d:];M[P_{end}^i][:d]])\\ s_i = MLP_2([M[S_{start}^i][d:];M[S_{end}^i][:d]]) \\ e_i = MLP_3([M[E_{start}^i][d:];M[E_{end}^i][:d]]) \\ q = max-pooling(Q)

Graph Reasoning

contextualized representations of all the graph nodes are transformed into higher-level features via a graph neural network.

P = \{p_i\}_{i=1}^{n_p}S = \{s_i\}_{i=1}^{n_s}E = \{e_i\}_{i=1}^{n_e}n_p, n_s, n_e 分别是图中该类型节点的个数, 实验中分别设置为4, 40, 60 (padded where necessary). H = \{q,P,S,E\} \in \mathcal{R}^{g \times d} , 其中g = n_p +n_s + n_e +1

​ 使用GAT进行图中的信息传播。GAT 将所有节点作为输入,通过对应的邻居节点\mathcal{N}_i更新每个节点的表示 h_i'
h_i' = LeakyRelu(\sum_{j \in \mathcal{N}_i} \alpha_{ij}h_jW)\\ \alpha_{ij} = \frac{exp(f([h_i;h_j]w_{e_{ij}}))}{\sum_{k\in\mathcal{N}_i}exp(f([h_i;h_k]w_{e_{ik}}))}
W_{e_{ij}} \in \mathcal{R}^{2d} 是 实体类型节点中第i和第j个节点之间边的权重。f(\cdot) 是LeakyRelu。

在图推理之后,我们得到H' = {h_0',h_i',...,h_g'} \in \mathcal{R}^{g \times d} = \{q',P',S',E'\}

门注意力 图的信息将进一步交互上下文信息来预测答案区域:
C= Relu(MW_m) \cdot Relu(H'W'_m)^T \\ \bar{H} = Softmax(C)\cdot H'\\ G = \sigma([M;\bar{H}]W_s \cdot Tanh([M;\bar{H}]W_t))
其中W_m \in \mathcal{R}^{2d \times 2d}, W'_m \in \mathcal{R}^{2d \times 2d}, W_s \in \mathcal{R}^{4d \times 4d}, W_t \in \mathcal{R}^{4d \times 4d} 都是需要学习的权重, G \in \mathcal{R}^{n \times 4d} 是gated representation ,可以用来做答案区域抽取。

多任务预测

​ 图推理之后,更新过的节点表示被用于不同的子任务:1.paragraph selection based on paragraph nodes; 2.supporting facts prediction based on sentence nodes; 3.answer prediction based on entity nodes and context representation G

​ 由于答案可能不太实体节点中, 实体节点的损失只用作正则项。最终的目标函数:
\mathcal{L}_{joint} = \mathcal{L}_{start} + \mathcal{L}_{end}+\lambda_1\mathcal{L}_{para} + \lambda_2\mathcal{L}_{sent} + \lambda_3\mathcal{L}_{entity} + \lambda_4\mathcal{L}_{type}
对于段落选择 (\mathcal{L}_{para})和支持证据预测(\mathcal{L}_{sent})使用两层MLP作为二分类器。
o_{sent} = MLP_4(S') \in \mathcal{R}^{n_s}, o_{para} = MLP_5(P') \in \mathcal{R}^{n_p}
实体预测(\mathcal{L}_{entity})被视作多标签分类任务,候选实体包括问题中的所有实体和those that match the titles in the context。 如果正确答案不在这些实体节点中,则实体损失函数为0.
\mathbf{o}_{e n t i t y}=\operatorname{MLP}_{6}\left(\mathbf{E}^{\prime}\right)
实体损失值只作为正则项,最终的答案预测只依赖下面的答案区域抽取模块。每个位置上是答案开始或结束的概率也用两层MLP计算:
\mathbf{o}_{\text {start}}=\operatorname{MLP}_{7}(\mathbf{G}), \mathbf{o}_{\text {end}}=\operatorname{MLP}_{8}(\mathbf{G})
对于答案类型预测,span, entity, yes, no
\mathbf{o}_{type}=\operatorname{MLP}_{9}\left(\mathbf{G}[0]\right)
最终的交叉熵损失使用以上的logits计算:\mathbf{o}_{\text {sent}}, \mathbf{o}_{\text {para}}, \mathbf{o}_{\text {entity}}, \mathbf{o}_{\text {start}}, \mathbf{o}_{\text {end}}, \mathbf{o}_{\text {type}}

实验

image-20200708184940036.png

Hotpot QA

image-20200708185014809.png

Fullwiki setting.

image-20200708185302850.png

表3:PS Graph 只有问题到段落,段落到句子的边(边的类型:1,3,4); PSE 加入了Entity相关的,边的类型增加了 2,5 ; 最终的HGN 再多了6,7两种类型的边。

表4:验证了损失函数设计的有效性

表5:不同预训练模型的效果

image-20200708185937540.png

错误分析:pass

结论

本文提出了层叠图网络 HGN, 为了从不同粒度级别获取线索,HGN模型将异质节点放进一个图中。实验在HotpotQA 取得了最好成绩(2019 Dec)。现在fullwiki setting, 现成的段落检索器被用来从大规模语料文本中选择相关的context。未来将探索HGN和段落检索器之间的交互和联合训练。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 211,743评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,296评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,285评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,485评论 1 283
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,581评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,821评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,960评论 3 408
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,719评论 0 266
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,186评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,516评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,650评论 1 340
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,329评论 4 330
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,936评论 3 313
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,757评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,991评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,370评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,527评论 2 349