2019 EMNLP;github有官方源码(tensorflow);这篇论文模型和实验部分比较简单,相当于是对DMCNN的改进;
Abstract
问题: 现有的AE独立地对每个论元分类,没有考虑论元之间的概念关联。
作者解决: 作者提出概念层次的说法,即对论元的标签含义进一步抽象,得到一组新的抽象标签,为每个抽象标签创建一个可训练参数。由于多个论元可能属于同一个抽象标签,这样抽象标签的可训练参数中就包含这些论元之间的相关性,这有利于进行论元角色分类。
一 Introduction
大多数事件抽取方法将事件抽取EE视为两个阶段的问题,包括事件检测ED和事件论元抽取EAE。近年来,ED的研究比较深入,EAE成为了EE的瓶颈。
现有方法都将各论元视为相互独立的,忽视了某些论元在概念上比其他论元更接近。如下图1所示,“Seller"在概念上更接近于"Buyer”,相较"Time-within"而言。这可以通过它们都同属于抽象概念"Personal"、“Org”,来解释。因此,概念层次会为论元分类提供额外的信息。【反过来说就是,更抽象的概念更好分类,如果对一个词先分到某个抽象概念里面了,后面再细分就更不容易出错】
作者将AE中任务中的概念分为两级,抽象的上级概念、具体的论元角色。抽象概念是作者自己预先定义的,有8个;一个论元角色可以属于多个抽象概念,论元角色与抽象概念之间的对应关系也是作者自己预先定义的。
论元角色分类的步骤:1.为每个抽象概念创建一个上级概念模块(SCM),也就是一个可训练的矩阵;2.创建一个逻辑联结模块,用于将论元角色对应的多个上级概念模块的输出连起来;3.论元角色分类器。【上级概念模块、逻辑联结模块,合起来组成层次化的模块化的注意力模块】【不得不说,真的会起名字】
作者说概念层次的好处,有两个:1.可以提升论元分类器效果,给定一个词,如果更加关注它与"Time"概念有关,那么之后更容易判断它的论元角色是"Time-within"。2.上级概念模块被多个不同论元角色共享,能够从论元角色中获取概念特征,有助于论元分类器。【说的很绕】
二 Methodology
模型架构如下图所示,包含三个组件:实例编码器(instance encoder)、层次模块注意力组件(hierarchical modular attention)、论元角色分类器。
实例编码器:
x = {w1, . . . , t, . . . , a, . . . , wn}:x表示句子,w表示词,t表示触发词,a表示候选论元;每一个命名实体都作为候选论元,对应一个样本;
句子编码器:将词序列编码为隐藏嵌入,分别使用CNN、Bert;
特征聚合器:直接使用动态多池化作为特征聚合器,动态多池化处理隐藏嵌入,再拼接语义信息得到实例嵌入
层次模块注意力组件:
上级概念模块:每个上级概念模块用一个向量表示,所有上级概念模块组成一个矩阵,值随机初始化后由训练决定,反映上级概念的语义特征;以隐藏嵌入和上级概念模块矩阵作为输入,通过多层感知机,将计算结果作为隐藏嵌入在概念模块上的注意力得分,反映隐藏嵌入与各个上级概念的相关性;
逻辑连接模块:一个论元角色属于多个上级概念模块,将隐藏嵌入在概念模块上注意力得分的平均值作为其在对应的论元角色上的注意力得分;
根据论元注意力得分,对隐藏嵌入加权平均,得到样本在每个论元角色上的面向角色嵌入
;
论元分类器:
将实例嵌入与面向角色嵌入拼接作为最终的特征,计算样本属于每个论元角色的概率,进行分类。
三 Experiments
3.1 实验设置
分别用CNN和Bert作为句子编码器,对应模型HMEAE(CNN)、HMEAE(Bert)。HMEAE(CNN)的参数大多与DMCNN一致;使用单纯的Bert+DMCNN作为baseline,命名为DMBERT。直接使用DMCNN和XXX【这个没看过】作为ED部分。
数据集:
ACE2005、KBP2016
概念层次设计:
基于经验,手动从标签中归纳出上级概念,一共归纳了8个上级概念。例如:”起点“、”终点“标签可以概括出”地点“上级概念。本文中概念层次结果无法推广到不同标签定义的其他数据集,但是定义方法简单。
超参数:
HMEAE (CNN):batchsize和开源代码中不同,这里是20,开源代码中是2;【都是20,自己改错了】
HMEAE (Bert):超参数和Bert(Base)一样,Bert输入序列中加入事件类型信息;代码未开源。
3.2 结果评估
单是使用Bert就能超过大部分baseline了,dbRNN也挺厉害
横坐标表示上级概念模块,纵坐标表示句子中的词,颜色表示词对应的隐藏嵌入的上级概念模块注意力得分。从图可以看出,与上级概念相关的词对应的得分高于无关的词,可知上级概念模块有用。