©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 鼓励高校实验室或个人,在我们的平台上分享各类优质内容,可以是最新论文解读,也可以是学术热点剖析科研心得竞赛经验讲解等。我们的目的只有一个,让知识真正流动起来。

GPLinker:基于GlobalPointer的事件联合抽取相关推荐

  1. 论文浅尝 - ACL2021 | 探讨跨句事件联合抽取问题

    转载公众号 | 浙大KG 论文题目:MLBiNet: A Cross-Sentence Collective Event Detection Network 本文作者:娄东方.廖智霖.邓淑敏.张宁豫. ...

  2. 实体关系的联合抽取总结

    点击上方,选择星标或置顶,每天给你送干货! 阅读大概需要13分钟 跟随小博主,每天进步一丢丢 作者:Chevalier 原文链接:https://zhuanlan.zhihu.com/p/748868 ...

  3. ​GPLinker:基于GlobalPointer的实体关系联合抽取

    ©PaperWeekly 原创 · 作者 | 苏剑林 单位 | 追一科技 研究方向 | NLP.神经网络 两年前,在百度的"2019 语言与智能技术竞赛"(下称 LIC2019)中 ...

  4. 基于深度学习的事件因果关系抽取综述

    来源:专知本文约1000字,建议阅读5分钟因果关系抽取是自然语言处理(NLP)中的一种关系抽取任务,它通过构造事件图来挖掘文本中具有因果关系的事件对,已经在金融.安全.生物等领域的应用中发挥重要作用. ...

  5. 经典论文复现 | 基于标注策略的实体和关系联合抽取

    过去几年发表于各大 AI 顶会论文提出的 400 多种算法中,公开算法代码的仅占 6%,其中三分之一的论文作者分享了测试数据,约 54% 的分享包含"伪代码".这是今年 AAAI ...

  6. 论文浅尝 | 通过共享表示和结构化预测进行事件和事件时序关系的联合抽取

    论文笔记整理:邓淑敏,浙江大学在读博士,研究方向为低资源条件下知识图谱自动化构建关键技术研究. Rujun Han, Qiang Ning, Nanyun Peng. Joint Event and ...

  7. 论文浅尝 | 基于知识库的类型实体和关系的联合抽取

    链接:http://hanj.cs.illinois.edu/pdf/www17_xren.pdf GitHub项目地址:https://github.com/INK-USC/DS-RelationE ...

  8. [论文阅读笔记56]基于标注(NovelTagging方法)实体与关系联合抽取-ACL2017

    论文:Joint Extraction of Entities and Relations Based on a Novel Tagging Scheme 1. 题目 Zheng S,Wang F,B ...

  9. 使用MRC(机器阅读理解)方式做事件抽取任务,基于2020百度事件抽取任务

    ​关注微信公众号:NLP分享汇.[喜欢的扫波关注,每天都在更新自己之前的积累] 文章链接:https://mp.weixin.qq.com/s/aKB6j42bC1MnWCFIEyjwQQ [前言] ...

最新文章

  1. python - 条件语句
  2. android 版本权限差别,android apk 的root 权限和USB adb 权限的区别
  3. 多股回测(backtrader+quantstats+akshare)
  4. micro 架构组件介绍
  5. php get教程,PHP $_GET 变量
  6. .NET程序集(Assembly)
  7. 基于Python2.7的阿里云API调用及运维相关
  8. 注塑过程中30个常见的问题及对策
  9. 分块矩阵求逆(推导)
  10. 数字盲打怎么练_小键盘数字盲打练习
  11. UE4 虚幻引擎,光照系统。BP_Sky_Sphere 白天黑夜效果
  12. 【Google Paper】对比学习用于解决推荐系统长尾问题
  13. Java后端响应出来的图片流在HTML中显示
  14. 安卓中PullToRefresh添加头布局的方法
  15. Java基础题2从入门到放弃的第五天
  16. (转)Element和Node的区别你造吗?
  17. 【Carsim学习】Carsim与Simulink关联问题的解决
  18. 国密算法概述(SM1、SM2、SM3、SM4、SM7、SM9、ZUC )
  19. 【React项目架构 】+后台管理系统cms实操
  20. PCB喷锡工艺简要总结

热门文章

  1. vue 自己写上传excel组件_vue结合elementui组件 el-upload 上传excel表格(二)
  2. 32位linux运行64位jdk,linux64位操作系统装32位jdk解决方法
  3. web页面--前端明水印
  4. Android Studio 疑难杂症
  5. HttpClient测试类请求端和服务端即可能出现乱码的解决
  6. python-configparser生成ini配置文件
  7. django之允许外部机器访问
  8. pandas apply()函数参数 args
  9. Sublime Text 3 python和Package Control配置方法
  10. 解决网络通信中外网和内网之间的通信问题(NAT转换)