一文详解多事件抽取模型JMEE

每天给你送来NLP技术干货!


来自:圆圆的算法笔记

写在前面

今天要跟大家分享的是2018年发表在EMNLP的一篇事件抽取的工作JMEEJMEE针对的是多事件触发词及角色联合抽取问题,其中多事件是指在待处理的同一文本范围内存在多个不同事件。

同一文本范围内的多个事件间通常具有一定的相关性,对相关性进行建模将有助于消除事件触发的歧义,提高事件抽取的效果。

本文分享的 JMEE 首先利用 句法树 将输入文本从序列模式转换到句法依存图模式,以此缩短token之间信息传递的距离;然后,在句法依存图上利用图卷积来进行节点信息聚合;最后,为了利用多事件之间的关联,设计了self-attention机制来计算上下文表征向量。结合以上方法,JMEE在多事件句的事件抽取任务上相对于其他方法取得了一定的提升。

论文名称:《 Jointly Multiple Events Extraction via Attention-based Graph Information Aggregation》

论文链接:https://aclanthology.org/D18-1156.pdf

代码地址:https://github.com/lx865712528/EMNLP2018-JMEE

1. 背景知识

在正式开始分享论文内容之前,我们先介绍下事件抽取。按照比较标准的定义,事件抽取本身包括两个子任务:

  • 事件检测(Event Detection):检测触发词(最能代表一个事件发生的词),同时还要正确判定其事件类型

  • 论元检测(Argument Detection):检测事件的相关元素,同时正确判定这些元素在这个事件中承担的角色

7b91100554b8fb9760d7ccb38b46470c.png

上图是一个直观的例子。图中左侧是常见的无结构化文本,右侧是事件抽取结果。事件检测发现了 "成立" 这个触发词,并且判定其事件类型为 "Construction" ;论元检测则发现了事件"construction" 发生的时间、地点、执行者以及所作用的对象。

2. 多事件

在第一节所示的例子里,一个句子中只出现了一个事件。实际上,更常见的情形是一个句子中存在多个事件

b98ca67d6fd5f91adbf88aafca8ff01f.png

这里暂称只含一个事件的句子为单事件句,含多个事件的句子为多事件句。相对于单事件句而言,多事件句的事件抽取是相对更难

论文原文说 “因为多个事件之间往往是相互关联的,所以多事件抽取才更难” 。个人不太认可这个因果关系的说法。一方面,小喵觉得“多个事件判定比一个事件判定要难” 这个说法没问题,但不是因为事件之间的相关性让这个问题变得难;另一方面,事件之间的相关性真正的作用是有助于多事件场景中事件类型的判定。

640cc7e04a010ad3982a1272ea2cc1f1.png

在多事件场景下单独对每一个事件进行判定很有可能出错。假设我们不知道 "巴萨" 代表的是“巴萨罗那足球俱乐部” ,那么“梅西即将离开巴萨"中的 “离开” 可能是“离开某个地方”,也可以是 “不在为球队效力” ;但是结合“计划签下”这个事件的意思,我们可以知道 “离开” 不是 “离开某个地方” 而是 “不在为球队效力”。

3. JMEE核心思想

3.1 整体思想

JMEE主要是通过引入句法树构建词网络以及后续的GCN、self-attention来捕获事件间的相关性,从而获得更好的词/字的语义表征,在此基础上再进行后续的工作。其中,引入句法树是关键的关键。

3.2 为什么要引入句法树

我们来看下为什么要引入句法树。

6320873447e6da1a6d85a9f139356eca.png

上图例子中共有两个触发词,即:“killed”和“barrage”,他们之间间隔了5个其他词。换句话说,从“killed” 到“barrage”需要6步 (6hop,6跳)。实际上,多个事件触发词之间的距离可能远大于我们例子中的6。

另一方面,句中两个词的距离往往大于其在依存树中的距离,比如“killed”和“barrage”在句子中的距离为6,但在句法树中他们的距离仅仅为3。上图底部我用红色箭头标出了3跳的路径,红色的3个箭头组成了一个shortcut path。通过这个shortcut path,我们就可以使用较少的跳数,使信息从"killed"转移向"barrage"。也就是说,从句法树建模词与词的依赖关系更容易也更直接

