Wenxuan Zhou, et al., “Document-Level Relation Extraction with Adaptive Thresholding and Localized Context Pooling”, AAAI 2021
1 简介
- 姓名:ATLOP
- 机构:USC
- 任务:Doc RE
- 流派:基于 BERT
- 动机:Doc RE 这个任务有多标签和多句子的特点,之前的方法没有在这两个特点上钻研
- 方法:总体上还是基于 BERT 的方法,做了一些小改进
- 对 BERT 的改进:
- mention 使用 marker 包裹起来
- entity 不再是 mention 求平均了,而使用 log-sum-exp pooling:$h_{e} = \log\sum\exp(h_m)$
- 分组 bilinear:将 entity pair 各自的 embedding 切成 k 块,两个 entity 的每一块各自 bilinear,最后将 logit 相加,再归一。这样可以将参数从 $d^2$ 缩减到 $d^2/k$
- adaptive thresholding:新建一类作为正负类的分界,使之表示 learnable adaptive entity-dependent 的阈值;引入对应的 loss,学习这个 adaptive threshold
- localized context pooling:利用 BERT 最后一层的 attn score matrix,拼凑出 entity pair 对整个文本的 attn score matrix,对文档的词加权平均,得到文本与 entity pair 相关的表示,分类时将 entity pair 的表示拼上这个句子表示。
- 对 BERT 的改进:
- 性能:61.09,SOTA;RoBERTa-large 甚至到 63.18
- 优点:相比于 BERT + bilinear,参数甚至可能更少了,后面 attn score 也是直接取,感觉又轻又快(不过作者在文中没有提?)
- 局限:不知道
- 短评:他这里几个方法我都不太理解,pooling 那里我感觉式子都写错了(?)
2 方法
2.1 改进 BERT
简介里说的很清楚了,① 包裹 ② mention -> entity 使用 log-sum-exp ③ bilinear 时分组,再加和 $P = \sigma(\sum z_s^i W_r^i z_o^i + b_r)$
2.2 adaptive thresholding
原先是对于每一个 relation,都给 entity pair 算一个 $\in[0, 1]$ 的分数,然后通过在验证集上测试,找出一个最好的阈值,来分辨 entity pair 是否属于这个 relation。作者认为,① 这个阈值最好是 learnable 的,这样就不用再挨个试了 ② 在不同 entity pair 和不同 relaiton 这两个维度,其实算出来的分数都有不同的 confidence。比如可能对于某一个 entity pair,它算出来的所有 relation 的分数都偏低,也可能对于某一个 relation,所有 entity pair 在这个 relation 上面分数都偏高,所以这个阈值最好是对不同 relation,不同 entity pair 都不同。
其实上面的第二点要求就很变态了,如果对不同 relation,不同 entity pair 都有不同的阈值,那模型就只能做 transductive 的任务了,新的 relation 或 entity pair 怎么办?
作者新建了一个 TH(threshold)class:

th class 与其它 relation 类别是平等的。一对 entity pair 属于 th class 的概率的计算方式,与其它所有 relation 的分数计算方式也是一样的。TH class 相当于一个 anchor,它不表示 entity pair 具有某种关系,而只是如上图所示,在测试的时候,entity pair 在所有正例上的分数要大于在 th class 的分数,在 th class 的分数要大于所有负例的分数。这里正例就指这个 entity pair 所具有的 relation,负例就指它不具有的 relation。

于是为了学习这个 adaptive 阈值,作者就设计了一个 loss,$\mathcal{L}_1$ 是让所有正例大于 th class,$\mathcal{L}_2$ 是让所有负例小于 th class。
2.3 localized context pooling
感觉是老生常谈的做法了,entity pair 的 embedding 整合上一些 document 的信息,就能叫做 context 的 entity pair embedding 了。只不过作者是直接从最后一个 transformers 中的 attention matrix 里面取。然后为了算 entity pair 对句子里每个词的 attn weight,就要用头 mention 的 attn score 乘尾 mention 的 attn score。最后再对词加权求和 aggregation,得到和 entity pair 相关的文档表示。
本身是很简单的东西,作者这里写了四个式子,给我整的非常迷惑:

其中 $A_s^E, A_o^E \in \mathbb{R}^{H\times l}$ 是头尾 entity 分别对长度为 $l$ 的文档中的 $H$ 头 attn score。
- 第一个式子我感觉应该是用哈德玛积,而不是一个简单的乘号,这样才能表示 “The weights of tokens are derived by multiplying the attention weights of the subject entity es and the object entity eo from the last transformer layer so that only the tokens that are important to both entities (highlighted in light yellow) receive higher weights.”
- 第二个式子就是将多头相加,比较正常
- 第三个式子我怎么也看不懂,感觉 shape 都不太对(2021-01-23 补充:看了他的 slide 才知道,这个式子的意思就是让 attn 分数归一,这式子就是瞎写啊。。。也不加括号。。。)
- 第四个式子应该是用来表示 aggregation,但是我也是看不懂
得到和 entity pair 相关的文档表示之后,在 bilinear 之前拼一起。
3 实验
- 只用 2.1 的改进,就已经和 SOTA 差不多了
- DocRED:61.09,SOTA;RoBERTa-large 甚至到 63.18
- ablation:都有用
- log-sum-exp 和 groupbilinear 都有一个点的提升!
- entity marker 对性能影响很小
- adaptive treshold:用 5.4 的算法为每一类 relation 计算一个 treshold,会过拟合
- context pooling:当文档中 entity < 5 个时,pooling 没有用,entity 越多,越有用。我感觉是在 entity 少的时候,attention 可能还是太平均了。
4 思考
- 没想到 log-sum-exp 还能做 pooling,感觉 exp 是加大差异,然后 avg,最后 log 再拉回一开始的 scale。我的理解是,这样相比于直接 avg,相当于拉开了两两之间的差别。但是作者说,这是一种“对最大池化的平滑”,这个我还得好好看一下这个方法的 src【#TODO1】(记得 cvx 作业题里还让对这个函数求导 Orz)
- group bilinear 能减少参数(原来是 $d^2$,现在是 $k\times(\frac{d}{k})^2$,这个比较容易理解)和增强性能。为什么会对最后的性能有帮助呢?
- 感觉这种方式是将以前的绝对的阈值改成了相对的阈值。这就有两个好处,首先在直觉上,相对的阈值也是更合理的。另外,“得到相对的阈值的过程”在 th class 对应的 bilinear 的参数中也是能学到的,因此就可以说,这些阈值是 learnable(当然,learn 的不是阈值本身)。
我感觉这是一种还蛮有用的思路,即 anchor 的使用(是我揣测的,作者不一定是这么想的)。以下纯属个人意见,欢迎指正。先说一下 anchor,我这里说的 anchor 不是目标检测里面的 anchor box,而是一种类似“占位符”的东西,就是它不表示任何语义,而只是作为一个固定的位置在那里。由于不表示任何语义,因此他可以“跨任务”:比如这篇文章中,这个 th class 在不同 entity pair 的预测结果中可能前面的正例不一样,甚至数量都不一样;由于它是“占位符”,它对应的位置又表示了一些信息:比如这篇文章中,总是保证 th class 在正负例之间。
这里我可能还没说清楚,我再拿 TapNet 这篇文章来举例(不了解 FSL 的还是跳过这段吧,我没有说的很清楚)。TapNet 中,作者为每一 way 都设置了一个参考向量 $\Phi$,这里的 $\Phi$ 就相当于是 anchor。因为在每一个不同的 n-way k-shot 任务中,他都重复使用这 n 个 $\Phi$,将其投影到 task 空间中,借此学习这个投影(或者说空间转换)的参数。
这个 $\Phi$ 也满足我说的上面那两点特征。不表示任何语义,所以可以跨任务——这非常好理解,FSL 的 n-way k-shot 就是一个任务。只是作为一个固定的位置在那里——只是表示每一 way 的 prototype,这就让 $M(\Phi)$ 直接就能表示这一个类别在 task 空间中的表示了,这也能理解成上面说的,“由于它是“占位符”,它对应的位置又表示了一些信息”。
感觉这个方法非常有意思,但是我在网上搜不到这个思路的任何文章(全是目标检测……)。现在我对这种思想其实还不是很理解,但是隐约有一种感觉:这种做法可以成为一种“万金油”,无中生有直接多一个条件。(就跟反证法一样 XD) - entity marker 对性能都有下降了,为什么还继续用?文中说“it makes the derivation of mention embedding and mention-level attention easier”,可是直接 word 平均得 mention,不也是很简单吗?
5 TODO
- Document-Level N-ary Relation Extraction with Multiscale Representation Learning, Robin Jia, Cliff Wong, Hoifung Poon
- Zheng, H.; Fu, J.; Zha, Z.-J.; and Luo, J. 2019. Learning Deep Bilinear Transformation for Fine-grained Image Repre- sentation. In NeurIPS.
- Tang, Y.; Huang, J.; Wang, G.; He, X.; and Zhou, B. 2020b. Orthogonal Relation Transforms with Graph Context Model- ing for Knowledge Graph Embedding. In ACL.
- Fan, R.-E.; and Lin, C.-J. 2007. A study on threshold selec- tion for multi-label classification. Department of Computer Science, National Taiwan University 1–23. 计算 treshold 的算法
Ablation study里面,entity marker应该没有导致性能下降吧,只是提升比较小
感谢指出!已经改正
博主请问哪里可以看到slide,求助!
https://wzhouad.github.io/slides/ATLOP_AAAI21.pdf