事件抽取是信息抽取研究中一项重要且具有挑战性的任务,在信息检索、智能问答和知识图谱构建等方面有着广泛的实际应用。
关于事件抽取,我们在之前的事件图谱系列文章中也做了多篇介绍。
事件是指某件具体事情的发生,描述事件的信息包括;事件发生的时间和地点、事件的内容和状态、事件的一个或多个参与者等。事件抽取任务旨在将此类事件描述信息从非结构化纯文本中提取为结构化形式。
事件抽取根据是否有预先定义好的事件模式或事件schema,可划分为封闭域事件抽取和开放域事件抽取;
从更细粒度的维度,根据文本的长度和事件的数量,可划分为句子级事件抽取和文档级事件抽取;根据标注数据的充足与否,可划分为多样本事件抽取、少样本事件抽取和零样本事件抽取。
其中文档级事件抽取、少样本抽取等任务更加复杂且具有挑战性,在本文中主要关注封闭域的正常句子级事件抽取任务,总结一些常用的事件抽取方法。
本文仅列举了几个经典的事件抽取模型,清华开源了OmniEvent事件抽取工具包,支持事件抽取、事件检测和事件论元抽取任务的中英文常用数据集,覆盖本文列举的基于分类、序列标注、阅读理解、序列生成四种主流事件抽取算法模式。
本文由知乎博主gulipa整理形成,具有很好的参考价值,本期文章进行介绍,供大家参考。
一、事件抽取定义
ACE将事件定义为:事件是一种特殊形式的信息,指在特定时间、地点,并涉及一个或多个参与者的某件事的特定发生, 通常可以描述为状态的变化。ACE也定义了多种事件类型以及事件的模板:ACE2005事件类型及模板。
如下图所示是一个事件抽取的例子,描述事件的句子被称为事件提及(Event Mention),从图中可以明显的看到事件抽取是从非结构化的文本中将结构化的事件抽取出来,一个结构化的事件由事件触发词、事件类型、事件要素/论元、事件论元角色等信息组成。
图1. 事件抽取样例
1、事件抽取的术语
事件指称/提及(Event Mention):描述了事件的短语或句子文本,包括事件触发词和元素
事件类型(Event Type):发生事件的类别,描述事件的性质
事件触发词(Event Trigger):触发词是表达事件发生的名词或动词,是决定事件类型核心的特征词
事件元素/论元(Event Argument):事件主要属性,包括实体、非实体参与者、时间等要素
论元角色(Argument Role):论元与其参与事件之间的关系
2、Schema限定的事件抽取的子任务
触发词识别(Trigger identification):触发词是事件抽取的核心单元,能够清晰地表达一个事件的发生, 触发词识别子任务是从文本中找到触发词。
事件分类(Event classification):判断每个句子是否包含事件,以及确定该句子所属的一种或几种事件类型。
论元识别(Argument identification):从文本中识别某个事件类型所包含的所有论元,论元的识别往往依赖于事件分类和触发词识别的结果。
论元角色分类(Argument role classification):对文本中识别的每个论元进行分类,角色类别是基于事件抽取schema中的定义。
3、事件抽取的类型
同一文本中往往包含多个事件结构,带来了事件之间的关联和重叠,通常来讲事件抽取包括三种类型,如下图所示:
平坦事件(Flat Event):正常事件类型,多个事件之间触发词、论元等事件元素没有重叠关联
重叠事件(Overlapped Event):句子中多个事件共享一个触发词,通过同一个触发词识别
嵌套事件(Nested Event):句中多个事件共享同一论元,即一个论元参与多个事件
图2. 三种事件类型示例,包括:(a) 平坦事件、(b) 重叠事件、 (c) 嵌套事件
二、事件抽取方法总结
此前在NLP中实体关系三元组抽取模型范式总结文章总结了关系抽取的方法,其实同属于信息抽取领域,事件抽取的方法和关系抽取有很多相似的地方,比如,事件抽取的模型也有Pileline和Joint两种模式,事件抽取的解码也包括了分类、序列标注、阅读理解、结构生成等方式,但事件抽取需要抽取的元素和识别的关系更复杂。
1、Pipeline & Joint
1)Pipeline-based方法
Pipeline-based的方法将事件抽取分解为多个独立子任务,并且每个任务看做分类问题,即将事件抽取转化为多阶段的分类问题(Multi-stage Classification Problem),如图 3 (a) 所示。
句子经过编码器编码后,进行如下的抽取步骤:
Trigger识别与分类:检测识别触发词trigger,并基于trigger进行事件类别分类;
Argument识别:基于trigger和事件类型判断句中的词是否属于事件的论元,识别事件论元;
Argument角色分类:对识别的论元进行角色分类,确定论元在事件中的角色类别。
Pileline方法的缺点:
误差传递:Pipeline的本质的问题,级联模型trigger分类阶段的错误、遗漏等误差会传递至argument分类阶段,无法被弥补召回,影响整体的性能; 缺乏交互:各个子任务相互独立,缺乏依赖和交互,忽略了不同子任务间的关联和影响。
2)Joint-based方法
为了缓解 Pipeline 模式的误差累计问题,Joint 模型被提出和广泛的研究。如图 3 (b) 所示,Joint-based 的方法在第一阶段首先根据候选的 trigger 和实体识别句中的 trgger 和 argument;为了缓解事件类型预测的误差传递,在第二阶段模型同时进行 trigger 分类和 argument role 分类,两个分类子任务联合优化学习。
Joint-based方法相对Pileline-based方法,减少了子任务模型的数量,增强了不同子任务模块之间的关联和交互,缓解了误差累计问题,但是许多方法其实仍然存在误差传递的问题,不能避免事件类型预测错误对论元抽取性能的影响。
此外,这些方法不能在不同事件类型之间共享信息并独立学习每种类型,这不利于仅使用少量标记数据进行事件提取。
图3. Pileline-based和Joint-based事件抽取示意图
2、抽取方法总结
事件抽取往往先将CNN、RNN、Transformer等模型作为编码器对文本编码,然后通过解码器判别事件类型、抽取事件论元的内容。许多研究提出不同的解码抽取方法,最早将事件抽取看做多分类问题,对事件类型和论元角色进行分类,但分类的方法依赖于实体识别预先抽取的事件元素,存在明显的误差累计问题。
为此,基于序列标注的事件抽取方法被提出,在论元抽取时标注论元的起始位置,同时实现论元的识别与角色分类。为了学习事件类型与论元角色,以及论元间的依存关系,基于阅读理解的事件抽取方法被提出。
最近,生成式信息抽取范式开始发展,基于生成的事件抽取方法被提出,能够统一建模不同场景、任务、schema下的抽取任务,生成预测不同的标签。
图4. 基于分类、序列标注、阅读理解、生成的事件抽取方法示意图
1)Classification-based Methods
基于分类的事件抽取方法需要利用命名实体识别预先从文本中抽取出时间、地点、命名实体、以及非实体事件元素等构成候选事件论元集合m,接下来的抽取主要分为两个个步骤:
事件类别分类:从句子中识别触发词trigger,并基于触发词进行事件分类,预测事件类型ei;
论元角色分类:判断候选论元m中属于事件ei的论元,对论元进行角色分类,预测论元角色ri,j
图5. 基于分类的事件抽取示意图
分类方法缺点:
不能解决overlapped事件和nested事件的抽取;
存在明显的误差累计问题:事件论元识别和角色分类依赖于额外的命名实体识别模型的提取结果,即事件论元识别与论元分类是严重分离的,导致误差累计严重,性能较差;
分类方法泛化能力较差:基于分类的方法在遇到新的事件类型或论元类型时只能重新训练,泛化能力差。
2)Sequence Labeling-based Methods
基于序列标注的抽取方法其实是词级别的多分类问题,该方法不再依赖于额外的实体识别模型提取候选论元,而是将论元识别和角色分类统一至序列标注这一过程。
首先模型仍然是识别句子中的触发词并进行事件分类,确定事件类型后,对句子进行词级别的序列标注,这一过程和命名实体识别是一样的,将论元角色类别和BIO标签组合分配给每一个词,从而获得事件的论元及其角色类别。
图6. 基于序列标注的事件抽取示意图
序列标注方法缺点:
不能解决overlapped事件和nested事件的抽取;
仍然存在误差累计:实体类型到论元抽取过程存在事件类型的误差;
传递泛化性差:序列标注本质还是分类模型,训练好的模型无法处理新的事件类别和论元角色
3)Machine Reading Comprehension-based Methods
事件抽取可以看做多个子任务的顺序执行:trigger识别 -> trigger分类 -> 论元识别 -> 论元角色分类。基于阅读理解的方法将每个子任务转化为阅读理解问题,整个事件抽取过程就可以看做多轮问答任务的执行。
每个子任务抽取阶段都有对应的文本模板,通过在问题模型中嵌入识别的trgger、不同的事件类别、论元角色类别等信息构造问句与输入句子拼接进行答案生成或者答案片段的抽取,最终迭代的完成事件抽取。
图7. 基于阅读理解的事件抽取示意图
阅读理解方法优点:
可以解决falt事件、overlapped事件和nested事件的抽取;
可以学习事件类别和论元类别标签的关联关系:事件类别会出现在论元角色分类的问句中,已抽取的论元也可出现在后续论元抽取的问句中,直接建模了事件类别与论元角色,以及事件论元之间的依赖关系。
泛化性强,模型可直接应用于新的事件类型和论元角色:问句中可以为新的类别融入外部知识和信息。
阅读理解方法缺点:
推断计算效率低:在进行事件分类和论元角色分类时,需要将每个事件类别和论元角色类别进行问题构造,并与句子拼接进行单独判断,计算复杂度增加。
4、Generation-based Methods
基于生成的方法是不同于分类、序列标注和阅读理解的事件抽取新范式,它不再将事件抽取分解为触发词提取、论元识别、论元分类等不同的子任务和预测标签,而是在sequence-to-structure架构中对整个事件提取过程统一建模,并且所有触发词、论元及其角色类别标签都作为自然语言词统一的生成,以端到端的方式从文本中提取事件。
如下图所示,基于sequence-to-structure生成的方法直接生成所有论元及其角色。 它通常采用BART、T5等encoder-decoder模型,这是一种将文本转换为结构化形式的简单方法。
图8. 基于序列生成的事件抽取示意图
生成方法的优点:
理想情况下可以解决falt事件、overlapped事件和nested事件的抽取;
端到端的统一建模:不需要将事件抽取分解为多个子任务,避免了不同任务间的误差传播,也不需要人工设定不同任务组件间的信息共享和决策依赖关系,避免次优和不灵活的模型结构。 生成方法的缺点:
生成规范事件结构较困难:生成模型生成的事件往往存在不准确、事件格式不规范、生成内容混乱不可控的问题,模型训练难度高,当前生成式抽取方法还未能完全超越抽取式抽取方法。
三、常用的算法模型举例
表1. 基于深度学习的事件抽取模型算法
1)DMCNN:Event Extraction via Dynamic Multi-Pooling Convolutional Neural Networks, ACL 2015
[论文动机]:
① 事件抽取依赖于两类重要特征:一类是词汇级特征(lexical-level features),包括词性、实体信息、以及形态特征等,用于捕捉词的语义和背景知识信息;另一类是句子级特征(sentence-level features),即句子内部的上下文特征和句法特征,旨在从更大的视野挖掘事件元素的关联。
② 同一个句子中可能包含多个事件,同一元素在不同事件中扮演不同的角色,而传统的CNN使用一个最大池化获取固定的特征表示句子,无法同时提取共享元素的多个事件。
论文提出了一个基于词表示模型(Word-representation Model)和动态多池化卷积神经网络(Dynamic Multi-pooling Convolutional Neural Network, DMCNN)的事件抽取方法。该方法能够同时自动提取词汇级和句子级的特征,并且能够根据不同事件触发词和论元动态捕捉更重要和有价值的特征信息。
事件抽取被看做为一个两阶段多分类问题:首先触发词分类(trigger classification),利用DMCNN对句子中每个词进行分类识别事件触发词;
然后进行论元分类(argument classifification),利用相似的DMCNN将元论元分配给已识别的事件触发词并对其论元角色进行分类。
模型结构如下图所示,主要包括以下四个部分:
Word Embedding Learning:使用Skip-gram模型预训练的词向量作为词的初始化特征。
Lexical-Level Feature Representation:将词与其上下文词的嵌入拼接作为词汇级特征向量。
Sentence-Level Feature Extraction:利用设计的DMCNN提取句子级特征表示。类似TextCNN直接将传统的CNN应用于句子,只能获得唯一最重要的特征信息表示句子,无法解决多事件抽取的问题。为此将CNN中在对句子进行一维卷积操作后的最大池化层换成设计的动态多池化层,能够根据不同的事件触发词和论元提取不同的句子特征表示,应用于不同事件类型的论元分类。
Trigger/Argument Classification: 将词汇及特征和提取的句子级特征向量拼接,传入全连接的分类层进行事件触发词和论元分类。
图9. DMCNN模型结构示意图
2)JRNN:Joint Event Extraction via Recurrent Neural Networks,ACL 2016
[论文动机]:作者认为DMCNN这种Pipeline模式存在这从trigger识别到argument识别的误差传递问题,Joint模型性能会更好,同时DMCNN无法挖掘事件触发词类型和论元角色之间的依赖关系。
论文提出了一个基于循环神经网络RNN的联合方法来进行事件抽取,双向RNN用于句子编码获取丰富的向量表示,该表示用于联合地抽取事件trigger和预测论元角色。为了捕捉trigger类别和论元角色间的依赖关系,引入记忆向量和矩阵来存储在句子序列标注过程中预测的trigger类别和论元角色的信息。
下图为模型结构图,JRNN事件抽取过程分为两个阶段:
Encoding Phrase:基于RNN对句子进行编码,获得句子向量表示;
Word-level Encoding: 句子中每个词向量 xi由三类向量拼接而成,包括预训练的词向量、实体类型向量、二分依存特征向量(即句中词之间是否存在依存关系)。
Sentence-level Encoding: 利用Bi-GRU对句子序列进行编码,获得序列的隐层表示 [h1,…,hn]。
Prediction Phrase:基于句子表示同时进行事件trigger和论元角色的识别预测。联合预测在RNN对句子编码的每一步都进行的,除了RNN本身的参数和输出,作者还引入了三个记忆向量和矩阵来捕捉trigger类别和论元角色类别的关系,分别是存储预测的trigger的记忆向量 Gitrg(trigger类别的依赖)、存储预测的实体角色类别的记忆矩阵 Giarg(论元角色的依赖)、存储某个trigger与实体角色关系的记忆矩阵 Giarg/trg(论元角色与trigger类别的依赖)。在RNN编码的每个时间步骤i,都进行以下的操作:
Trigger Prediction:预测当前词wi是否为触发词和触发事件所属的类型ti;
Argument Role Prediction:若wi为触发词,预测句子中每个实体ej是否为wi触发事件的论元及ej的论元角色aij;
Memory Vector/Matrices Updating:利用前一步的输出和记忆向量/矩阵的值来更新当前步骤的记忆向量和矩阵Gitrg、Giarg、Giarg/trg。
模型算法细节详细可见论文和文章JRNN。
图10. JRNN模型结构示意图
3)PLMEE:Exploring Pre-trained Language Models for Event Extraction and Generation, ACL 2019
[论文动机]:事件抽取存在两个问题,一是事件角色重叠问题(Roles Overlap Problem),即在一个事件中同一论元属于多个角色类别,很多方法忽略了这个问题;二是有监督的深度抽取方法需要充足的标注数据,然而人工标注数据费时费力,远程监督方法生成的数据数量和质量都较差。
论文提出了一个基于预训练模型的事件抽取方法PLMEE,根据角色类别分离论元抽取来克服角色重叠问题。 为了解决训练数据不足问题,提出了一种通过编辑原型事件样本自动生成标记数据并通过质量排名筛选生成样本的方法。
PLMEE是一个基于预训练模型的事件抽取方法,利用BERT作为文本编码器,事件抽取包括两个个步骤:触发词抽取和论元抽取,如下图所示。
图11. PLMEE模型结构示意图
a. Trigger Extractor
触发词抽取被建模成了一个token-level的分类任务,在BERT基础上增加一个多分类层,预测的输出每个token的事件类别标签,具有相同事件类别的连续tokens组成事件触发词。
b.Argument Extractor
论元抽取要解决论元的识别和论元角色分类,多数论元都是长名词短语,同时存在论元角色重叠问题。为解决这两个问题,在BERT基础上增加多组二分类器,每个论元角色类别对应一组二分类器(论元开始位置二分标注器、结束位置二分标注器),来识别论元角色对应的所有论元span。同一事件不同论元角色 r的论元是分开独立预测的,因此,事件中同一论元可以扮演不同的角色。
如下式所示,确定了事件类别后,对该事件的每个论元角色 r进行论元span标注,并根据Psr(t)和Per(t)来获得两个0/1列表Bsr(t)和Ber(t),列表中的值表示对应的token是否为扮演了角色 r的论元span的开始和结束位置。
Training Data Generation 为了提供充足的训练数据,论文提出了基于预训练模型的事件样本生成方法。该方法将数据集原有的样例作为原型样板-prototype,通过在prototype上进行论元替换(Argument Replacement)和附属tokens重写(Adjunct Token Rewriting)来可控地生成标注的事件样本。最后通过对生成样本的评分,挑选出高质量的样本。
图12. 事件样本生成流程图
4)MQAEE:Event Extraction as Multi-turn Question Answering, ACL 2020
[论文动机]:传统的事件抽取方法往往将事件抽取看做多分类问题,事件类型和论元角色类别作为分类的标签,然而这种方法无法捕捉不同论元角色与事件类别间的语义信息和复杂的关联交互,同时分类式抽取模型无法泛化到新的事件类型和论元角色。
针对上述两个主要问题,将事件抽取转化为多轮问答任务(Multi-turn Question Answering, QA),提出的方法称为 MQAEE。将事件提取分为触发词识别、触发词分类和论元提取三个子任务, 这些子任务被建模为一系列基于QA模板的机器阅读理解 MRC。
触发词识别被转化为一个抽取式的MRC问题,触发词分类被形式化为 YES/NO 的 QA 问题,即判断候选触发器是否属于特定事件类型。论元提取也通过抽取式 MRC 解决,问题由事件类型和相应的论元角色迭代构造。
图13. MQAEE抽取流程示意图
MQAEE的模型结构如下图所示,给定输入句子,模型顺序执行触发词识别、触发词分类、论元抽取三个过程,完成事件抽取。
图14. MQAEE模型结构图 Trigger Identifification: 将给定的句子作为文章段落,通过构造的如下问题执行抽取式MRC,从句子中提取连续的片段作为触发词,抽取触发词片段时使用BIO标注方式。
a.Trigger Classifification
使用 YES/NO 式的 MRC 根据识别的触发词进行事件分类,此阶段的MRC问题的构造模板如下所示。问题模板中,
b.Argument Extraction
论元抽取是一个多轮问答的过程,基于上两个阶段抽取的触发词和事件类别,通过设计一系列的MRC问题按照预定的顺序将论元逐个提取。每一轮MRC按照如下模板构造问题,通过回答问题,从句子中提取连续的片段作为特定角色类别下的论元,即同时进行论元识别与论元角色分类。
和MQAEE类似,还有其他基于QA和MRC的事件抽取模型和代码:
Event Extraction as Machine Reading Comprehension, ACL 2020
Event Extraction by Answering (Almost) Natural Questions, ACL 2020
code: https://github.com/xinyadu/eeqa
GitHub – ll0ruc/QA-for-Event-Extraction: A question answering method for Event Extraction on your own dataset.
5)TEXT2EVENT
[论文动机]:事件记录的复杂结构以及文本与事件之间的语义鸿沟使得事件抽取具有极大的挑战性。当前多数的事件抽取都采用分解策略,即将复杂事件结构预测分解为多个独立的子任务(包括实体识别、触发词检测、论元分类),然后组合不同子任务的模型组件(包括管道式建模、联合建模、联合解码)来预测整个事件结构。
基于分解的方法存在两个问题:一是需要针对不同子任务进行海量细粒度的标注,导致数据不足和数据效率低下问题;二是手动设计不同子任务的最优组合架构非常具有挑战性。例如,管道模型会导致不同子任务间的错误传播,联合模型需要启发式地预定义不同任务组件间的信息共享和决策依赖关系,这通常会导致次优和不灵活的模型结构。
论文提出了一种用于事件提取的sequence-to-structure生成范式-TEXT2EVENT,它可以端到端的直接从文本中提取事件。TEXT2EVENT不再将事件抽取分解为不同的子任务和预测标签,而是在sequence-to-structure架构中对整个事件提取过程统一建模,并且所有触发词、论元及其角色类别标签都作为自然语言词统一的生成。
这种生成式的方法具有更高的数据效率:它不再需要token-level的标注,模型仅使用粗粒度的的text-record来学习,即每个训练样例是<sentence, event records>对。此外,统一的生成架构使得建模、学习和利用不同底层预测之间的交互变得容易,并且知识可以在不同组件之间自由共享和传输。
Event Structure Linearizition 如下图所示,TEXT2EVENT的输出将常用的事件结构进行文本线性化表示,图(a)是常用的event record结构化表示方式,图(c)是线性化的文本表示方式,将多个event record转化成一个表达式,'(‘ 和 ‘)’ 作为线性化表示的语义结构。同时这种线性输出和文本生成人物很相似,这样可以轻松使用和迁移其他文本生成模型。
图15. 事件结构线性化表示示意图
a. Sequence-to-Structure Network
基于上述线性化表示策略,TEXT2EVENT通过基于 transformer 的 encoder-decoder 的架构生成线性化的事件结构。在论文中,作者使用预训练语言模型-T5 作为基本的模型,复用一般的文本生成知识。
基于上述事件生成架构,论文设计了约束解码 (constrained decoding) 和 课程学习 (curriculum learning) 算法分别应用在模型解码和模型训练学习来提升模型事件抽取。
b.Constrained Decoding
为了利用事件 schema 知识,提出 trie-based 的约束解码算法来生成事件。 在约束解码过程中,事件 schema 知识作为解码器的提示被注入,避免无效的事件类型、事件类型与论元角色的不匹配、事件结构不完整等问题。通过这种方式,事件知识可以在动态推理过程中被注入和利用。 如下图所示,:
T和R表示事件类型和论元角色的标签名称。
S表示原始文本中的文本跨度,即事件触发词或论元提及。
图16. 用于可控结构生成的约束解码算法的前缀树(trie)
c.Curriculum Learning
sequence-to-structure生成模型和通用的text-to-text生成模型有很大的不同,模型的训练学习也更困难,原因在于事件结构中存在大量的指示符号 ‘(‘ 和 ‘)’ ,它们缺乏语义信息并且频繁出现,同时不遵循自然语言的句法约束,会误导模型学习过程。论文采用课程学习训练模型,即首先使用简单的事件子结构生成任务来训练 PLM,这样就不会过度适应非语义的指标符号; 然后在完整的事件结构生成任务上训练模型,由易至难学习
d.Substructure Learning
从只生成 “(label, span)” 、”(type, trigger words)” 和 “(role, argument words)” 事件子结构等简单任务开始训练模型。
Full Structure Learning: Substructure Learning完成后,利用完整的事件结构来训练模型 和TEXT2EVENT模型相似的生成式事件抽取模型还有UIE(Unifified Structure Generation for Universal Information Extraction, ACL 2022),都是sequence-to-structure的生成式抽取架构,也都是将生成的事件结构文本线性化,两个模型在针对事件抽取任务十分相似,不同的是UIE是一个通用信息抽取模型,用于实体识别、 关系抽取、事件抽取等多种信息抽取任务统一建模,UIE模型详细信息可见原论文和文章(NLP中实体关系三元组抽取模型范式总结)对UIE的介绍。
本文来源:
(https://zhuanlan.zhihu.com/p/577131696),由作者guilipa写作,在此表示感谢。
参考文献
1、Deep Learning Schema-based Event Extraction: Literature Review and Current Trends
2、A Compact Survey on Event Extraction: Approaches and Applications
3、Event Extraction: A Survey
4、事件抽取在工业界的具体应用
5、Carrie:2020语言与智能技术竞赛–事件抽取方案整理
6、https://zhuanlan.zhihu.com/p/577131696
关于我们
老刘,刘焕勇,NLP开源爱好者与践行者,主页:https://liuhuanyong.github.io。
就职于360人工智能研究院、曾就职于中国科学院软件研究所。
老刘说NLP,将定期发布语言资源、工程实践、技术总结等内容,欢迎关注。
对于想加入更优质的知识图谱、事件图谱实践、相关分享的,可关注公众号,在后台菜单栏中点击会员社区->会员入群加入。
原文始发于微信公众号(老刘说NLP):NLP前沿技术总结:基于深度学习的事件抽取实现范式与代表模型总结