[中文事件抽取] Doc2EDAG: An End-to-End Document-level Framework for Chinese Financial Event Extraction

EMNLP2019 Doc2EDAG: An End-to-End Document-level Framework for Chinese Financial Event Extraction
Author Shun Zheng, Wei Cao, Wei Xu, Jiang Bian
url https://www.aclweb.org/anthology/D19-1032.pdf
Code https://github.com/dolphin-zs/Doc2EDAG

大多数现有的事件抽取方法只抽取句子范围的事件参数。但是这种句子级别的事件抽取方法难以解决新兴应用(如金融、法律、卫生等)数量激增的文档。它们的事件论元分散在不同的句子中,甚至多个事件实例在同一文档中同时存在。为了解决这些问题,我们提出了一种新的端到端模型Doc2EDAG,它可以生成一个基于实体的有向无环图来有效地实现文档级事件抽取。此外,我们提出了一个无触发词设计的文档级事件抽取任务,以简化文档级事件标注。为了证明模型的有效性,我们构建了一个包含有上述挑战的中国财务公告的大型真实数据集。综合分析的大量实验证明了Doc2EDAG相对于最新方法的优越性。

1 Introduction

鉴于金融领域文档及业务的特殊性,在做事件抽取的过程中存在一些挑战:

  • 事件元素分散(Arguments-scattering):指事件论元可能在不同的句子(Sentence)中
  • 多事件(Muti-event):指一个文档中可能包含多个事件
    [中文事件抽取] Doc2EDAG: An End-to-End Document-level Framework for Chinese Financial Event Extraction_第1张图片
    以该图为例,一个文档中有两个股权质押的事件实例,对应Event Table of Equity Pledge表中也就有两条Event record。该事件的角色包括抵押者、抵押的股权量、承押者、开始时间、结束时间、持有股份总数、持有股份占公司股份的比例。
    我们以ID作为句子索引,用相应的标记代替实体提及,将关键事件语句范围之外的事件参数颜色显示为红色。则每个事件的论元都可能分布在多个句子中,且大概率是分散分布的。

现如今的研究多是在句子范围内标记事件论元,我们把这类任务称为句子级事件抽取,它显然忽略了我们上面提到的挑战。

在本文中,我们提出了一个新的端到端模型Doc2EDAG,以解决文档级事件抽取(DEE)的独特挑战。该模型的核心思想是将事件表转换为基于实体的有向无环图(EDAG)。EDAG的形式可以将困难的事件表填充任务转换为多个基于实体的顺序路径扩展子任务,这些子任务更容易处理。
为了有效地支持EDAG的生成,Doc2EDAG使用文档级上下文对实体进行编码,并设计了路径扩展的记忆机制。此外,为了简化基于远程监督的文档级事件标注,我们提出了一种新的DEE形式化方法。该方法去除了触发词标注,并将DEE视为直接基于文档填充事件表。这种无触发词设计不依赖任何预定义的触发词集或启发式来过滤多个候选触发词,并且仍然完全符合DEE的最终目标,即将文档映射到底层事件表。

总的来说,本文的贡献在于:

  • 提出了一个新的模型Doc2EDAG,它可以直接基于文档生成事件表,有效地解决DEE的独特挑战。
  • 重新定义了一个没有触发词的DEE任务,以简化基于远程监督的文档级事件标记。
  • 为DEE建立了一个大规模的真实世界数据集,该数据集面临着参数分散和多事件的独特挑战,大量的实验证明了Doc2EDAG的优越性。

2 Preliminaries

我们首先阐明几个基本概念:

  • entity mention:实体提及是指一个实体对象的文本块
  • event role:事件角色对应事件表的预定义字段
  • event argument:事件论元是扮演特定事件角色的实体
  • event record:事件记录对应于事件表的一条记录,包含多个所需角色的论元

