【论文解读 EMNLP 2018 | JMEE】Jointly Multiple EE via Attention-based Graph Information Aggregation
论文题目:Jointly Multiple Events Extraction via Attention-based Graph Information Aggregation
论文来源:EMNLP 2018
论文链接:https://arxiv.org/abs/1809.09078
代码链接:https://github.com/lx865712528/EMNLP2018-JMEE
关键词:多事件抽取,GCN,attention,句法依存结构
文章目录
1 摘要
本文提出JMEE模型(Jointly Multiple Events Extraction),面向的应用是从一个句子中抽取出多个事件触发器和参数(arguments)。
JMEE模型引入了syntactic shortcut arcs来增强信息流并且使用基于attention的GCN建模图数据。
实验结果表明本文的方法和statr-of-the-art方法相比,有着可比拟的效果。
2 引言
(1)明确任务
给定一个文档,事件抽取(EE)的目的是识别出事件触发器及其类别,还需要识别出它们对应的角色参数。
ACE 2005数据集将事件抽取任务分成了两个子任务:事件检测(ED,识别事件触发器并分类)和参数提取(argument extraction,识别出事件触发器的参数并标注它们的角色)。
在事件抽取中,经常会有一个句子中出现多个事件的情况。准确地从一个句子中抽取出来多个事件比一个句子只有一个事件的情况要难得多。因为这些不同类型的事件之间经常相互有关联。
(2)现有方法的缺点
现有的方法大致可分为两类:1)句子级别的序列模型;2)基于特征的模型。
但是,基于序列的模型不能捕获到单词间较长的依赖关系;基于特征的模型需要耗费人力进行特征工程,并且选择的特征会在很大程度上影响模型的效果。而且,这两类方法都不能充分建模事件之间的关联。
(3)作者提出
1)syntactic shortcut arcs的引入
直接能想到的改进方法是:引入语言学资源(例如句法依存树)表示的shortcut arcs,通过较少的转换将信息流从一个点转换到目标节点。和基于序列的模型相比,使用这些arcs建模可以减少在同一个句子中,从一个事件触发器跳到另一个的跳数。
以图1为例,有两个事件:killed是事件Die的触发器,4条红线表示它的4个参数;barrage是事件Attack的触发器,3条蓝线表示它的3个参数。如果按照句子本身的序列顺序的话,从killed跳到barrage需要6步。如果根据句法依存树的话,只需要3步就可以了(图中用绿色的圈标出了3步的路径)。这3个arcs就组成了一个shortcut path,使用较少的跳数,将句法依存的信息流从killed节点转移给了barrage节点。
本文提出的JMEE模型引入了syntactic shortcut arcs来增强信息流,还使用了基于attention的GCN对图数据建模。
2)GCN的引入
为了在建模时使用shortcut arcs,作者采用了GCN通过聚合节点一阶邻居的信息,为每个节点学习到其句法上下文的表示。
然后利用句法上下文的表示,通过self-attention机制进行信息聚合,尤其是维护多个事件间的关联信息,以抽取出触发器和参数。
(3)贡献
-
提出JMEE模型可以联合抽取出事件触发器和参数。JMEE模型基于句法结构,增强了信息流,并且提升了在一个句子中抽取出多个事件的效果。
-
使用self-attention机制聚合信息,尤其是维护了不同事件间的关联信息。实验证明了这一方法在EE任务上的有效性。
-
在数据集上进行实验,在EE任务上实现了state-of-the-art。
3 方法
EE可看成是多类别的分类问题。判断句子中的每个单词是否是候选事件触发词的组成部分,以及句子中的实体是否是事件触发词对应的参数(比如Attack事件的目标和攻击者等对应的实体)。
EE方法主要分为两类:(1)联合学习的方法,同时抽取事件触发器和参数,当做类别预测问题:(2)pipeline的方法,先进行触发器的预测,然后再识别出参数。本文使用的是联合学习的方法,以避免pipeline方法中可能出现的误差传播。
为什么在句子级别(sentence-level)进行事件抽取,而不是在文档级别(document-level)呢?主要有以下3个原因:
(1)ACE 2005数据集中文档级别的共现分布和句子级别的共现分布很相似。
例如图2所示,蓝色柱子和橙色柱子分别表示Attack事件出现时,句子和文档的在33种事件上的条件概率分布。和Attack事件有共现关系的top 3的事件类型是:Die, Transport, Injure。尽管不同的事件类型有不同的共现关系,但是句子级别和文档级别在同一事件类型下的条件概率分布很相似。
(2)有许多现成的句子级别的语言学资源,可以为shortcut paths结构提供信息,例如句法依存树、AMR分析图、语义角色标签结构。
(3)同一个句子中不同事件间的关系 比 文档中出现在不同句子中事件关系的更易捕获。
3.1 一些定义
-
表示长为的句子
-
表示句子中的实体提及(entity mentions)
-
使用BIO对每个token 进行标注,为其分配一个触发标签,因为有的触发器是由多个单词组成的。
-
使用BIO标注的标签,对每个实体在该事件中扮演的角色进行预测。
JMEE模型由4个模块组成
-
单词表示模块:使用向量表示句子;
-
句法图卷积模块:根据句法结构引入shortcut arcs,进行卷积操作;
-
基于self-attention的触发词分类模块:捕获一个句子中多个事件间的关联;
-
参数分类模块:预测每个实体在对应类型的事件中扮演的角色。
JMEE模型整体架构如图3所示:
3.2 单词表示模块
句子中的每个token 通过在table里查找,转换成实值的向量。由以下几种向量级联得到:
-
的词嵌入:Glove;
-
的POS-tagging label嵌入:随机初始化embedding table;
-
的位置嵌入:设为当前词,将和的相对距离通过在随机初始化的embedding table中查表,编码成实值向量。
-
的实体类型标签嵌入:和POS-tagging label嵌入相似,使用BIO对句子中的实体进行标注,通过在embedding table中查表得到实体类型标签的实值向量表示。
经过上述操作,将输入的句子表示成了向量序列:,作为后一模块的输入。
3.3 句法图卷积模块
使用句法分析树,将句子表示成无向图。句子中的单词表示为图中的节点。图中的边表示从token 到token 有一个有向的syntactic arc,并且边的类型标签为。
为了使得信息可以沿着边逆向传播,引入了反向边,反向边的类型标签为。另外,还在原始图中添加了自环(self-loops),标签为loop。
句法图卷积模块的第层,节点的图卷积向量计算如下:
其中,表示边的类型标签;分别是针对类型标签的权重矩阵和偏置;是节点的邻居集合,包括自己(因为有自环);是**函数。
使用单词表示模块输出的初始化GCN的节点表示。
添加反向边和自环后可知,有个权重矩阵和个偏置参数。
使用Stanford Parser在句法分析树上生成shortcut arcs,大约有50种句法关系,这对于单层GCN的参数量来说太大了。为了减少参数量,只维护如下的3种类型标签:
上一篇博客GCN-ED也是采用了这种方法,只维护3种类型的标签。
由于生成的句法依存结构可能有噪声,因此在边上使用门机制,为有不同类型标签的边分配不同的权重。边的权重计算如下:
上一篇博客GCN-ED也是采用了这种方法,为不同类型的边分配不同的权重。
因此,最终的GCN计算写成了如下的形式:
堆叠层GCN可以建模k hops的邻居信息,有时两个触发器之间的距离小于,为了避免信息的over-propagating,作者提出highway units。highway层进行如下的非线性转换:
其中,是sigmoid函数;是element-wise乘积;是非线性**函数;被称为transform gate,被称为carry gate。第层GCN的输入由改为。
和GCN-ED中的原因相同:GCN的层数限制了捕获图中局部信息的能力,因此使用BiLSTM编码单词表示,将前向和后向得到的表示级联,作为第一层GCN的输入:
和上一篇博客GCN-ED中使用BiLSTM的想法一致。
3.4 基于self-attention的触发词分类模块
当每个token做为当前词时,GCN都对所有的tokens进行计算得到表示。传统的EE方法通常使用max-pooling或者对max-pooling进行改进来将信息聚合到每个位置。
经过GCN都得到了token的表示,为什么还需要进行聚合呢?
因为预测一个token是否是和触发器相关,需要考虑到其他可能的触发器候选token。
但是在本文的模型中,使用GCN模块后进行max-pooling进行聚合往往会产生相似的结果。例如,GCN的输出为,是句子长度,位置进行max-pooling后得到的向量为:。这样的话,每个位置得到的都是相同的。
鉴于max-pooling方法的不足,为了捕获到一个句子中不同触发器之间的关联,作者设计了self-attention机制来进行信息聚合,尤其是维护了不同事件之间的关联。
给定当前的token ,self-attention向量和位置的上下文向量计算如下:
然后将上下文向量输入到一个全连接神经网络预测触发器的标签:
3.5 参数分类模块
上一步对触发词进行分类后,可以得到完整的事件触发词(即在I-Type或B-Type后出现了O标签,就可以分割出完整的触发词)。然后使用上下文向量对句子中的entity list进行参数分类。
对于每个entity-trigger对,由于entity和trigger候选都可能是tokens的子序列,我们使用average pooling在序列长度这一维度上,对上下文向量进行聚合,得到trigger candidate向量和entity向量。然后将两者级联,输入到全连接的神经网络中预测参数的角色(argument role):
最终的输出表示:第个实体在由第个候选触发器对应的事件中扮演的角色。
在训练过程中,如果候选触发器不是正确的触发器,则将与其相关的参数标签置为OTHER。
3.6 有偏的损失函数
目标函数为最小化联合的负对数似然函数。由于ACE 2005数据集中数据的稀疏性,作者添加了一个偏置项:
其中,是训练集中的句子数;分别是tokens数,抽取出的候选触发器数以及第个句子中的实体数;是指示函数,若不是O,则输出一个大于1的常数值,否则输出1;和一样,都是超参数。
4 实验
(1)数据集:ACE 2005
(2)对比方法
-
Cross-Event:使用文档级别的信息增强EE的性能
-
JointBeam:通过人为设计的特征进行结构预测,进而进行EE
-
DMCNN:使用dynamic multi-pooling维护多个事件的信息
-
PSL:使用隐层和全局的信息对事件间的关联进行编码
-
JRNN:使用双向RNN和人为设计的特征抽取出事件触发器和参数
-
dbRNN:在Bi-LSTM上添加dependency bridges,用于EE
(3)实验结果
和其他方法进行整体性能的对比结果:
在和其他方法在单事件抽取和多事件抽取两个任务上的对比结果:
self-attention机制的可视化结果:
5 总结
本文提出了JMEE模型用于事件抽取任务(EE),可以实现在一个句子中有多个事件的情况下,抽取出多个事件。不仅能抽取出事件触发器(trigger),还能抽取出该事件对应的参数(argument,即事件的关键要素,例如Attack事件的攻击者等)。
JMEE模型引入了syntactic shortcut arcs来增强信息流,也就是说将句子从序列的模式转换成了句法依存图的模式,减小了关键词之间信息流动需要的步数。在句法依存图上使用GCN进行信息聚合。还使用了self-attention机制聚合事件间的关联。
模型由4个模块组成:单词表示模块、句法图卷积模块、基于self-attention的触发器分类模块、参数分类模块。
未来工作:利用一个参数(argument)在不同事件中的不同角色信息,来更好地进行EE任务。
和GCN-ED对比:
- 其中句法图卷积模块和GCN-ED这篇文章中的思想基本一致,不同之处在于JMEE在信息聚合时使用了highway units,类似一个门机制,花式聚合(详见文章)。
- 和GCN-ED相比,JMEE没有使用pooling操作,而是使用self-attention机制将不同事件间的关联纳入考量。GCN-ED则是使用了entity mention-based pooling,考虑到了实体类型的影响。
- GCN-ED只是针对事件检测任务,对事件触发器进行定位并分类,是事件抽取的一个子任务。JMEE解决了事件抽取的两个子任务,联合抽取出触发器和参数,并且可以抽取出一个句子中的多个事件。
- JMEE和GCN-ED的不足之处一样,鉴于参数量的考虑,没有考虑到句法关系标签的信息。