Fork me on GitHub

清华大学彭皓:事件抽取发展脉络、前沿算法与工具包

以下文章来源于 https://zhuanlan.zhihu.com/p/630109907

导读: 本文将介绍事件抽取的发展脉络,最新的科研算法,以及事件抽取工具包 OmniEvent。

主要内容包括以下四大部分:

  1. Event Extraction(什么是事件抽取,事件抽取的重要性)

  2. Principal Methods(事件抽取发展过程中的经典算法,最前沿最常用的算法)

  3. OmniEvent(工具包的特性,工具包的使用)

  4. Future Work(事件抽取领域未来可能的发展方向,OmniEvent 工具包将会增添的功能)


分享嘉宾|彭皓 清华大学 硕士研究生

编辑整理|潘英杰 辽宁工程技术大学

出品社区|DataFun


01/Event Extraction


1. 背景介绍

知识图谱已经发展成为互联网不可或缺的部分。其方法论比较简单,一般是用三元组来存储结构化的知识。



知识图谱存储着大量的世界知识,支撑着很多重要的下游应用,如问答等。但现有的知识图谱缺乏事件知识。事件知识通常指的是事件相关的信息,如事件类型,事件的时间地点等。



从上表中可以看到,在常用的开源知识图谱中实体有上千万个,而事件却只有几十万,并且现有知识图谱中,事件相关的事件、地点等信息是缺失严重的。但同时,事件知识又是非常重要的。



分析哲学创始人维特根斯坦曾说过,世界就是所发生的一切事情。我们去认知世界,离不开事件,因此事件理解是至关重要的。

结构化的事件知识支撑着各种现有应用,比如 QA 问答系统,情报挖掘,药物副作用挖掘等等。

由于事件知识的重要性,上世纪 DARPA(美国国防高级研究计划局)率先提出事件抽取任务,旨在自动化理解并抽取文本中的事件。时至今日,DARPA 现在仍以数千万美元支持事件知识获取相关研究。

2. 事件抽取

事件抽取指的是,给定文本,从文本中抽取结构化的事件知识,事件知识具体包含事件本身是什么(如袭击事件、出生事件等),事件相关的信息(如时间、地点等)。



举例:Ludwig van Beethoven was born in Bonn and baptized on 17 December, 1770.

贝多芬出生于波恩,他在 1770 年 12 月 17 日接受了洗礼。

我们可以从上述文本中挖掘出两个事件:①出生;②洗礼。

事件抽取通常包含两个子任务:

① 事件检测:给定文本,检测文本中包含的事件。



通常先定义好一个事件集合,然后将检测到的事件分类为事件集合中的某一个事件。

② 抽取事件的相关信息:时间、地点、人物。


--

02/Principal Methods


事件抽取算法通常有四种范式:Sequence labeling,Token classification,Machine reading comprehension 和 Sequence to sequence。



图中列出了每种形式的代表性工作。

1. Sequence labeling(常用范式)序列标注任务

把事件抽取形式化成一个序列标注任务,在指定文本中把事件标注出来,标明哪些是事件,哪些是事件相关论元。



2. Token Classification(常用范式)为每一个词进行分类

为每一个词进行分类,分类该词是哪个事件或者是哪种论元。通常有一个 NA 类别,代表不是事件或者事件论元。



3. Machine Reading Comprehension(2020 年开始)阅读理解范式(MRC)

给定一个文本,并且给定一个和事件相关的问题,让模型回答该问题进而抽取出事件。通常这种范式指的是抽取式 MRC 范式,从给定文本中抽取一个 span 出来。



这种形式可以迁移 MRC 模型和数据集的知识用到事件抽取中,从而帮助事件抽取模型更好地学习和理解事件。

4. Sequence to sequence(2020 年开始)序列生成任务



从 2020 年开始,有很多工作开始探索将事件抽取任务形式化为序列生成任务。这种方法的难点在于如何序列化输出文本,以及从序列化输出找到我们想要的答案。

以上就是事件抽取方法研究的发展脉络,可以看到,**事件抽取受到了越来越多的关注,但同时,由于范式和数据集等的不同,不同工作之间可能不可比。**在这样的背景下,我们提出了 OmniEvent 事件抽取工具包,为现有的事件抽取任务提供了全面而统一的算法实现。下面将具体介绍这一工具包。

--

03/事件抽取工具包:OmniEvent


1. 概要

首先来简要介绍一下 OmiEvent 工具包。它实现了多种事件抽取算法,为它们提供了公平的评测。基于这些算法,我们部署了一个线上的小模型(OmniEvent Demo),大家可以扫下面的二维码尝试。

OmniEvent Demo 使用步骤:

(1)在文本输入框输入自己想要抽取事件的文本。

(2)在右侧选择框选择关注的选项(如语言等);做的任务(如事件检测等);领域。

2. 提出工具包的动机

**(1)常用的数据不是开源的,是需要付费的。**而原始的数据格式又没有统一的预处理脚本,导致不同的工作之间可能使用的是不同的数据集预处理方法,进而导致结果不能直接比较。



(2)不同的模型范式之间的结果也不是可比的。



(3)事件抽取领域没有现成的、方便使用的工具包。



3. Features of OmniEvent 工具包的特性

