Wang, Xiaozhi, et al. “Adversarial Training for Weakly Supervised Event Detection.” NAACL 2019
这篇文章是隔壁 THUNLP 的文章,是对远程监督(DS,下同)扩充数据的一个延伸:先用 DS 得到“不可靠”的扩充数据,用这不可靠的数据与 ground truth,来对抗训练,最终也就得到了“可靠”的扩充数据。
1 简介
这篇文章只做 event detection,就是找句子里 trigger 并判断 event type。ED 是 EE 的一部分,也是 IR、RC、QA 的上游任务。ED 最初也是特征工程来做,就来使用有监督的 embedding,基于 feature vector 找 trigger,再后来就有了远程监督(DS)的方法来自动标注数据。
但是以前的远程监督方法,需要预定义复杂的规则,生成的数据覆盖范围小、有主题偏差(聚集在某些 topic 上)、噪声大。
为了克服这三点,这篇文章完全不用任何规则和语言学的东西,一开始就是单纯的,“只要包含同一个 trigger,就都是一件事”,这样来先建立一个覆盖范围大的 candidate set,然后用对抗训练的方式去粗取精。
2 相关
ED 相关的略。(很多无监督方法需要看看 #TODO1)
对抗训练做信息抽取的有很多(#TODO1),不过这些方法,要么是直接噪声生成例子(这哪可能蒙混过关),要么是专注降噪,不生成其它数据。这篇文章就是,既用 DS 生成好多数据,又用对抗训练来训练更好的分类器,而生成器只是从 DS 的 unreliable 结果里挑选最能蒙混过关的,起到这么一个作用。
3 方法

整个模型如图所示,分成三个部分。分别是编码、对抗训练、生成“不可靠”数据三部分。编码就是给句子编码,用的 CNN 或者 BERT,不多说了。下面说后两部分。
3.1 对抗训练
对抗训练包含一个生成器和判别器。判别器用来检测 trigger,识别 event type。当面对一个负例时,判别器应该能明确指出,句子里没有 trigger,event type 是 NA。生成器用来在 DS 生成的不可靠的数据集中挑选最接近真实的例子,喂给判别器。
在整个训练过程中,DS 生成的例子都被视作负例。因此判别器的目标就是最大化条件概率:对于正例 $x\in\mathop{R}$,最大化 $P(e|x,t)$(其中 $e$ 是 entity type,$t$ 是 trigger);对于负例 $x\in\mathop{U}$,最大化 $1-P(e|x,t)$。文章是这样定义条件概率的:$$D(e|x,t) = \textbf{e}\cdot\textbf{x}$$ $$P(e|x,t) = \frac{\exp(D(e|x,t))}{\sum_{\hat{e}\in \varepsilon}\exp(D(\hat{e}|x,t))}$$
其中 $\textbf{e}$ 是 event type $e\in\varepsilon$ 的 embedding。这个条件概率,其实就是给句子分类。
为了达到上面说的最大化条件概率,自然也就定义出了 log 损失函数:$$L_D = – \sum_{x\in\mathcal{R}}\frac{1}{|\mathcal{R}|}\log(P(e|x,t)) – \sum_{x\in\mathcal{U}}P_{\mathcal{U}}(x)\log(1-P(e|x,t))$$
这里 $P_{\mathcal{U}}(x)$ 是负例的概率分布,在 loss 里就也是为了归一化。不过在生成器部分,挑出最混淆的,其实也就是找到最好的分布 $P_{\mathcal{U}}(x)$。文中是这样定义的:$$f(x) = \textbf{W}\cdot\textbf{x}+ \textbf{b}$$ $$P_{\mathcal{U}}(x) = \frac{\exp(f(x))}{\sum_{\hat{x}\in\mathcal{U}}\exp(f(\hat{x}))}$$
实际上就是一个分类器,$f$ 中 $\textbf{W}, \textbf{b}$ 都是分类超平面的参数。
损失函数就和上面判别器正好反过来:$$L_G = – \sum_{x\in\mathcal{U}}P_{\mathcal{U}}(x)\log(P(e|x,t))$$
实际训练时,还是分 batch 训练,两个损失函数加权求和,就是整体的优化目标。
3.2 生成“不可靠”数据
前面的对抗训练需要负例,也就是文中的“不可靠”数据。那这个从哪来呢?
我们一开始的 setting 是这样:有一些带标注的数据,和无穷不带标注的数据。怎么用上不带标注的呢?作者给出三种方法:
- 直接匹配:有 trigger 这个词的,就是同一件事,同一个 event type——这显然过于粗糙,但是能获得非常多、范围非常广的数据。
- 半监督方法:先用一部分带标注数据训练编码器和判别器,让他们能识别 trigger 和 event type,然后再用这俩标注无标签数据,作为“不可靠”数据集。后面再用这个不可靠数据集和其它可靠数据来进行对抗训练。
- 远程监督方法:先 DS 自动标注(实际操作时,用的就是别人 DS 搞好的数据集),然后和上面半监督方法一样,用所有靠谱数据预训练,用训练好的编码器和判别器来给自动标注的数据打分,分数高的放到靠谱数据集里,分数低的作为不靠谱数据集,以此对抗训练。
4 实验结果
远程监督方法:
- 整个 AUC 曲线,都包围了其他的所有算法,SOTA
- 要比直接用负例,而不采取对抗训练的方式好,作者给出结论:对抗训练消除了正负例训练的副作用
半监督方法:原来的算法 + 咱们的对抗训练,性能都有提高。
数据扩增的效果:让人手动对比,发现和那些用复杂规则 DS 生成的质量差不多。
case study:用半监督方法,还能发现原始标注里没有的新 trigger,这就扩充了数据集的覆盖范围。
5 总结
- 这里的正负例训练,我觉得不太自然。因为并不是正负啊!只是真真假假程度不同罢了,这样没有一个显著的 margin,生成器怎么会有很好的分类(挑选正例)的性能呢?我觉得这条路不论怎么优化,其实都不太说得通。
- 这里对抗训练的想法我觉得挺有启发:生成器不一定是从无到有,也可以是此文的去粗取精!从无到有的过程可以交给其他部分(3.2)干!
6 引用和拓展阅读
[1] 【论文笔记】Adversarial Training for Weakly Supervised Event Detection
[2] 李宏毅2020机器学习深度学习(完整版)国语-GAN and slides
7 TODO
- 无监督的 ED 算法
- 对抗训练的 IR 算法