论文笔记 | 文档级别的中文金融事件抽取系统

原论文:DCFEE: A Document-level Chinese Financial Event Extraction System based on Automatically Labeled Training Data (ACL 2018)

原论文的著作权属于中科院自动化所,本文仅进行了学习以及笔记工作。

1. 前言

我个人认为,事件抽取(Event Extraction)主要存在两方面的问题。第一个方面,训练数据的严重不足。拿经常用来做实验的公开数据集 ACE 2005 来说,各语言的文档数不过几百篇,如果要运用机器学习神经网络的方法进行测试,这样的数据量是不足够的。此外,ACE 2005中提供的事件不具备在垂直领域的可拓展性。第二个方面,事件抽取的实用性还不够。我之前看到过的事件抽取方向的论文,都是在句子的层面进行的事件抽取,但是这样有很明显的缺陷:一个事件涉及到触发词(Trigger)和多个事件元素(Argument),我们很少能够遇到触发词和所有的事件元素都出现在同一个句子中这种非常理想的情况,也就是说,只从一个句子出发进行事件抽取,很容易抽取不出来Argument的信息。

论文笔记 | 文档级别的中文金融事件抽取系统
一个事件出现在多个句子中

在这篇论文中,研究人员描述了一个从文档层面出发进行事件抽取的系统,此外,他们还将远程监督这(Distance Supervision)一方法应用到事件抽取领域,使得训练集的自动拓展在一定程度上成为了可能。可以说这篇论文试图同时解决上面提到的事件抽取存在的两方面问题。

2. 思路

2.1 扩充训练语料

利用远程监督(Distance Supervision)的方法进行训练数据集的扩充。远程监督是一种训练集扩充的方法,在关系抽取和事件抽取任务中都已经得到了应用。我们先拿关系抽取中的远程监督举例:

论文笔记 | 文档级别的中文金融事件抽取系统
远程监督辅助关系抽取

在已有的数据库Freebase之中,我们已知Steve Jobs 与 Apple 具有founders关系,并且Freebase中提供了相关的表示founders关系的样本句子。但是我们觉得样本数量过少,希望能够根据已有知识来扩展一下数据集,以方便我们模型的训练。我们从外界获得大量的文本,进行关键词的匹配,只要是在同一句话中同时出现了Steve Jobs 以及Apple 这两个实体,我们就假设这句话表达了二者之间具有的founders关系,对这句话进行标注,并加入到训练数据集之中。

诚然,使用这种方法一定能够对数据集进行扩充,但是也存在一个比较明显的问题:有可能引入错误标注数据。就比如上图”Mentions from free tests”中的两个句子,这两个句子中,Steve Jobs和Apple同时出现,但是只有第一个句子表达了founders这一关系,第二个句子并没有。远程监督的方法会将这两个句子都标注为founders关系,加入语料库,这就引入了错误标注的样例。错误的标注会在训练的过程中对模型产生误导,影响未来的预测结果。有很多论文提到了如何去除错误标注所带来的影响,在这篇笔记中不过多赘述。此外,本篇论文中并未提到错误标注的影响,只考虑到了远程监督对数据集起到的扩充效果。

2.2 两层事件抽取

从句子和文档两个层面进行事件抽取,并辅助以元素补全(Argument Completion)手段,进行文档级别的事件抽取,避免了从一个句子中无法抽取出完整事件信息的弊病。

3. 模型

论文笔记 | 文档级别的中文金融事件抽取系统
系统整体结构

上图展示了本论文模型的整体架构,可以分两个部分看,第一个部分是数据生成,即通过远程监督进行数据标注,并生成句子级别的和文档级别的标注数据;第二个部分是事件抽取,是两个独立训练的部分,分别通过句子级别的标注数据和文档级别的标注数据进行训练。

3.1 数据生成

论文笔记 | 文档级别的中文金融事件抽取系统
数据生成部分

数据生成需要两个数据集合:一个是人工编写的,结构化的金融事件知识库,这个库中包含着大量的结构化金融事件,并且对每一个事件都针对其Trigger和Arguments进行了详细的记录;需要的另一个数据集合是公司的金融公告,用来进行与知识库中的事件进行匹配,以便按照远程监督的原则生成数据集合。生成的主要步骤,按照我个人的理解,总结如下:1. 将文档切分成一个个的句子;2. 对句子进行Trigger的匹配;3. 匹配Argument。这个步骤完成后,句子级别的标注数据就已经产生了。之后,我们还需要进行文档级别的标注。对于一个文档,我们只定义其中的一个句子作为文档中的正例,即最能表达文档中事件的一句话,其他句子均为负例。至于如何判断正负例,我自己的理解是,这句话如果包含了trigger和事件中最重要的几个Arguments(比如涉及的企业,股权数量),那么这个句子就是正例,其他的句子就自动被处理为负例。自此,对一篇文档的标注就完成了。

3.2 事件抽取

论文笔记 | 文档级别的中文金融事件抽取系统
事件抽取模型

事件抽取模型也分成两个步骤,一个是黄色框的句子级别的抽取,一个是绿色框的文档级别的抽取。

句子级别的抽取采用了在序列标注领域有着非常出众表现的Bi-LSTM+CRF模型,序列标注模型在命名实体识别(NER),事件抽取(EE)方面都有着广泛的应用。通过将句子切分成字符,以字符的形式输入模型,我们最终可以在输出端得到字符的BIO标注,Trigger和Arguments可以用这种方法进行抽取。之后,我们将SEE的输入和输出分别向量化,并将两个向量拼接在一起,得到DEE的输入。论文中并未提到向量化的方法。DEE的目标是给定一个句子及其标注,可以判断这个句子是否是文档中的正例。通过DEE,我们可以得到文档的中心事件。DEE实质上是一个卷积神经网络,具有一个输入层,一个卷积层以及一个二分类的输出层。在得到文档级别的标注后,我们已经知道了文档的核心事件是什么,剩下要做的就是进行元素的补充(Argument Completion),使整个事件更加完整。比如在图中,sn+1中包含着事件的时间信息,但是却不在正例之中。这时,我们假设这个时间涉及的事件就是我们的中心事件,使得中心事件中的时间信息能够得到补足。

4. 应用

论文笔记 | 文档级别的中文金融事件抽取系统
demo

论文中还提供了一个Demo,通过Demo,我们可以看到,整个事件都能被抽取出来,包括不在中心事件句子中的时间信息。

如果有错误和纰漏,希望大家批评指正。