Yingyao Wang, et.al, “Learning to Decouple Relations: Few-Shot Relation Classification with Entity-Guided Attention and Confusion-Aware Training”, COLING 2020
1 简介
这是一篇哈工大的工作。
首先说说他的动机。作者说,自然语言中有时会一句话里描述多个实体对的不同关系。在关系抽取中,有时一对关系总是在句子里共现,就导致模型难以区分。作者称这个问题为 relation confusion problem。

比如这张图中的三个关系,就互为 confusing relation。其实这里我不太能清晰地理解,为什么字面上出现了多个关系,就会使模型 confuse 呢?可能是在小样本的设定下,训练时学到的是更 general 的知识,测试时 a daughter of 或者 the uncle of 相对于其他常见词都是非常重要的特征(甚至 the XXX of 已经被学成了 attention 的关键?),于是共现导致迷惑。
作者为了解决这个问题,提出了 Entity-Guided Attention (EGA) mechanism 和 Confusion-Aware Training (CAT) method。EGA 就是把每个词的实体特征和句法特征用 transformer 编码、对每个词的编码逻辑回归,得到每个词的 gate,用来强化 self-attention。
CAT 就是每个 episode 之后,找到 query 预测结果里面 confusing relation pair 的正确和错误的例子,通过引入新的 loss,强行让 query 的 embedding 离正确关系的 prototype 近一点,离错误的远一点(大致是这个意思,但是这里说的不太准确,后面解释)。
2 方法
EGA
这一部分,作者的想法是 words that keep high relevance to the given entities are more important in expressing the true relation,于是就用实体特征和句法特征定义这个“words that keep high relevance to the given entities”。
先讲一下实体特征和句法特征的定义:实体特征就是每个词的“‘待抽关系的两个实体 和 这个词的相对位置’的 embedding”,可能就是数字的 embedding?具体他没说,我也还没看;句法特征就是在句法树上,只留下和实体直接相连的边,然后对于每个词,看它有没有和那两个实体相连的边,有,句法特征就是边上关系的 embedding;无,就是 others 的 embedding。
把这两种特征拼到一起,得到 $e_i^p = [e_i^{pos}, e_i^{syn}]$,然后接 transformer 和 sigmoid 做回归,每个词就得到一个数 $g_i$,作者称之为 Entity-Guided Gate。显然,$g_i$ 区分了词 i 对于关系抽取任务的重要程度。后面在 attention 的时候,就在 attention score 上乘 $g_i$,也就是让 $g_i$ 作为一个加强或减弱关注度的权重,让最后的权重更偏向前面两条规则选的更重要的词。这样最终池化得到句子的 embedding,里面关键词的分量也就更重。
CAT
episode 前半部分得到每个 prototype 的表示 $c_j$ 以及 query 的表示 $s^q$,按照正常套路就直接计算 $s^q$ 与每个prototype $c_j$ 的距离,取最近的进行分类:$$\delta = (\|s^q – c_1\|^2, …, \|s^q – c_N\|^2)$$ $$\hat{r} = \min_j(\{\delta_i, i = 1,…,N\})$$
这里的 $\delta$ 是距离的分布。loss 也就表达这个 $\min$ 的过程:$$\mathcal{L} = \text{CrossEntropy}(\text{OneHot}(r), \text{Softmax}(\delta))$$
以上是度量学习的经典方法。为了区分 confusion relations,作者又做了如下改进:
首先,将 $\delta$ 变换到一个 confusion-aware 的空间:$$\bar{\delta} = \tanh(W^c\delta + b^c)$$
在这里,作者希望能让模型学到“什么是错的”,于是就在一个 episode 结束后,找到里面的错误分类样本,用错误的预测结果作为 confusion-aware 空间中的正确结果,对模型进行训练:$$\bar{\mathcal{L}} = \text{CrossEntropy}(\text{OneHot}(\bar{r}), \text{Softmax}(\bar{\delta}))$$
这个乍一看觉得有点奇怪,怎么能学错误标签呢?但是由于是经过了 $W^c$,$b^c$ 变换,因此这种“让距离分布在 confusion-aware 空间中拟合错误标签信息”的做法,感觉也是“让距离分布在原空间中不要拟合错误标签信息”,这里的“不要”就在参数 $W^c$,$b^c$ 中学到了。
为了加强这个“不要”的信息,作者还引入了这两个距离分布的相对熵,让这俩尽量远:$$\mathcal{L}_{kl} = -\text{KL}(\text{Softmax}(\delta), \text{Softmax}(\bar{\delta}))$$
最后的 loss 就是三者相加。
这里我有一个想法:为什么要计算距离分布之间的关系,为什么不显式地、直接让 query 的 embedding 离错误的 confusing relation 的 prototype 更远呢?这样也不需要什么空间变换,直接选取正确的 prototype $c_i$ 和 confused 的 prototype $c_j$,把 loss 改成$$\mathcal{L} = \text{dist}(s^q,c_i) – \lambda\text{dist}(s^q,c_j)$$
其中 $\text{dist}$ 就是求距离,直接欧氏距离也行,其他的也可以试试。
甚至可以更粗暴一点:$$\mathcal{L} = \text{dist}(s^q,c_i) – \lambda\sum_{l≠i}\text{dist}(s^q,c_l)$$
不过感觉这样可能就没啥用了(?)。
3 实验及结果

- 5-shot sota,1-shot 还不太行,作者觉得是 prototype 还没来得及学好
- EGA 很有用。不用 EGA 的时候,“the model can not identify which words in a given sentence are entities”,可能是打印的 attention 矩阵看出来的?
- 不用 EGA 的时候,下降了 5-14 个点,说明实体信息很有用!
既然 gate 这么有用,下面的实验就专门研究 gate:

- 改变 gate 的方式:改成就直接看,如果这个词是某些 entity 就是关键词(?没太看懂);降了一个点
- 改变 gate 的时机:只在最后一层 attention 加 gate,降了一个点
后面还有具体的样例分析,分别说明了 ① attention 更关注重点词了、② 分类时两个空间的 query embedding 和 正确或错误的 prototype 都更近了、③ confusing relation 的混淆矩阵也更接近对角阵了
4 相关
Few Shot RE 和 句法关系。
5 总结
这个 gate 还是很有意思的,以前的想法都是在输入加强一些特征,这个想法是直接用特征搞一个 gate,在 attention 再去加强。