事件抽取,要求我们用人工或者自动的方法,从半结构化、非结构化数据中,识别一个与我们的目标相关的事件的重要元素识别出来。
假设我们有一份非结构化数据,如引用1所示,目标是把其中关于新企业成立的事件识别出来,以便我们了解市场的最新动向以及汇总市场最近一段事件的发展情况。要描述“企业成立”这样一种事件,需要成立时间、创立者、企业名称、企业业务范围等等信息,如表2-1所示。有了这样的结构化数据,人或者机器可以做很多事情,比如把老蒋创办的所有企业情报全都聚合到一起,然后看他亏了多少。
- 到1920年12月,蒋介石与友人商议,决定改组公司,并与商人张静江邓恩合作,成立恒泰号,以继续从事上海证券物品交易所的经纪事业。据记载,恒泰号的发起人股份一共有35股,资本35000元
表1
字段 | 例子 |
---|---|
成立事件 | 1920年12月 |
创办者 | 蒋介石、张静江 |
企业名称 | 恒泰号 |
业务范围 | 经济事业 |
前面对事件抽取的定义,比较抽象、模糊,不利于大家讨论或者协作,这里介绍一下自然语言处理领域从业者们比较认可的若干概念。事件抽取任务的直接目标,就是识别特定类型的事件,并把事件中担任既定角色的要素找出来一般来说,我们会按照任务的需求,制定一个事件类型体系,并根据研究对象的特点,规定各类事件里重要的角色。任务类型体系和各类型事件的角色清单,就是我们的预测目标。
表2
序号 | 概念名称 | 简介 |
---|---|---|
1 | 事件描述 | 描述时间信息的短语或句子, |
2 | 事件类型 | 事件的类型。表1所述的“企业成立”,就是一种事件类型。 |
3 | 事件触发词 | 标志某一事件发生的词语,一般是动词。引用1中的“成立”一词,就是“企业创办”事件的触发词 |
4 | 事件要素 | 用以描述一个事件的时间、地点、人物等重要信息。 |
5 | 要素的角色 | 事件要素在事件进行过程中的作用。如表1所述的“1920年12月”描述了事件发生的时间,在企业成立事件中的角色是“成立时间”。 |
在前面所述概念的基础上,我们可以列出事件抽取模型的核心构成:
事件抽取任务的起点,是需求的出现。关心金融领域的朋友,比如我(持有市值约370元人民币的基金),希望了解所有可以影响市场情绪的事件。因此,海量新闻数据中识别特定类型的事件就是我们的需求。
需求确定了,接下来的任务就是把需求转换为人和机器都可以理解的一种形式,即制定事件的schema。“schema”即纲要,是我们对事物一般的、抽象的描述,体现人类对事物的认知水平,决定了机器抽取事件的能力,因此非常重要。一个完整的事件schema,应当包括:
(1)事件类型体系,比如“企业成立”、“企业并购”等等组成的,就是我关心的事件的类型体系;
(2)各类事件的重要角色,比如表1所示的各个字段,就是一个事件得以发展所依赖的重要角色。有时候,我们会设置一种特殊的角色,即“事件触发词”,用来辅助判断事件的发生。
确定了schema,一方面方便大家在相同的概念基础上展开协作,另一方面也让机器有了相对确定的学习和预测目标。
事件抽取的schema和知识图谱的schema是同一种东西,类似“语义槽”,需要从原始数据中抽取特定的片段来填写,就像表2-1的“例子”一栏一样。至此,我们就进入到了事件抽取任务的第二个子任务,即信息抽取模型构建——换句话说, 我们需要构建一定的工具,让它从半结构化、非结构化数据中,把schema描述的信息抽取出来。
目前的主流做法,是用两个子任务完成信息的抽取:
(1)识别事件并判断类型。可以用序列元素分类的方式识别触发词并判断事件类型,或者直接使用文本分类的方式判断mention对应的事件类型。
(2)识别事件角色。用序列元素分类,或者三元组抽取的方式,把事件的重要角色识别出来并分类。
graph TD
a(老李铡了一筐玉米杆给骡子吃)-->b(特征提取模块)
b-->c(触发词抽取模块)
b-->d(元素抽取模块)
c-->e("事件类型:生产,触发词:铡")
d-->f("角色:生产者,元素:老李;角色:产品,元素:玉米杆")