论文笔记 – Prototypical Representation Learning for Relation Extraction

Anonymous authors, “Prototypical Representation Learning for Relation Extraction”, ICLR 2021 under review

1 简介

这篇文章是做低资源关系抽取(虽然是关系抽取,但是这篇文章几乎纯粹是机器学习的内容,关系抽取现在已经沦落为一个基准任务了,就跟图像分类一样)。motivation 是 [1] 这篇文章的预训练过程会受到很大的噪音影响(远程监督的数据嘛),所以要在预训练时,用一种新的目标,减少噪声的影响。(所以这篇文章用关系抽取这个任务,是因为图像标注都是人标的,所以没有噪音(?)太欺负人了吧)

整体流程也是在远程监督数据上先预训练,然后再去 FewRel(FSL 的方式) / SemEval(有监督学习的方式)上面 finetune。与 [1] 直接做分类任务、交叉熵做 loss 预训练不同,本文的预训练旨在构建一个单位球空间,每个 instance 都分布在球面上,且按照类别分簇。为了实现这个目标,作者提出了三个 loss。

本文中出现的 prototype 并非 ProtoCNN 中求平均得到的 proto,而是通过计算所有 instance 之间的某些位置关系,找到的 proto。作者说这种方法 ① learn the representations from the semantics of each statement, rather than solely from the noisy distant labels(就是 ProtoCNN 只是从 instance 得到 proto,没有控制 instance 在 embedding 空间的分布,本文考虑了 instance 之间的语义信息,控制了 instance 的分布(当然也控制了 instance 和 prototype 之间的位置))② 将空间划分为 K 个流形(就是我上一段说的那个意思)③ 为分类边界引入正则化,减小远程监督数据噪声的影响(详见最后的实验)

这篇文章还在审,看那些审稿人的意见和作者的答复,真是让我受益匪浅。以后可以多在这种开放的审稿网站上找文章学习一下。这种审稿意见可比大部分博客对文章的评价水平高多了,毕竟博客都是我这种人写的 Orz

2 方法

2.1 预训练过程

预训练还是用 BERT 来做,只是换了个 loss(换成“控制球面分布”的任务)(最后实验的时候其实不是“换”个 loss,实际是还保留了 MLM 的 loss,是“加”了个 loss,作者没有给出不带 MLM loss 的消融实验)。

2.1.1 $\mathcal{L}_{S2S}$

第一项 loss 是让 instance 按照关系类别分成一簇一簇的:$$\mathcal{L}_{S2S} = -\frac{1}{N^2}\sum_{i,j}\dfrac{\exp(\delta(s_i,s_j)d(s_i,s_j))}{\sum_{j’}\exp((1-\delta(s_i,s_{j’}))d(s_i,s_{j’}))}$$

其中 $s$ 代表样本(文章中把样本 instance 叫做 statement),$\delta(s_i,s_j)$ 是指示函数,如果两个样本属于同一类则 $\delta = 1$,否则为 0。$d(s_i,s_j) = 1/(1+\exp(\dfrac{s_i}{\|s_i\|}\cdot \dfrac{s_j}{\|s_j\|}))$ 表示两个样本之间的相似度,里面对长度归一化,就相当于将他们放在了单位球面上$\mathcal{L}_{S2S}$ 的意思很好理解,就是让聚类簇内紧密,簇间远离。但是其中的距离计算和整体的目标计算都和前人的工作不同,这是为什么呢?

首先,为什么要这样算距离,而不直接点乘呢?作者在 rebutal 的时候说,这样是为了保证几何上的可解释性。

左边是作者 intuitive 的想法,右边是最终 pretrain 得到的 encoder 出的分类结果 t-SNE 到二维,可以发现,这个 t_SNE 的结果与左边图片降到二维的结果是几乎一致的,这就具有了可解释性——以前的其它算法并不能说明,为什么最后得到的分布是那样。

作者还说,如果使用点乘计算相似度,就违背了这个集合上的 intuition。不过还是可以尝试其它计算球面上点的距离的方式来计算相似度。

第二,为什么要用这样的目标函数,而不是那种传统的 triplet loss 或者 cross-entropy loss 呢?作者说,他设计的这个式子能让一个正样本去对抗所有的负样本(triplet 就是 1v1,交叉熵就是 nvn,这个是 1vn),这样在实际使用更有效。我觉得是因为,远程监督得到的数据噪音大,因此正样本不是很正,但是负样本就是铁定不包含这个关系的,所以要加大置信度更高的样本的权重,这是非常有道理的。

2.1.2 $\mathcal{L}_{Z}$

这部分是要找出每类的 prototype $z^r$。这里 prototype 不是直接加权平均得到的,而是通过 loss 学出来的:$$\mathcal{L}_{S2Z} = -\frac{1}{N^2}\sum_{s_i\in\mathcal{S}^r, s_j\in\mathcal{S}^{-r}}\big[\log d(z^r,s_i) + \log(1-d(z^r,s_j))\big]$$ $$\mathcal{L}_{S2Z’} = -\frac{1}{N^2}\sum_{s_i\in\mathcal{S}^r, z’\in\mathcal{Z}^{-r}}\big[\log d(z^r,s_i) + \log(1-d(z’,s_i))\big]$$

第一个式子表示,对于一个关系的 proto 来说,同类的 instance 要近,不同类的要远;第二个式子表示,对于一个 instance 来说,要跟自己的 proto 近,跟别的 proto 远。式子中的 $d(·,·)$ 表示距离,还使用上一节的式子,右上角标 $-r$ 表示除了关系 $r$ 之外的所有关系的(样本或 proto 的)集合。两式之和称之 $\mathcal{L}_{Z}$。

这两个 loss(或者说两条原则)保证找到的 proto 就都在每个 cluster 的中心。并且作者还说,相比于传统的交叉熵损失函数,这个 loss 有很大的优点:there is no interactions between different statements in the cross-entropy loss that solely relies on the instance level supervision, which is particularly noisy under a noisy-label setting. On the other hand, our loss functions consider distances between different statements and prototypes, which exploits the interactions between statements. This type of interaction would effectively serve as a regularization to the decision boundary. 前半部分我看不懂 【#TODO1】,后半部分的意思大概就是:

别人算 proto 是直接求质心,咱们是计算与各个样本、其它 proto 相互位置关系,这样抗噪性能显著增强,分类边界受噪声样本的干扰明显变小。作者在后面做了一个小实验证明这个理论:

这是四张二分类任务的结果图,左边是干净数据的,右边是有噪音数据的;上面是通过每个 instance 计算分类边界(支持向量机),下面是直接两个 proto 连线做中垂线得分类边界。可以看出,上下相比,当有噪声样本时,用 proto 分类对于边界的影响小得多。所以这里得到了一个可以泛化到所有地方的结论:先算 proto 再分类,对噪声鲁棒性强

2.1.3 $\mathcal{L}_{CLS}$

$$\mathcal{L}_{CLS} = \frac{1}{K}\sum_k\log p_\gamma(r^k|z^k)$$

这个损失是对得到的 proto 做一个约束。其中的 $\gamma$ 表示一个辅助的分类器,所以这个式子的意思大约就是“让得到的 proto 更好分”的交叉熵损失。作者还加了一个数学的解释,我没看懂,详见 https://openreview.net/forum?id=aCgLmfhIy_f&noteId=zSjmXby6G_T

最终的损失是把上面所有的损失,权重相加。

2.2 finetune

在有监督学习的 setting 下,就直接用预训练 encoder 把句子编码之后,过一层 linear 作为分类器,然后优化这个分类的交叉熵损失。

在 FSL 的 setting 下,他好像没有分 episode 训练?他说的太简略了,我真的看不懂【#TODO2】

3 实验结果

远程监督的数据集是用 wikidata 在 wikipedia 里面匹配,得到 700 多个关系的 86 万个样本。而 FewRel 也是这么做的,所以就有审稿人质疑,这不就是把 test 给 train 了吗?作者回复:① 手动择过了,绝对没有相同的样本 ② 可能会有相同的关系类别,不过这个在现实上也是可能的

作者还在自己的预训练数据集和 BERT-base 上复现了 [1],性能差了好多。

作者还设计了一个 baseline,其中的 prototype 都是从预训练数据里通过规则生成,并定死的(我其实也没太看懂【#TODO3】)。这个对比好像是为了说明训练出来的 proto 要比通过规则得到的好(这不是废话吗?)

3.1 FSL

  1. 在这个预训练的数据量,且都用 BERT-base 的情况下,SOTA
  2. 每个 loss 都有用
  3. 在 fintune 的时候,如果减小训练样本的数量(① 减小每类的数量 ② 减小关系类别数),本文的方法波动很小,甚至零样本学习也能有 90+ 的 accuracy,其它预训练的方法就会降十几二十多个点。其中,① 要比 ② 性能降得更多。

3.2 FUZZY RELATION EVALUATION

作者构建了一个 FuzzyRED 数据集,里面有一半是远程监督的噪声,即包含两个实体但是不表达那个关系。任务就是在这个数据集上做二分类,区分噪音。学习也是使用 FSL 的 setting。support 中,对于每个关系,计算正例之间的两两距离,最大的距离作为阈值,query 的时候,就看距离和阈值的大小。最终本文的方法也是 SOTA。

3.3 有监督学习

在 SemEval 数据集 finetune、测试。最终结果不是很 solid,和 IND 这个 baseline 其实差不多.

作者还计算了 finetune 之后的聚集系数,发现自己的方法聚集系数最大

4 总结

这是我第一次看 under review 的文章,感觉很多地方比较模糊,不知道我的问题还是文章的质量问题。看这篇文章的时间也比我看两篇普通文章的时间都多,感觉很有收获。不过自己水平还是不够,还是先从被同行评议过有价值的文章看起吧。

5 参考与拓展阅读

[1] Livio Baldini Soares, Nicholas FitzGerald, Jeffrey Ling, and Tom Kwiatkowski. Matching the blanks: Distributional similarity for relation learning. In Proceedings of ACL, pp. 2895–2905, 2019.

[2] Neural snowball

[3] Few-shot Relation Extraction via Bayesian Meta-learning on Relation Graphs

[4] Patrick Verga and Andrew McCallum. Row-less universal schema. In Proceedings of ACL, pp. 63–68, 2016.

[5] https://openreview.net/forum?id=aCgLmfhIy_f

6 TODO

  1. $\mathcal{L}_{Z}$ 的优点
  2. FSL 的时候怎么 finetune
  3. IND baseline

发表评论