Xiao Guo, et al., “MrGCN: Mirror Graph Convolution Network for Relation Extraction with Long-Term Dependencies”, ArXiv 2101.00124
目录
展开
1 简介
- 姓名:MrGCN
- 机构:Nanyun Peng(本硕是北大的!), UCLA
- 任务:Doc RE
- 流派:graph
- 动机:使用 pooling-unpooling 的方式扩大感受野
- 方法:相当于改进“优化节点表示”的图,并没有 inference 的图
- encoder(Bi-LSTM) + mirror GCN + attn-agg + 分类,只有中间两步值得说一下
- MrGCN:类似 U-net,对称的 pooling 和 unpooling(不过只有一条主线,没有那些同级的链接),pooling 可以用任意方法,存下一个对应的矩阵 $M$,节点表示就直接 $H = MH$ 得到;unpooling 就用 $M^T$ 表示。网络结构是前半部分 {一层 GCN,一次 pooling} 循环,后半部分对称的,{一层 GCN,一次 unpooling} 循环。
- pooling 有两种方法:
- common head matching:在句法树上的兄弟节点可以合并成一个 supernode
- hybrid matching:structural equivalence matching + normalized heavy edge matching
- SEM:两个节点所有邻居结构都一样,合并
- NHEM:计算新的边权,按照 degree 给节点排序,对于最小的一些节点,合并它和边权最大的边对应的点
- attn-agg:mention 通过 log-sum-exp polling 得到 entity,再过一层 self-attn。max pooling 得到 doc 表示,与 entity 表示拼一起,分类
- 性能:比 EoG 好一些
- 短评:感觉存一个矩阵的办法不太对
2 方法
整体算法如图所示,图画的很清楚了:

其中 pooling 有两种方式,看图也大致能看懂了:

从 l-1 到 l 层 graph pooling 的结果存成一个 binary 的对应矩阵 $M_{l-1,l}\in\mathbb{R}^{n\times m}$,对应地,邻接矩阵 $A_l = M^T_{l-1,l}A_{l-1}M_{l-1,l}$,节点特征表示 $H_l^{in} = M_{l-1,l}H_{l-1}^{out}$。
unpooling 的特征表示 $U_{l-1}^{in} = M^T_{l-1,l} U_l^{out}$,邻接矩阵没说,估计就是用上面的每一个邻接矩阵吧。
3 实验
- DocRE 任务:CDR 数据集上比 EoG 好一些;另一个任务略
- doc 越长,表现越差(这个规律有一大块例外,4.8),MrGCN 的 pooling 作用越显著。得出结论:可以扩大感受野。
4 思考
- 他的 pooling-unpooling 是为了扩大感受野,类似于多尺度的卷积核的感觉,即在保持 GCN 层数比较少的情况下,还能有远距离的信息聚合。但是这样应该也绕不过过平滑的问题吧?甚至会不会更甚?文中对于过平滑没有讨论,最后是三层 GCN,刚好也是不会过平滑的上限
- 关于 pooling 有一个疑问:我们传统 CNN 里面的 pooling,都是按照每个 unit 数值的大小来计算的,无论是 max 还是 avg。而本文中的 pooling,似乎仅仅关注于图的结构,或者说就是句法树的结构,而与节点的表示完全无关——这叫 pooling 吗?或者换一个问题,图的 pooling 用节点表示信息 + 一种选邻居的方法来做,这肯定可以,那么能不能用上图的结构和节点这两重信息呢?
- 关于 pooling 矩阵 $M$,我认为出大问题了:
首先,$M$ 没有按行归一化,这就导致在一次 pooling 之后,$MH$ 得到的结果就相当于是将 supernode 对应的所有 node 的表示直接相加,这样直接就超出了 embedding 的空间,后面在 GCN 里,每个节点的 embedding 都不在同一个空间里,这完全不合理。我认为应该按照列做归一化,这样表示 supernode 是 node 的平均。对于邻接矩阵的 pooling,感觉比较复杂,现在这种方法很符合直觉,权重在不同图之间也没必要比较相对大小,感觉这样做是可以的。
第二,$M$ 在 unpooling 的时候也有问题(不过就不是归一化的问题了)。unpooling 时 $M^TU$ 的操作,感觉这个式子就不对。一方面,这代表直接将 supernode 的表示复制给每个 node,这一定丧失了很多信息,是不是可以考虑拼接原有粒度级别的节点表示?(得,跟 u-net 完全一样了),另外这个操作似乎与前面不对称,换句话说,如果找到一个合适的 $M$,这一步改为 $UM^{-1}$ 是不是更好呢?(我不是很有底气 - 作者在文中 5.1 说,GCN is relatively incapable of carrying sequential information in the context, which is crucial to learn the semantics. 难道不是连接上 word adj 的边就可以了吗?不过倒也是,没有人是直接用 GCN 而不用 Bi-LSTM 或者 BERT 的,为什么 GCN 这么垃圾呢?就因为没有一个 learnable filter 吗?那 graph transformer 呢?是不是可以完全代替 GCN 呢?
- 作者对 dev set 的使用方式也让我“耳目一新”:we train our model using standard training set and record the best number of epoch when the model reaches optimal on the validation set. Then, the model is re-trained using the union of the training and development data with the recorded number of epoch. 这……其实很合理,为啥大家不这样做呢
- 作者实验中的第一个任务,有机会了解一下。因为图 4 中,句子越长,表现越好,这个趋势和 DocRED 正相反。感觉这里仔细找一找两个任务的区别,说不定能又找出 DocRE 这个任务的新特点,针对这个特点说不定又能有改进。【#TODO1】
- 感觉我其实也不是特别懂 pooling,有机会要看一些对 pooling 的理论分析【#TODO2】
- doc 长度与性能的关系,在 [335, 375] 有些奇怪

作者说,这可能是因为之前选择模型的时候,是按照整体的表现选择的,可能在第四块就恰巧很差(这我觉得没道理),也可能是,doc 长度与“需要捕捉更长的依赖”无关(这更没道理了)。不过从作者第一个解释原因,我突然想到一个点:如果我把数据集按照 doc 长度这个指标分成几份,在用 dev 性能选择模型的时候,每一份都选择最好的模型,这样“bagging”是不是更好呢?
5 TODO
- Cross-Sentence n-ary 任务
- 深入理解 pooling