为了更好地阐述和评估我们提出的方法,我们在本文中利用了ChFinAnn数据。ChFinAnn文档包含中国股市上市公司的第一手官方信息,有数百种类型,如年报和盈利预测。在进行这项工作时,我们将重点放在那些与事件相关的,频繁,有影响力且主要由自然语言表达的事件上。

3 文档级事件标注

作为DEE的前提工作,我们首先在文档级别进行基于远程监督的事件标注。更具体地说,我们将表格记录从事件知识库映射到文档文本,然后将较为匹配的记录视为该文档所表示的事件。此外,我们采用了无触发词设计,并相应地重新设计了新的DEE任务,以实现端到端模型设计。

Event Labeling:
为了保证标记质量,我们对匹配的记录设置了两个约束

  • 预定义键的事件角色的论元必须存在
  • 匹配的论元的个数要大于某个阈值

这些约束的配置是特定于事件的。在实践中,我们可以对它们进行优化从而直接确保文档级别的标签质量。我们把满足这两个约束条件的记录视为匹配较好的记录,这些记录充当了受远程监督的基本事实。除了标记事件记录之外,我们将论元的角色分配给匹配的token,作为token-level实体标签。注意,我们没有显式地标记触发词。除了不影响DEE功能之外,这种无触发词的设计的另一个好处是基于远程监督的标注更容易,它不依赖于预定义的触发词词典或者手动引导的启发式方法来过滤多个潜在的触发词。

DEE Task Without Trigger Words:
我们将DEE的一个新任务重新定义为基于文档直接填充事件表,通常需要三个子任务:

  • 实体抽取:抽取实体提及作为候选论元
  • 事件检测:判断一个文档是否触发某个事件类型
  • 事件表填充:将论元填充到触发的事件对应的表中

这种新颖的文档级的事件抽取和传统的句子级事件抽取任务有很大不同,但是和上述基于远程监督的事件标签的简化方法是一样的。

4 模型

[中文事件抽取] Doc2EDAG: An End-to-End Document-level Framework for Chinese Financial Event Extraction_第2张图片
Doc2EDAG的核心思想是将表格式的事件记录转换为EDAG,并让模型基于文档级上下文学习生成该EDAG。根据Figure 2中的示例,Figure 3描述了EDAG生成的过程。Figure 4显示了Doc2EDAG的总体工作流程,其中包括两个关键阶段:文档级实体编码和EDAG生成。在详细介绍它们之前,我们首先描述两个预处理模块:输入表示和实体识别。

输入表示:
本文中,我们将文档表示为一系列句子。查找token embedding表 V ∈ R d w ∗ ∣ V ∣ V \in \mathbb{R} ^ {d_w * |V|} VRdwV,我们把文档表示为句子序列 [ s 1 ; s 2 ; . . . ; s N s ] [s_1;s_2;...;s_{N_s}] [s1;s2;...;sNs],每一个句子 s i ∈ R d w ∗ N w s_i \in \mathbb{R} ^ {d_w * N_w} siRdwNw 都是由token embeddings的序列组成的,如 [ w i , 1 , w i , 2 , . . . , w i , N w ] [w_{i,1},w_{i,2},...,w_{i,N_w}] [wi,1,wi,2,...,wi,Nw]。其中 ∣ V ∣ |V| V是词典的大小, N s N_s Ns N w N_w Nw分别是句子序列和token序列的最大长度, w i , j ∈ R d w w_{i,j} \in \mathbb{R} ^ {d_w} wi,jRdw是第 i i i个句子中的第 j j j个token的维度大小为 d w d_w dw的嵌入。

实体识别:
实体识别是一项典型的序列标注任务。我们在句子层面执行这项任务,并使用一种经典的方法BI-LSTM-CRF,该方法首先对标记序列进行编码,然后添加一个条件随机场层,以便进行序列标注。唯一的区别是,我们使用Transformer而不是原始的编码器。Transformer通过多头自注意力机制对嵌入序列进行编码,在它们之间交换上下文信息。由于Transformer的优越性能,我们将其作为本文的主要上下文编码器,并将本阶段使用的Transformer模块命名为Transformer-1。
对于每一个句子张量 s i ∈ R d w ∗ N w s_i \in \mathbb{R} ^ {d_w * N_w} siRdwNw ,我们通过 h i = T r a n s f o r m e r − 1 ( s i ) h_i = Transformer-1(s_i) hi=Transformer1(si)得到编码结果,其中 h i ∈ R d w ∗ N w h_i \in \mathbb{R} ^ {d_w * N_w} hiRdwNw具有相同的嵌入维度 d w d_w dw和序列长度 N w N_w Nw。在训练过程中,我们使用经典的BIO标注体系来对匹配的论元进行实体标注,并用CRF层包装 h i h_i hi得到实体识别的损失函数 L e r L_{er} Ler。最后使用维特比算法进行解码得到最优的标记序列。

4.1 文档级实体编码

为了有效地解决论元分散的问题,必须利用全局上下文来更好地确定实体是否扮演特定的事件角色。因此,我们使用文档级的实体编码来对这些上下文中提取的实体提及进行编码,并为每个具有不同实体名称的实体提及生成大小为 d w d_w dw的嵌入。

Entity & Sentence Embedding:
由于一个实体提及通常覆盖多个长度可变的token,我们首先通过对其覆盖的token执行最大池化操作,获得每个实体提及的固定大小的嵌入。比如,给定第 i i i个句子中覆盖第 j j j个到第 k k k个token的第 l l l个实体提及,我们对 [ h i , j , . . . , h j , k ] [h_{i,j},...,h_{j,k}] [hi,j,...,hj,k]进行最大池化,得到实体提及嵌入 e l ∈ R d w e_l \in \mathbb{R}^{d_w} elRdw。对于每个句子 s i s_i si,我们也对编码的token序列进行最大池化操作,得到一个嵌入 c i ∈ R d w c_i \in \mathbb{R}^{d_w} ciRdw。经过这些操作之后,实体提及和句子都被嵌入到 d w d_w dw维。

Document-level Encoding:
尽管我们得到了所有句子和实体提及的嵌入,但这些嵌入只对语句范围内的局部上下文进行编码。为了实现文档级上下文的感知,我们使用了第二个Transformer模块Transformer-2,以促进所有实体提及和句子之间的信息交换。在将它们输入到Transformer-2之前,我们添加了位置嵌入,以表示句子顺序。经过Transformer编码之后,我们再次使用max-pooling操作将具有相同实体名称的多个实体提及嵌入合并到单个嵌入中。在这一阶段之后,我们得到文档级上下文感知的实体提及 e d = [ e 1 d , . . . , e N e d ] e^d=[e_1^d,...,e_{N_e}^d] ed=[e1d,...,eNed]句子嵌入 c d = [ e 1 d , . . . , e N s d ] c^d=[e_1^d,...,e_{N_s}^d] cd=[e1d,...,eNsd],其中 N e N_e Ne是不同实体名称的数目。这些汇总的嵌入可用于下一步直接填充事件表。

4.2 EDAG Generation

[中文事件抽取] Doc2EDAG: An End-to-End Document-level Framework for Chinese Financial Event Extraction_第3张图片
在文档级实体编码之后,我们可以通过对句子张量 c d ∈ R d w ∗ N s c^d \in \mathbb{R}^{d_w * N_s} cdRdwNs进行最大池化从而获得文档嵌入 t ∈ R d w t \in \mathbb{R}^{d_w} tRdw,并在 t t t上堆叠线性分类器来对每种事件类型进行event-triggering classification。 接下来,对于每种触发事件类型,我们将学习生成EDAG。

EDAG Building:
模型训练之前,我们需要从表格事件记录中建立EDAG。对于每个事件类型,我们首先手动定义一个事件角色顺序。然后,我们按照此顺序将每个事件记录转换为论元的链接列表,其中每个论元节点要么是实体,要么是特殊的空论元NA。最后,我们通过共享相同的前缀路径将这些链表合并到一个EDAG中。由于EDAG的每个完整路径都对应事件表的一行,因此从给定的EDAG恢复表格式非常简单。

