- 摘要
现存的event extraction方法只抽取本句子中event argument。但是很多任务情况下argument分散在多个句子中,event mention也在文本中多次出现。本文提出Doc2EDAG生成非循环图填充document-level EE。是一个no-trigger-word 的方法。数据集和代码(https://github.com/dolphin-zs/Doc2EDAG.)
- 介绍
金融公告越来越多特别是chinese financial announcements ,抽取这些announcement中的事件面临两个挑战:arguments-scattering 和 muti-event(同一事件出现多次)。如图对于文本中多次数显的equity pledge事件,argumen总是一直在变化。
前人大部分工作都在ACE2005上,整个数据集只注重从单个句子中抽取事件。但是financial document需要document-level EE。argument-scatter比multi-event更加难。本文提出Doc2EDAG解决这两个问题,模型的关键是将event table 转换为基于实体的有向无环图(entity-based directed acyclic graph)将表填任务转换为path expand任务。为了更好的扩展path Doc2EDAG编码实体、document-level context和memory mechanism。使用no-trigger的方将文本map到event table。
- 相关工作
最近信息抽取构建了联合模型能同时抽取实体并且识别结构。Ren等集中于抽取实体和实体间关系。一些也同时抽取实体和事件,但是没有考虑argument scatter问题。另一个问题是缺少训练数据,distant support 结合一些 简单的约束规则效果很好。
- 文本级事件标注
首先做文本级事件标注。为了保证标注效率使用了两个约束条件:①key role必须有argument 其他role可以是空。②匹配到的argument必须大于某个阈值。
DEE Taks Without Trigger Words:需要三个子任务①抽取entity作为argument candidate ②逐个事件判断文本是否触发了这个事件。③事件填充,将argument填入表格。
- Doc2EDAG
key idea 是转换表格化的事件records 到 基于实体的有向无循环图,并且让模型学会基于document-level context生成EDAG。文件包含两个关键阶段:document-level entity encoding 和 EDAG generation。在此之前先介绍 input representation 和 entity recognition。
输入表示input recognition:
每个文本表示为d = [si,s2,…,sns],最长的文本有ns个句子,每个句子表示为si = [wi,1,wi,2,…,wi,nw]最长的句子有nw个词wi,j表示第j个句子的第i个词。
entity recognition 实体识别:
基于 bilstm-CRF 改编为 transformer-CRF,并且将这个transformer称为transformer-1 ,将role标签加上BIO作为CRF的训练标签。损失函数记为Ler
Document-level Entity Encoding****:
解决argument-scatter需要使用全局信息,于是使用document-level entity encoding 编码抽取到的entity mention、context 产生一个dw的向量,用特殊标签表示。
entity & sentence embedding 首先通过在entity mention上使用最大池化得到固定长度的entity mention表示dw。也在整个句子上使用最大池化得到ci∈Rdw。
document-level encoding上面的到e和c都只包含local information(句子级别),使用transformer-2,add表示句子位置的向量。经过transformer-2 之后更具相同的surface name 使用最大池化得到ee长度为ne。
EDAG generation
在cd的基础上 使用一个线性分类器分类事件。然后对每个识别出来的事件生成EDAG。
EDAG building , 模型训练之前需要基于tabular event record 构建 EDAG。对每个事件类型自定义argument 顺序,按照这个顺序转换为linked list,每个节点一个实体或者一个空argument NA。最后将前缀相同的linked list融合,如下图。
任务分解:将填表任务分解为path-expanding 任务。假设trigger是第一个节点,就能每次一个role扩展节点,每次扩展的时候EDAG的每个叶子节点都根据当前role扩展哪一个实体。如果没有实体可以扩展就连接一个NA节点。
Memory 记录已经扩展了的实体。使用随机初始化的向量m和ed作为一个记忆状态,每次扩展路径的时候都添加对应的role标签或者NA的零向量。
path expanding:每个路径扩展视为一个二分类,经过transformer-3之后选取er使用一个二分模型判断是否扩展路径。
损失函数 event trigger Ltr 、EDAG 生成 Ldag 、 以及实体识别的Ler 三个损失函数分别乘上对应的系数之后求和。
给定一个文本,首先EDAG识别entity mention,编码为document-level contexts,然后针对触发的事件生成EDAG。训练的时候可以使用ground-truth和EDAG,但是训练的时候不能,可能导致错误产生,我们使用了scheduled sampling将entity mentions转换到模型能识别的数据。
扩展错误的节点对结果影响比较大,需要设置一个参数θ。
标注数据的质量和比例:
试验结果: