©PaperWeekly 原创 · 作者 |
苏剑林

单位 | 追一科技
研究方向 | NLP、神经网络
大约两年前,笔者在百度的“2020语言与智能技术竞赛”中首次接触到了事件抽取任务,并在文章《bert4keras 在手,baseline 我有:百度 LIC2020》[1] 中分享了一个转化为 BERT+CRF 做 NER 的简单 baseline。不过,当时的 baseline 更像是一个用来凑数的半成品,算不上一个完整的事件抽取模型。而这两年来,关系抽取的模型层见迭出,SOTA 一个接一个,但事件抽取似乎没有多亮眼的设计。
最近笔者重新尝试了事件抽取任务,在之前的关系抽取模型 GPLinker 的基础上,结合完全子图搜索,设计一个比较简单但相对完备的事件联合抽取模型,依然称之为 GPLinker,在此请大家点评一番。

任务简介 

事件抽取是一个比较综合的任务。一个标准的事件抽取样本如下:
▲ 标准的事件抽取样本(图片来自百度DuEE的GitHub)
每个事件会有一个事件类型以及相应的触发词,并且配有不同角色的论元。事件类型和论元角色是在约定的有限集合(schema)中选择,而触发词和论元一般情况下都是输入句子的片段,少数情况下也是可枚举的分类对象(百度的 DuEE-fin 出现过)。
原则上来说,事件抽取模型的设计取决于评价指标,在 LIC2020 中,我们之所以可以将事件抽取转化为一个 NER 问题,是因为当时的评测指标只考察(事件类型,论元角色,论元)构成的三元组,因此我们可以将(事件类型, 论元角色)组合成一个大类,然后就跟 NER 对应上了。
当然,这只是针对该指标的一种取巧方式。对于真实的事件抽取场景,我们自然是希望把标准格式的事件抽取出来,也就是设计一个尽量完备的模型。下面将介绍我们用于事件抽取的 GPLinker 模型,它基本达到了简单而完备的要求。

统一论元 

我们多次提到了“完备”这个词,它是什么含义呢?具体来说,我们希望最终设计出来的模型,至少在理论上能适用于尽可能多情形的事件抽取任务。传统的事件抽取模型一般分为“触发词检测”、“事件/触发词类型识别”、“事件论元检测”和“论元角色识别”四个子任务,也就是说要先检测触发词然后基于触发词做进一步的处理,所以如果训练集没有标注出触发词,它就没法做了,这说明传统思路是不够完备的。
为了统一有无触发词的场景,我们这里就触发词也当作事件的一个论元角色,这样有无触发词就是增减一个论元而已,所以主要还是在于论元识别和事件划分。对于论元识别,我们还是将(事件类型,论元角色)组合成一个大类,然后转化为 NER 问题,但要注意的是,不同的实体是可能嵌套的,所以之前基于 CRF 的 NER 其实是不够用的,这里用能识别嵌套实体的 GlobalPointer 来完成。
前面还提到,像 DuEE-fin 这样的任务还出现了分类式的论元类型,其论元不是输入文本的一个片段,而是有限集合中选 1 个,考虑到这种论元类型不多,所以这里也将其转化为抽取式论元。
以 DuEE-fin 为例,其“公司上市”事件类型的“环节”论元,四个候选值为筹备上市暂停上市正式上市终止上市,那么我们不将“环节”视为论元类型,而分别将筹备上市暂停上市正式上市终止上市视为四种论元类型,而对应的实体则为触发词,这样我们要抽取的论元不是分类式的(公司上市,环节,XX上市),而是抽取式的(公司上市,XX 上市,触发词),最后我们在模型后处理阶段再将它们转回来就好。

完全子图 

至于事件划分,一个很自然的想法就是直接把所有具有同一事件类型的论元聚合起来作为一个事件,但这也是不够完备的,因为同一个输入可能有多个同一类型的事件。如果加上触发词呢?还是不够,多个同一类型的事件还可能公用同一个触发词,比如 DuEE 有一个样本是“主要成员程杰、王绍伟被法院一审判处有期徒刑 22 年和 20 年。”,分别有两个事件“程杰判处有期徒刑 22 年”和“王绍伟判处有期徒刑 20 年”,触发词都是“有期徒刑”,事件类型都是“入狱”。
所以,我们需要设计一个额外的模块来做事件划分。我们认为,同一事件的各个论元是有联系的,这种联系可以用无向图来描述。也就是说,我们将每个论元看成是图上的一个节点,而同一事件任意两个论元的节点可以连上一条边而成为相邻节点,而如果两个论元从未出现在同一事件中,那么对应的节点则没有边(不相邻)。这样一来,同一事件的任意两个节点都是相邻的,这我们称为“完全图(Complete Graph)”,也称为“团(Clique)”,事件划分转化为图上的完全子图搜索。
▲ 有向图上的完全子图示例
那么如何构建这个无向图呢?我们沿用 TPLinker 的做法,如果两个论元实体有关系,那么它们的(首,首)(尾,尾)都能匹配上,我们可以像关系抽取的 GPLinker 一样,用 GlobalPointer 来预测它们的匹配关系。特别地,由于我们只需要构建一个无向图,所以我们可以 mask 掉下三角部分,所有的边都只用上三角部分描述。

搜索算法

假定我们已经有了描述论元关系的有向图,那么我们要怎么搜索出所有的完全子图呢?看上去跟图分割有点相似,但不完全一样,因为在我们的场景下,节点是可以重复使用的,这意味着同一个实体同时是多个不同事件的论元。比如上图中的 8 个节点可以搜索出两个完全子图,其中节点 D 同时出现在两个子图中,这代表我们可以划分出两个事件,它们有共同的论元 D。
经过分析,笔者构思了如下的递归搜索算法:
  • 枚举图上的所有节点对,如果所有节点对都相邻,那么该图本身就是完全图,直接返回;如果有不相邻的节点对,那么执行步骤 2;
  • 对于每一对不相邻的节点,分别找出与之相邻的所有节点集(包含自身)构成子图,然后对每个子图集分别执行步骤 1。
还是以上图为例,我们可以找出 是一对不相邻节点,那么我们可以分别找出其相邻集为 ,然后继续找 的不相邻节点对,发现找不到,所以 都是完全子图。
注意这个不依赖于不相邻节点对的顺序,因为对于“所有”不相邻节点对我们都要进行同样的操作,比如我们又找到 是一对不相邻节点,那我们同样要找其相邻集 并递归执行。所以,在整个过程中,我们可能会得到很多重复结果,但不会漏了某个结果,也不会搜识别顺序影响,最后再去重即可。
此外,每次搜索的时候,我们只需要对同一事件类型的节点进行搜索,而多数情况下同一事件类型的论元只有个位数,所以上述算法看似复杂,实际运行速度还是很快的。

实验结果 

现在我们的事件抽取设计已经介绍完了。总的来说,我们需要一个嵌套实体识别模型来识别论元,然后分别需要一个“首-首”匹配和“尾-尾”匹配模型来构建论元之间的关系,这些模块跟关系抽取的 GPLinker 模型出奇一致,并且也都可以用 GlobalPointer 来完成,所以我们依然将它命名为“GPLinker”。代码统一整理在:
Github 地址:
https://github.com/bojone/GPLinker
笔者简单在 DuEE 和 DuEE-fin 上做了实验,并提交到了千言排行榜,结果分别如下:
单看这两个成绩,在排行榜上排第 5,不算出彩,距离榜 1 还有点远。不过这篇文章也不是专门去打榜,所以也没有进一步针对比赛数据来优化,目前这个成绩,也算是可圈可点了。至于没有对比其他事件抽取模型,是因为笔者对这一领域实在不熟,简单看了几篇关系抽取的论文,感觉里边的模型都异常复杂,提不起兴趣去复现。
最后,代码用的 GlobalPointer,全部都是 Efficient GlobalPointer,笔者也比较过使用标准版的 GlobalPointer,发现它前期收敛更快但最终效果会更差。这也再次肯定了 Efficient GlobalPointer 的有效性。

模型反思

GPLinker 做事件抽取,追求的是简单和完备,实际情况下可能并不是最有效的方案。一个很明显的问题是,它对数据的依赖比较明显,在小样本的情况下效果可能欠佳。这本质上也是 GPLinker 足够完备导致的,因为完备意味着自由度相当大(可以容纳足够多的场景),模型没有多少先验信息,所以学习难度也会增加。
但是,GPLinker 确实有着简单高效的特点,而且理论上也不存在 Exposure Bias 问题,所以实际情况下,如果 GPLinker 效果欠佳,那么一种可行的方案是先用其他能把效果做上去的方案(很可能效果好但效率差)做一版模型,然后蒸馏到 GPLinker 上去,这样就可以兼顾效果与效率了。

文章小结

本文介绍了将 GPLinker 用于事件抽取的思路,先用嵌套实体抽取的方式来抽取论元,然后将事件的划分转化为完全子图搜索问题,整个模型相对简洁和完备,并且理论上不存在 Exposure Bias 问题。
更多阅读
#投 稿 通 道#
 让你的文字被更多人看到 
如何才能让更多的优质内容以更短路径到达读者群体,缩短读者寻找优质内容的成本呢?答案就是:你不认识的人。
总有一些你不认识的人,知道你想知道的东西。PaperWeekly 或许可以成为一座桥梁,促使不同背景、不同方向的学者和学术灵感相互碰撞,迸发出更多的可能性。 
PaperWeekly 鼓励高校实验室或个人,在我们的平台上分享各类优质内容,可以是最新论文解读,也可以是学术热点剖析科研心得竞赛经验讲解等。我们的目的只有一个,让知识真正流动起来。
📝 稿件基本要求:
• 文章确系个人原创作品,未曾在公开渠道发表,如为其他平台已发表或待发表的文章,请明确标注 
• 稿件建议以 markdown 格式撰写,文中配图以附件形式发送,要求图片清晰,无版权问题
• PaperWeekly 尊重原作者署名权,并将为每篇被采纳的原创首发稿件,提供业内具有竞争力稿酬,具体依据文章阅读量和文章质量阶梯制结算
📬 投稿通道:
• 投稿邮箱:[email protected] 
• 来稿请备注即时联系方式(微信),以便我们在稿件选用的第一时间联系作者
• 您也可以直接添加小编微信(pwbot02)快速投稿,备注:姓名-投稿
△长按添加PaperWeekly小编
🔍
现在,在「知乎」也能找到我们了
进入知乎首页搜索「PaperWeekly」
点击「关注」订阅我们的专栏吧
·
继续阅读
阅读原文