Task Decomposition:
EDAG旨在将困难的表填充任务简化为几个可处理的路径扩展子任务。然后一个自然的问题是任务分解是如何进行的,这可以通过下面的EDAG恢复过程来回答。假设事件触发作为起始节点(初始EDAG),则会出现一系列路径拓展子任务,并遵循预定义的事件角色顺序。当考虑某个角色时,对于当前EDAG的每个叶子节点,都有一个路径拓展子任务,该子任务决定扩展哪些实体。对于要展开的每个实体,我们为当前角色创建该实体的一个新节点,并通过将当前叶子节点连接到新实体节点来展开路径。如果没有实体可用于展开,则创建一个特殊的NA节点。当前的所有子任务完成后,我们移动到下一个角色,重复直到最后一个角色。在这项工作中,我们利用上述逻辑从推断时的路径拓展预测中恢复EDAG,并在训练时为每个子任务设置相关标签。

Memory:
为了更好地完成每个路径扩展子任务,关键是要知道路径中已经包含的实体。因此,我们设计了一种记忆机制,在开始时用句子张量 c d c^d cd初始化记忆张量 m m m,并在扩展路径时通过为NA论元附加相关实体嵌入或零填充实体来更新 m m m。通过这种设计,每个子任务可以拥有一个不同的记忆张量,对应于唯一的路径历史。

Path Expanding:
每次扩展事件路径时,都对每个实体进行二分类,展开(1)或不展开(0),即判断某个实体是否对应当前顺序下的event role。如果是就将该实体添加到EDAG中,如果没有任何实体能与当前event role匹配则将NA添加到EDAG中。为了实现对当前路径状态历史上下文当前事件角色的感知,我们首先将记忆张量 m m m和实体张量 e d e^d ed串联起来,然后添加可训练的event-role-indicator embedding,,并用第三个转换模块Transformer-3进行编码,以便于上下文感知推断。最后,我们从Transformer-3的输出中提取丰富的实体张量 e r e^r er,并在 e r e^r er上叠加一个线性分类器进行路径扩展分类。

Optimization:
对于事件触发分类,我们计算交叉熵损失 L t r L_{tr} Ltr。在EDAG生成过程中,我们计算每个路径扩展子任务的交叉熵损失,并将这些损失相加作为最终的EDAG-generation的损失 L d a g L_{dag} Ldag。最后,我们将 L t r L_{tr} Ltr L d a g L_{dag} Ldag和实体识别损失 L e r L_{er} Ler相加作为最终损失, L a l l = λ 1 L e r + λ 2 L t r + λ 3 L d a g L_{all}=λ_1L_{er}+λ_2L_{tr}+λ_3L_{dag} Lall=λ1Ler+λ2Ltr+λ3Ldag,其中 λ 1 λ_1 λ1 λ 2 λ_2 λ2 λ 3 λ_3 λ3为超参数。

Inference:
给定一个文档,Doc2EDAG首先从语句中识别实体提及,然后用文档级上下文对其进行编码,最后通过执行一系列路径扩展子任务为每个触发的事件类型生成一个EDAG。

Practical Tips:
在训练期间,我们可以利用ground-truth实体token和给定的EDAG结构。 在推断时,我们需要首先识别出实体,然后根据这些实体的嵌入顺序扩展路径以恢复EDAG。 训练和推断之间的这种差距可能会导致严重的错误传播问题。 为了缓解此类问题,我们利用计划采样(Bengio等人,2015)将文档级实体编码的输入从ground-truth entity mentions逐步转换为模型识别的提及。 此外,对于路径扩展分类,正样本的错误分类比负样本的错误分类更有害,因为前者会导致完全错误的路径。 因此,我们可以将 γ γ γ(> 1)设置为相关的交叉熵损失的负类权重。

你可能感兴趣的:(论文)