所以JMEE引入句法树,利用句法树的依赖关系连接词/字,缩短词/字之间的信息传递需要的距离(跳数);此外,引入句法树后也可以自然地从图卷积的角度来进行后续的操作。

4. 模型细节

4d93ca71c62d8c2af51f6bc4992144af.png

现在我们来看下JMEE模型的具体细节。JMEE整体框架大体上包括4部分:词嵌入句法图卷积模块触发词检测模块论元检测模块。实际上,一直到句法图卷积模块都是在做表示学习

4.1 词嵌入

fb93ab2096c6334e7307136b4ccd8a4f.png

前面我们说引入句法树依赖关系后,很自然地就可以用图卷积的方式来做相应的词的表征了。但实际上,JMEE并没有一上来就这么做。因为如果完全依靠句法树里的依赖关系,某些词的左右词所涵盖的local context可能就被忽视了(本来直接一步或几步就能达到却变成需要很多步之后才能到了)。所以,JMEE选择先利用双向LSTM来捕获这种local context

402 Payment Required

其中  为输入文本中第  个token(词或字)的表征向量,其利用了实体、词性、位置等信息,具体地  由以下四个向量拼接而成:

  •  的词嵌入(word embedding):从预先训练好的词向量模型中获得,JMEE选择的词向量模型为Glove

  •  的词性嵌入(Pos-tagging label embedding):利用随机初始化Pos-tagging label embedding table将  的词性标签转换成实值向量;

  •  的位置嵌入 (Positional embedding):假设  是当前词,那么  为  与  的相对距离;利用随机初始化的Position embedding tabel将  转换为实值向量;

  •  的实体类型的嵌入:利用随机初始化的entity label embeeding label将  对应的BIO实体类别标签如B-Name转换为实值向量。

LSTM层的输出  作为图卷积的初始值。

4.2 图卷积

文章没有给出具体的网络图,所以下面我们直接来看公式。

图卷积部分整体上是比较简单的,把句中词/字当作网络图中的节点利用节点的邻居来加权表征节点自己。这里的关键在于邻居节点以及边类型的定义。

  • 节点

举个例子,假设当前节点  是下图中的“arrested”,它的邻居节点  就是与它通过句法依赖直接关联的词“police”、“connection”。注意, 可能包括  自己,因为可能有自环。

  • 边及边类型

至于节点间的连边以及边类型 ,JMEE直接利用的是句法依赖关系。所以,这个例子中节点 “police“ 与节点 “arrested”,连边类型为:

节点“police“ 与节点 “connection” 相连,连边类型为:

  • 图卷积

266d821a7ce6e284b3201192ec3b7af4.png

图卷积模块的第  层,节点  的图卷积向量  为:

402 Payment Required

这里  表示边(u,v)的类型标签;而 、  则分别是与类型标签  的相关的权重参数偏置参数; 是激活函数; 词嵌入模块的最终输出,即 。

  • 连边类别重新定义

假设,句法依赖关系共有  种,再加上反向边和自环后,一层图卷积层就会有  个权重参数偏置参数,这个参数量太大了。为了减少参数量,JMEE 重新定义了边类型,最终只维护了3种类型标签:

e453fb85df22c8c5180ff97be1377310.png
  • 门控机制highway units

59167b4bcb1c31091d535dd8edfe15f5.png

前面图卷积的公式相当于每次卷积的时候每个邻居都对当前节点的表征做了贡献。但实际上,不是所有的邻居或者说所有的边都是有益于表征的,有些词可能会增加歧义性。所以,JMEE 增加门控机制,为有不同类型标签的边分配不同的权重,这也可以看成是加权邻居的贡献:

其中, 为边  的权重。图卷积存在一个问题,即over-smooth/information over propagation。换句话说,节点在拓扑上互相传播信息,利用其他节点的信息更新自己的信息(汇聚节点信息),当卷积深度不断增加时,处于同一连通分支的节点的表征会趋于一致。针对这个问题,JMEE 增加了 highway units。最终在原始信息转移信息新的表征信息共同作用下,获得节点  的图卷积向量 :

