每天给你送来NLP技术干货!
paper: Doc2EDAG:An End-to-End Document-level Framework for Chinese Financial Event Extraction
link: https://aclanthology.org/D19-1032.pdf
code: https://github.com/ dolphin-zs/Doc2EDAG
本文是微软基于金融领域的数据,构建了一个端到端的事件抽取框架,模型主要分为三个以下部分Entity Recognition、Document-level Entity Encoding、EDAG Generation。即首先进行实体识别,然后对实体进行文档级别的编码,最后构建基于实体的有向无环图(EDAG)。
事件提取(EE)传统上被建模:
1.检测触发词
2.纯文本中提取相应的参数
在自然语言处理中起着至关重要的作用,因为它可以产生有价值的结构化信息,以促进各种任务,如知识库构建、问题回答、语言理解等。
在金融领域,EE可帮助人们提取有价值的结构化信息,以感知新兴的风险,并及时找到有利可图的机会。然而,鉴于在金融领域应用情感表达的必要性,财务文件的具体特征以及许多其他业务领域的具体特征,对情感表达提出了两个关键挑战,特别是元素分散和多事件。具体来说,第一个挑战表明,一个事件记录的参数可能分散在文档的多个句子中,而另一个挑战反映了一个文档很可能包含多个这样的事件记录。
例如此场景下的真实数据实例如下:
对于元素“Pledged Shares”来说,在句子级别是句子5中的[SHARE1],但是在文档级别下[SHARE2]也是正确的。同样的,对于“End Date”来说,句子级别是句子9中的 [DATE3],但在文档级别[DATE3]是错误的。
前人已经做了很多关于时间抽取的研究,多是基于句子级别的事件抽取sentence-level EE (SEE),但是存在元素离散的问题;后来提出了基于文档级别的事件抽取document-level EE (DEE) 。
本文提出了一个端到端的模型Doc2EDAG以解决文档级的事件抽取,此模型主要是将事件表格转化为一个有向无环图,以此将“填表格”的复杂任务转化为序列的路径扩展的子任务。上述做法的关键在于:
1 对实体进行“文档级”的编码
2 设计了一个记忆机制
3 不依赖于任何预定义的触发词
DCFEE模型(baseline)使用的数据:97%的文档只含有一个事件
本文使用的数据:70%的文档只含有一个事件,30%的文档含有多个事件
有几个关键的名词:
1)实体提及(entity mention):实体所在的文本段
2)事件角色( event role):事件表的预定义字段
3)事件元素(event argument):扮演特定事件角色的实体
4)事件记录( event record):事件表的条目,包含几个具有所需角色的参数
基于DEE的先决条件,本文首先在文档级别进行基于DS的事件标记。即,将事件知识库中的表格记录映射到记录文本,并将良好匹配的记录视为该文档表示的事件。此外,我们采用了一个无触发词的设计,并重新形式化一个新的DEE任务,实现端到端的模型设计。
匹配的记录有两个约束条件:
1)预定义的关键事件角色的元素必须存在(非关键事件角色可以为空),
2)匹配的元素的数量应该高于某个阈值。
这些约束的配置特定于事件,可以调整以直接确保标签质量。此外,我们元素的角色作为token级别的标记分配给实体。无触发词的设计使得做标记更容易,它不依赖于预定义的触发词字典或手动管理的启发式来过滤多个潜在的触发词。
我们将DEE任务重新形式化为:基于文档直接填充表格。
分为三个子任务:
1)实体提取,提取实体提及作为元素候选对象,
2)事件检测,判断文档是否为每个事件类型所触发的,
3)事件表格填充,将元素填充到被触发的事件表中。
这个新的DEE任务与具有触发词的普通SEE有很大的不同,但与上述简化的基于DS的事件标记一致。
Doc2EDAG模型的关键思想是,将事件记录的表格转换为EDAG,并让模型学习基于文档级上下文生成此EDAG。下图描述了一个EDAG生成过程:
下图显示了Doc2EDAG的总体工作流程:
它由两个关键阶段组成:
文档级实体编码(第5.1节)和EDAG生成(第5.2节)。本节详细阐述它们之前,首先描述两个预处理模块:输入表示和实体识别。
本文将一个文档表示为一串句子序列。token的向量嵌入为:
将文档 d 表示为:
其中s为某一个句子:
句子s由多个token组成:
实体识别是一种典型的序列标记任务。经典的方法是BiLSTM-CRF,而本文我们使用Transformer代替编码器BiLSTM,利用Transformer的多头自注意机制获取上下文信息,此阶段的Transformer模块命名为Transformer-1,并交换token的词向量之间的信息,且:
在训练过程中,我们使用经典的BIO(Begin, Inside, Other) 实体标签,并用CRF层包裹hi以获得实体识别损失。
为了解决“元素离散”的挑战,须利用全局上下文来识别实体是否为某个特定的事件角色。因此,我们利用文档级的实体编码来提取实体,并为每个实体生成相同大小的词向量。
实体和句子嵌入
由于一个实体通常覆盖多个不同长度的token,我们首先通过对实体中的所有token的词向量进行最大池操作,为每个实体获得一个固定大小的词向量,使得句子和实体具有相同维度大小的词向量。
文档级编码
虽然得到了所有句子和实体的词向量,但这些词向量只编码了在句子范围内的上下文。为了使模型学习到文档级的上下文信息,我们使用了第二个Transformer模块,Transformer-2,使得所有实体和句子之间进行信息交换。在将它们输入Transformer-2之前,我们给它们添加句子位置嵌入,以明示句子顺序。输出Transformer-2之前,我们再次利用最大池操作将具有相同实体名称的多个词向量合并到一个词向量嵌入中。
在文档级实体编码之后,通过对句子的最大池操作来获得文档的词向量嵌入,并在其上堆叠一个线性分类器,对每种事件类型进行事件触发分类。接下来,对于每个被触发的事件类型,我们将学习生成一个EDAG。
EDAG建立
在模型训练之前,我们需要从表格化的事件记录中构建EDAG。对于每个事件类型,我们首先手动定义一个事件角色的顺序。然后,按照这个顺序,我们将每个事件记录转换为元素的有序列表,其中每个元素节点要么是个实体,要么是一个特殊的空参数NA。最后,我们通过共享的前缀路径,将这些链接列表合并到一个EDAG中。由于EDAG的每个完整路径都对应于事件表的一行,因此从给定的EDAG中恢复表格式很简单
任务分解
EDAG格式旨在将表格填充任务,简化为几个路径扩展子任务。然后,任务分解可通过EDAG恢复过程来回答。假设事件触发为起始节点(初始EDAG),则将按照预定义的事件角色顺序出现一系列路径扩展子任务。
当考虑某个角色时,对于当前EDAG的每个叶节点,都有一个“路径扩展”子任务来决定要扩展哪些实体。对于要展开的每个实体,我们为当前角色创建该实体的一个新节点,并通过将当前叶节点连接到新的实体节点来展开路径。如果没有任何实体是有效的扩展,我们将创建一个特殊的NA节点。当当前角色的所有子任务完成后,我们将移动到下一个角色并重复到最后一个角色。在这项工作中,我们利用上述逻辑从推理时的路径扩展预测中恢复EDAG,并在训练时为每个子任务设置相关的标签。
记忆机制
为了更好地完成每个路径扩展的子任务,关键在于知道路径中已经包含的实体。因此,我们设计了一种内存机制,它在开头使用句子张量c初始化内存张量m,并通过附加NA参数的零填充实体来扩展路径时更新m。通过这种设计,每个子任务都可以拥有一个不同的内存张量,对应于唯一的路径历史。
路径扩展
对于每个路径扩展子任务,我们将其形式化为多个二进制分类问题的集合,即预测所有实体的扩展(1)或不扩展(0)。为了感知当前路径状态、历史上下文和当前事件角色,我们首先将内存张量m和实体张量e连接起来,然后用可训练的事件角色指示器词向量嵌入把它们加起来,并使用第三个Transformer模块Transformer-3对它们进行编码,以促进上下文感知推理。最后,我们从Transformer-3的输出中提取丰富的实体张量,并在e上叠加一个线性分类器来进行路径扩展分类。
对于事件触发的分类,我们计算了交叉熵损失。在EDAG生成过程中,我们计算了每个路径扩展子任务的交叉熵损失,并将这些损失相加为最终的EDAG生成损失。
推理过程
过程为:给定一个文档,Doc2EDAG首先从句子中识别实体提及,然后用文档级上下文对它们进行编码,最后通过执行一系列路径扩展子任务,为每个触发的事件类型生成一个EDAG。
在训练过程中,我们可以同时利用真实实体标记和给定的EDAG结构。在推理时,我们需要首先识别实体,然后根据这些实体的嵌入按顺序展开路径,以恢复EDAG。这个训练之间的差距和推理可能会导致严重的错误传播问题。为了缓解这些问题,我们利用计划抽样( scheduled sampling)逐步将文档级实体编码的输入从真实的实体,切换到模型识别的实体。
此外,对于路径扩展分类,False Positive比 False Negative更有害,因为前者可能会导致一条完全错误的路径。因此,我们可以将γ(>1)设置为相关交叉熵损失的负类权重。
在本节中,我们将提出全面的实证研究来回答以下问题:
1)当面对DEE的特定挑战时,Doc2EDAG能在多大程度上优于最先进的方法?
2)当同时面对元素离散和多事件的挑战时,不同的模型表现如何?
3)Doc2EDAG的各组成部分的重要性?
具有事件标记的数据集
我们利用10年(2008-2018)ChFinAnn4文档和人类总结的事件知识库来进行基于DS的事件标记。我们关注五种事件类型:股权冻结(EF)、股权回购(ER)、股权减持(EU)、股权增持(EO)和股权质押(EP),它们属于监管机构需要披露的重大事件,为确保质量,我们为匹配的文档-记录对设置了约束条件。此外,我们直接使用字符标记化,以避免中文分分割工具的错误传播。
最后,我们总共获得了32040个文档,这个数字是DCFEE的大2976倍,,大约是ACE2005的599的53倍。我们根据时间顺序将这些文档按8:1:1的比例分为训练、开发和测试集。下表显示了该数据集上,每个事件类型的文档数量和多事件比率(MER)。一些文档可能同时包含多种事件类型。
为了验证基于DS的事件标记的质量,我们随机选择100个文档并对它们进行手动注释。通过将DS生成的事件表作为预测,并将人类注释的事件表作为真实数据,我们基于下面介绍的度量来评估标记质量。下表显示了这种近似的评估,我们可以观察到ds生成的数据相当好,实现了高精度和可接受的召回率。在以后的实验中,由于我们直接使用自动生成的测试集进行评估,因为它的覆盖范围非常广泛。
Baselines主要有DCFEE-O 、DCFEE-M、GreedyDec,其中DCFEE-O只从一个关键事件句子中产生一个事件记录,而DCFEE-M试图通过与关键事件句子最近的相对距离来获得多个可能的元素组合,GreedyDec通过使用已识别的实体角色来验证端到端建模的必要性,它只贪婪地填充一个事件表条目。
具体来说,Doc2EDAG的F1分别在事件EF、ER、EU、EO和EP事件上,比DCFEE-O提高了19.1, 4.2, 26.5, 28.4 和13.4。主要归功于Doc2EDAG的文档级端到端建模。
此外,由于我们处理的是自动生成的数据,直接的文档级监督比DCFEE中使用额外的句子级监督更健壮,DCFEE假设包含大多数事件参数的句子是关键事件1。这一假设不利于一些事件类型,如EF、EU和EO,其中DCFEE-O甚至不如最直接的基线Greedy12。此外,DCFEE-O比DCFEE-M取得了更好的结果,这表明单纯从关键事件句子中猜测多个事件并不是很有效。将Doc2EDAG与高精度但低召回率的GreedyDec进行比较,我们可以清楚地看到文档级的端到端建模的好处。
我们将测试集划分为一个单事件集(其中包含只有一个事件记录的文档),和一个多事件集(包含其他事件集),以显示同时存在元素分散、多事件时,问题的困难性。下表显示了不同场景下的F1得分。
尽管Doc2EDAG仍然在所有情况下保持着最高的提取性能,但由于多事件集的提取性能都显著下降,因此多事件集极具挑战性。特别是GreedyDec,对于多事件挑战没应对有机制,性能下降最大。DCFEE-O下降较少,但相比Doc2EDAG仍然差得远。在多事件集上,Doc2EDAG的F1平均比最佳基线DCFEE-O平均增加了17.7分。
对于文档事件抽取(DEE)的建模,我们提出了一个新的端到端模型Doc2EDAG,该模型与一个新的任务形式化相关联,而不涉及触发词,以简化基于DS的标记。
为了验证该方法的有效性,我们在金融领域建立了一个大规模的真实世界数据集,并进行了广泛的实证研究。如果没有任何特定领域的假设,我们的一般标记和建模策略可以直接使其他领域的从业者受益。由于这项工作为端到端DEE显示了良好的结果,将Doc2EDAG的输入从纯文本序列扩展到格式丰富的序列,将作为未来的工作来探索。
投稿或交流学习,备注:昵称-学校(公司)-方向,进入DL&NLP交流群。
方向有很多:机器学习、深度学习,python,情感分析、意见挖掘、句法分析、机器翻译、人机对话、知识图谱、语音识别等。
记得备注呦
整理不易,还望给个在看!