论文笔记 – Reasoning with Latent Structure Refinement for Document-Level Relation Extraction

Guoshun Nan, et al., “Reasoning with Latent Structure Refinement for Document-Level Relation Extraction”, ACL 2020

1 简介

这篇文章也是基于 graph 做 DocRED。使用 mention、entity、MDP 构图,对于邻接矩阵,使用 structed induction 构建,并将图使用 DCGCN 做信息传递,每个 block 后还要更新邻接矩阵(所以叫他“动态图”…),最后 bilinear 分类。这里 structed representation 很有意思,我忍不住,赶紧看了原文 [1],笔记见此

所以说,他的创新点就在于用简化的 structured representation 建图,以及 DCGCN 的使用,其他也没有太多创新?实验部分除了 case study 有点意思,其它几乎没有给出任何有价值信息。这篇文章声名远扬,看完有点小小的失望。不过,更大可能是这篇文章比较早,所以很多习以为常的方法当时都是首创?

2 方法

本文方法还是 encoder – graph – inference – classification 四个部分,只不过中间的 23 两步可以不断循环迭代。encoder 是双向 LSTM,分类器是用头尾实体分别的 embedding 做双线性,下面就具体讲 23 两步。23 两步流程如图所示:

右边每一个 block 是 DCGDN 的一个 block,在文中对应一次 refinement,即 23 的一次迭代。encoder 得到每一个 token 的 embedding 之后,作者将三类节点拿来作为图的顶点:

  1. mention node
  2. entity node:mention 的 avg
  3. meta dependency path node:shortest dependency path 上的节点

那么边该怎么连呢?换句话说,邻接矩阵怎么设计呢?别人连边都是基于 huristic rules,本文使用基于 [1] 的方法,不显式依赖 co-reference 或者规则来构建图,且图是动态更新的。具体来讲,“构建邻接矩阵”和“在图上推断”这两件事将循环迭代。下面就分别表述。

2.1 structure induction

几乎就完全是利用 [1] 的思路了,只不过是直接用三种 node 搞一个 latent document structure,而不是像原文中,先搞一个句法树,再搞句子之间的关系树——这是一个方面的简化。同时,由于没有可解释的树的结构了,所以就取消了 root 部分的概率计算——这是另一个方面的简化。

首先,和 [1] 一样,对于两个节点 i 和 j,把他们从 encoder 得到的 $u_i, u_j$ 分别过 linear,再过一个双线性,得到这俩的相似度:$$s_{ij} = (\text{tanh}(W_pu_i))^TW_b(\text{tanh}(W_cu_j))$$

同时,也计算这个点是整个 document 图的根节点的概率:$$s_i^r = W_ru_i$$

接下来用上面得到的相似度构建图邻接矩阵(这里的邻接矩阵只是单纯的表示相似度,没有用到生成树的引导)、拉普拉斯矩阵、变异的拉普拉斯矩阵,所有操作都和 [1] 一模一样,式子我就略了,可以 refer 原文或者我这篇笔记

最后,计算图上的生成树的边的概率 $A_{ij}$ ([1] 中是 $P(z_{ij} = 1)$),将这个概率作为构建图的邻接矩阵(这里得到的边的概率,是这条边属于某个生成树的概率之和,概率高,说明很可能是树(也就是 document latent structure)上的边,所以用这个概率作为邻接矩阵的权重,相当于就用 document latent structure 构建图的边)。

2.2 multi-hop reasoning

一个 structure 对应 DCGCN 的一个 block,里面包含几层 GCN sublayer。最后输出是将每一层的输出拼起来。

2.3 iterative refinement

上面用几层 GCN 更新 node 表示之后,再用这组 node 表示重新按 2.1 的步骤计算邻接矩阵,以此迭代循环。

为什么这样做呢?作者说,他看到 [1] 里面生成树都非常浅,觉得一次 structure induction 不能表示文档里复杂的结构,所以才要这样迭代多次。

3 实验

  1. SOTA @ DocRED & CDR, half-SOTA @ GDA (Inter f1 < EoG)
  2. 作者分析,比 graph 方法好是因为可以使用 document structure,比 BERT 好是因为用 graph 能捕捉长距离依赖(全是废话)
  3. DocRED 上,LSR 主要是 inter 分数提升更高,作者说是 structure 里面肯定包含了句法信息,也没有后续实验。(比如 [1] 中就画出了句法树,你怎么就不画出 document structure,看看啥样呢?难道一个合理的样本都挑不出来吗?)
  4. 如果不 refinement,会下降一点点。两次最好
  5. 作者没画 document structure,而是画了每次 refinement 算出的 attn score,发现 attn score 就能在不同 refinement 步骤中有那么一个信息传递的路径。这里我不是很理解:每次 refinement 都是 from scratch 建立邻接矩阵,因此不同 refinement 之间的图怎么会有信息传递的过程呢?信息传递,或者说 path,不是在一张图上找到的吗?多次 refinement 不就只是为了更新 node 以及邻接矩阵的表示吗?和推理路径有什么关系吗?

4 思考

  1. [1] 生成树很浅,不能表示复杂文档结构,这绝对是 structure representation 最大的 drawback。本文是通过多次计算 structure 来解决的。

但是这真的合理吗?每次更新结点的表示之后,不都是重新再做 structure induction 吗?并不能让生成树有更好的结构吧?还是会很浅,表达能力还是不够吧?而且,GCN 只是做图上的平滑,这对于 structure 的表示真的有正面作用吗?从直觉上思考,对每个 token 用他的邻居做平滑之后,那么在计算 $s_{ij}$ 等类似的东西的时候,不就“不够 attn”了吗?

另外,作者的 case study 也是真的很奇怪,多次 refinement 之间为什么能找推理路径?

作者在原文中说,Intuitively, the reasoner(就是 structure induction + 一个 block 的 GCN) induces a shallow structure at early iterations since the information propagates mostly between neighboring nodes. As the structure gets more refined by interactions with richer non-local information, the induction module is able to generate a more informative structure. 换句话说,结构也会因为 node 的表示更新而变得更“复杂”,或者说表达能力更强。这里我倒还可以理解。但是不同 stucture 之间能有推理路径,我是真的迷惑。

  1. 关系分类最后大多是双线性变换,这样会不会太简单了?如果拼接,过 MLP 或者 BERT 会不会好一些?

5 Ref

  1. Yang Liu and Mirella Lapata, “Learning Structured Text Representations”, TACL 2018, notes

发表评论