这里, 通常被称为 transform gate, 则称为 carry gate。个人觉得这个思想与跟残差网络思想(允许原始输入信息直接传输到后面的层中)类似。

4.3 事件、论元检测

事件检测事件论元检测部分都是分类模型。

19bf1fda8b2231b58ea63e510b31a389.png

将每个token(词/字)做为当前token,再经过词嵌入及句法图卷积模块都获得了所有token的向量表示 。进一步,为了利用事件触发词之间的关联关系,JMEE 设计了 self-attention 机制用于信息聚合。简单地说,JMEE 认为在判断一个token的触发词标签时需要考虑到其他可能的触发词的信息,比如前面例子中的“离开”与“计划签下”。具体地,假设 (文本序列中的第  个token)为当前token,那么与之相关的上下文向量  按如下方式计算:

402 Payment Required

这里  代表归一化操作。可以看到  主要由两部分组成,其一是  的向量 ,其二是其余token的向量按attention权重加权后的表征 。

  • 事件检测

对  进行触发词标签判定,只需要将其上下文向量  送入一个简单的分类器,如下:

402 Payment Required

这里的  是非线性激活函数,最终  就是  的触发词标签。JMEE标签体系选取的是BIO,所以经过事件检测模块就可以得到类似于序列标注的结果如“O,...,O,B-Name,I-Name,O,...,O,B-Loc,I-Loc,I-Loc,O,...,O”。我们基于这个结果序列就可以获得候选事件触发词。

  • 论元检测

显然候选事件触发词、实体都是连续的文本片段(即tokens的子序列)。对每一对候选触发词和实体,我们从向量  中获得其相关子序列中每个token的向量,然后利用max-pooling 汇聚向量信息获得候选触发词的向量  以及实体的向量 。将  和  拼接后送入全连接层进行论元角色的判定:

结果 表示的是第  个实体在第  个候选触发词所对应的事件中扮演的角色。这里需要补充一点,一般事件抽取认为输入文本中的实体即是候选论元,所以JMEE做论元检测时同于对实体进行角色分类。

5. 实验

5.1 实验数据

实验数据选择的是ACE2005,下面是它的具体信息:

22514321d191fb951bf9daa81bad0340.png

5.2 实验结果

  • 整体性能比对

b6d555d067cece7c8bfe7382397574e4.png

JMEE 与其他方法的整体性能比对结果来看,无论是在事件检测(触发词识别、触发词分类)还是论元检测(论元识别、论元角色分类),JMEE都取得了最佳的效果。

  • 单事件、多事件场景比对

b10645fc61be3926ead538fb73b07f64.png

从 纯粹的单事件抽取(1/1) 和 纯粹的多事件抽取(1/N) 比对结果来看,在多事件抽取场景下,尤其在事件检测任务上JMEE相对于对比方法的提升更大。

总结

今天我们分享了事件抽取模型 JMEE,它主要是利用了句法树 、GCN以及self-attention来建模多事件之间的关联,从而提升多事件场景下事件抽取的效果。


📝论文解读投稿,让你的文章被更多不同背景、不同方向的人看到,不被石沉大海,或许还能增加不少引用的呦~ 投稿加下面微信备注“投稿”即可。

最近文章

EMNLP 2022 和 COLING 2022,投哪个会议比较好?

一种全新易用的基于Word-Word关系的NER统一模型

阿里+北大 | 在梯度上做简单mask竟有如此的神奇效果

ACL'22 | 快手+中科院提出一种数据增强方法:Text Smoothing


投稿或交流学习,备注:昵称-学校(公司)-方向,进入DL&NLP交流群。

方向有很多:机器学习、深度学习,python,情感分析、意见挖掘、句法分析、机器翻译、人机对话、知识图谱、语音识别等。

ef656a6cccbfa8e842a1e30708d1316f.png

记得备注呦

整理不易,还望给个在看!
  • 2
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值