(1)Unified Benchmark & Evaluation 提供了统一评测

① 由于数据集的预处理脚本不一样,导致最后处理的结果不一样。我们设计了统一的数据格式,为每一个数据集提供了公开的预处理脚本,用这个脚本,把数据统一到该格式上,用统一的数据格式去做实验,得到公平可比的结果。

② 不同范式之间不具有可比性,是由于不同范式分类的候选集不同。我们为每一个数据集设计了一个统一的候选集。



(2)Comprehensive Capability 覆盖了非常全面的算法,大量的数据集,可以直接调用常用的算法,或者开发自己的算法

① 覆盖全面,之前提到的四种范式均包含在工具包中。

② 支持基于 Transformers 的模型以及基于 CNN 和 LSTM 等的传统模型。

③ 支持中文与英文。



(3)Modular Implementation 基于模块化实现,增添不同的模块,去搭配自己的模型

我们分析了现在的各种各样的事件抽取算法,把事件抽取算法抽象成几个不同的模块,并进行了不同的模块化实现,不同的模块化实现降低了代码的耦合性。用户可以将不同的模块组合在一起,或增添自己的模块。



(4)Big Model Training & Inference 支持大模型的训练和推理

基于 BMTrain,OmniEvent 支持 T5-11B 大模型训练,参数量、内存、训练速度均有优化,效率较高。



(5)Easy to Use & Highly Extensible 易于使用,高度可拓展

只需要三行代码就可以调用我们的模型去做事件抽取。



4. 训练自己的模型

步骤如下:

**Step 1:**Process the dataset into the unified format 把数据处理成统一的格式。

我们为常用的数据集提供了各种预处理脚本,但用户也可以自己写预处理脚本,把自己的数据集处理成统一的格式。

**Step 2:**Set up the customized configurations 配置自定义参数。

我们为常用的模型提供了 yaml 文件,但也可以根据需要自己修改。

**Step 3:**Initialize the model and tokenizer 初始化模型和 tokenizer。

**Step 4:**Initialize the dataset and evaluation metric 初始化数据集和评测指标。

**Step 5:**Define Trainer and train 定义 trainer 并训练。

--

04/事件抽取未来工作


1. Document-level event extraction 文档级别的事件抽取

过去我们更多关注于句子级别的事件抽取,比如一个特别短的句子,相对比较简单,但是在实际场景应用中,有更多新的挑战。在近两年,学术界提出了文档级别的事件抽取,给定一篇文档,将其中的事件都抽取出来。由于文本比较长,该任务具有一定的挑战难度。之后我们在工具包中也会加上处理长文本事件抽取的功能。

2. More settings:few-shot,semi-supervised,event induction 更多的任务设定

传统的事件抽取是在给定的事件集合下进行分类的,这具有一定的局限性。事件集合是不断变化的,即使是同一个事件集合可能在随着时间的演变也是在不同的变化的,如何根据时间的演变更新事件集合,这就涉及到 event induction 等方法,去快速学习新的事件集合。

3. Event relation extraction 事件关系抽取

将事件抽取出来后,下一步就是考虑不同事件的关系,事件关系的抽取在事件研究领域是非常重要的任务。我们抽取事件之后,需要了解各种事件的关系,比如他们的时序关系,比如谁发生在前,谁发生在后,因果关系,比如谁是谁造成的,A 事件可能引发了 B 事件,B 事件引发了 C 事件。事件关系抽取在情报分析等领域非常重要,可以分析事件的来龙去脉。我们在未来会支持事件关系抽取功能。

--

05/问答环节


Q1:您刚刚提到了四个范式,其中有两个范式是近两年出现的,如果我们要上手试一下,四种范式哪一种范式会取得不错的效果?

A1:据我们的实验观察来看,如果你想要快速的上手,快速的开发,我的建议是最开始的那种范式 Sequence labeling,因为这个范式发展时间最久,无论是时间复杂度还是最终的模型性能都是不错的。通常来说 Token Classification 范式是效果最好的,但是它的实现复杂度比较高。然后后两个范式 Machine reading comprehension 和 Sequence to sequence 需要自己更多的调试,试出来的效果会比较好,但需要消耗一定的时间和精力。如果想要快速上手,我推荐的是 Sequence labeling 这个范式。

Q2:限定类型的事件抽取后续工具的方向与公司的交流情况的进展?

A2:目前公司大部分在限定集合上使用,我们关注的事件类型可能就是这些,就只抽这些就可以了,不去关注其他的,这可能是他们的初衷,可能也是我们发展的初衷,之后我们的工具包可能会支持更多的任务设定,一方面让功能更加全面,另一方面,为大家提供更多的选择,如果你想尝试新的任务设定,可以去用工具包,像比如少次学习关系抽取等任务设定非常有应用价值,但是不可避免的,我认为这样新的任务设定需要更多的研究和调试。

Q3:事件图谱与知识图谱的结合应用有哪些?

A3:学术界在近两年,提出了一些事件知识图谱的一些方法,比如 EventKE,把事件当做知识图谱的补充,把知识囊括进来,然后去帮助进行更好的知识理解。

今天的分享就到这里,谢谢大家。




本文地址:https://www.6aiq.com/article/1684319611371
本文版权归作者和AIQ共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出