信息抽取包括实体抽取、关系抽取、事件抽取。实体抽取即找出文章里的专有名词(人名地名等),方法大致是先检测,再分类;关系抽取即找出两个名词之间的动词,一般是三元组抽取,即一个谓词(predicate)带两个形参(argument);事件抽取即将自然语言转换成结构化的信息,抽取出事件的各要素(时间、地点、人物等)。
1 数据集
最常用的数据集有 MUC、ACE、KBP、SemEval 等。其中 ACE 数据集包括 英语、中文 等。
2 实体抽取
主要抽取的是文本中的原子信息元素,如人名、组织/机构名、地理位置、事件/日期、字符值、金额值等。实体抽取任务有两个关键词:find & classify,找到命名实体,并进行分类。
传统的机器学习方法
- 把每个 token 标记命名实体;
- 特征选择;
- 训练一个 sequence classifier 来预测数据的 label。
2.1 sequence labeling
有两种编码方式,IO encoding 简单的为每个 token 标注,如果不是 NE 就标为 O(other),所以一共需要 C+1 个类别(label)。而 IOB encoding 需要 2C+1 个类别(label),因为它标了 NE boundary,B 代表 begining,NE 开始的位置,I 代表 inside,承接上一个 NE,如果连续出现两个 B,自然就表示上一个 B 已经结束了。

2.2 序列标记特征
- 单词:当前单词、前/后一个单词
- 词类标记
- 前/后一个单词的标签
- 单词的子字符串(中间有 ‘oxa’ 的多为 drug,中间有 ‘:’ 的多为 movie,field 结尾的多为 place)
- 单词的形状(长度、大小写、数字)
2.3 训练 sequence model
[4] 中主要讲了传统的机器学习方法,有 ① 最大熵马尔可夫模型(MEMMs)/条件马尔可夫模型(CMM)(一个东西)和 ② 条件随机场(CRF);现在又基于深度学习的方法,最经典的是 LSTM + CRF。
2.3.1 MEMM
结构如图所示:

这张图其实就是把上面的过程又说了一遍。MEMM 是用序列标记的特征来推断当前 token 的 tag,这推断就有以下三种:
- greedy inference:贪心,每个 token 挑出当前最好的 tag,然后就 move on 了;
- beam inference:(空间剪枝)每个 token 都保留最大的 k 条路径(具体见 [5]);
- viterbi inference:(时间剪枝)每个 token 的最大 k 种 tag 都保留最大的一条路(具体见 [6]);
2.3.2 CRF
TODO
2.3.3 LSTM + CRF
TODO
2.4 实体链接
一个实体可能对应多个名称,一个名称可能对应多个实体。实体链接即从名称映射到实体上。具体见 [7]
3 关系抽取
关系抽取 需要从文本中抽取两个或多个实体之间的语义关系,主要方法有下面几类:
- 基于模板的方法(hand-built patterns)
- 基于触发词/字符串
- 基于依存句法
- 监督学习(supervised machine learning)
- 机器学习
- 深度学习(Pipeline vs Joint Model)
- 半监督/无监督学习(semi-supervised and unsupervised)
- Bootstrapping
- Distant supervision
- Unsupervised learning from the web
ACL 数据集中,关系类别分成 17 类:

3.1 利用模式(pattern)进行关系抽取
优点:人工规则有高准确率(high-precision)、可以为特定领域定制(tailor)、在小规模数据集上容易实现,构建简单。
缺点:
- 低召回率(low-recall)
- 特定领域的模板需要专家构建,要考虑周全所有可能的 pattern 很难,也很费时间精力
- 需要为每条关系来定义 pattern
- 难以维护
- 可移植性差
3.1.1 基于触发词
比如 is-a 关系规则:下面表中的 X 与 Y 是有联系。(英文阅读理解的 trick)

3.1.2 基于依存句法规则
下图中,黑色部分就是规则(或者说句子的框架)

3.2 有监督学习
过程:
- 找到所有实体
- 判断两两实体之间有无关系
- 如果有关系,则对关系分类。
提取特征可以有如下几类:
E.g. American Airlines, a unit of AMR, immediately matched the move, spokesman Tim Wagner said
- Mention 1: American Airlines
- Mention 2: Tim Wagner

分类器可以使用 最大熵、朴素贝叶斯、SVM 等
3.3 半/无监督学习
3.3.1 Relation Bootstrapping(自举)
过程:
- 找到一些具有关系 R 的实体对作为种子
- 把种子上下文学出 pattern
- 用 pattern 找到更多有关系 R 的实体对,就又回到 1,迭代得到更多 pair
3.3.2 Distant supervision
假设:两个实体如果在知识库中存在某种关系,则包含该两个实体的非结构化句子均能表示出这种关系。
过程:
- 对于关系 R,找到一些具有这个关系的实体 pairs
- 找到包含这些 pairs 的句子,在句子中找 features
- 用有监督学习方式训练分类器
与监督学习相似的是这种方法用大量特征训练了分类器,通过已有的知识进行监督,不需要用迭代的方法来扩充 pattern。
与无监督学习相似的是这种方法采用了大量没有标注的数据,对训练语料库中的 genre 并不敏感,适合泛化。
3.3.3 Unsupervised learning from the web
过程:
- 用结构化的信息(parsed data)训练一个分类器,用来判断两个实体之间有没有关系(是否 trustworthy)
- 找到两个实体之间所有可能的关系,留下 trustworthy 的
- 如果在很多网页上,用上面方法得到这个 pair 的关系一致,那么这个 pair 的关系就是它了
3.3.4 评估方法
由于是无监督,没法计算 precision 和 recall。我们可以估计 precision,即从结果里随机取一些,手动检查… recall 就没法算了
4 事件抽取
事件抽取是从描述事件信息的文本中,识别并抽取出事件信息,并以结构化的形式呈现出来,包括发生的时间、地点、参与角色以及与之相关的动作或者状态的改变。[8]
几个概念:
- 事件描述(Event Mention):描述事件的词组/句子/句群,包含一个 trigger 以及任意数量的 arguments
- 事件触发(Event Trigger):事件描述中最能代表事件发生的词汇,决定事件类别的重要特征,一般是动词或者名词
- 事件元素(Event Argument):事件的重要信息,或者说是实体描述(entity mention),主要由实体、属性值等表达完整语义的细粒度单位组成
- 元素角色(Argument Role):事件元素在事件中扮演的角色,事件元素与事件的语义关系,可以理解为 slot
- 事件类型(Event Type)
事件抽取基础任务是在 mention 中抽取一个 trigger 和多个 arguments,并找到每个 argument 对应的 role,以及 trigger 的 type。
因此基础的方法分成几步[9]:
- Trigger Identification
- Trigger Type Classification
- Argument Identification
- Argument Role Classification
(4.1 4.2 可选择性略过)
4.1 基于模式匹配
4.1.1 基于人工标注语料
通过 句法(syntactic)和 语义约束(semantic constraints)来进行识别
模式匹配的方法中,模板准确性是影响整个方法性能的重要因素。在实际应用中,模式匹配方法应用非常广泛,主要特点是高准确率低召回率,要提高召回率,一是要建立更完整的模板库,二是可以用半监督的方法来建 trigger 字典。
AutoSlog[8]:假设事件元素首次提及之处即可确定该元素与事件间的关系,事件元素周围的语句中包含了事件元素在事件中的角色描述。
通过监督学习和人工审查来建立抽取规则。通过训练数据中已经填充好的槽(filled slot),AutoSlog 解析 slot 附近的句法结构,来自动形成抽取规则,由于这个过程产生的模板 too-general,所以需要人工来审核。本质上形成的是一个字典。
比如
Ricardo Castellar, the mayor, was kidnapped yesterday by the FMLN.
假设 Ricardo Castellar 被标注成了 victim,AutoSlog 根据句法分析判断出 Ricardo Castellar 是主语,然后触发了主语的相关规则 (subj) passive-verb,将句子中相关的单词填充进去就得到了规则 (victim) was kidnapped,所以在之后的文本中,只要 kidnapped 在一个被动结构中出现,它对应的主语就会被标记为 victim。
4.1.2 基于弱监督
AutoSlog-TS 无需标注,只需要一个预先分类好的训练语料,类别是与该领域相关还是不相关。过程是先过一遍语料库,对每一个名词短语(根据句法分析识别)都产生对应的抽取规则,然后再整体过一遍语料库,产生每个规则的一些相关统计数据。基本的 idea 是与不相关文本相比,在相关文本中更常出现的抽取规则更有可能是好的抽取规则。选出现频率搞的规则进行人工审核。
4.2 基于传统机器学习
4.2.1 Pipeline
将事件抽取任务分成几个阶段,按顺序逐一解决。
将事件抽取任务转化为多阶段的分类问题(管道抽取),需要顺序执行下面的分类器:
- 事件触发词分类器(Trigger Classifier)判断词汇是否是事件触发词,以及事件类别
- 元素分类器(Argument Classifier)词组是否是事件元素
- 元素角色分类器(Role Classifier)判定元素的角色类别
- 属性分类器(Attribute Classifier)判定事件属性
- 可报告性分类器(Reportable-Event Classifier)判定是否存在值得报告的事件实例
4.2.2 Joint
分为 Joint Inference 和 Joint Modeling 两种
Joint Inference 使用集成学习的思路,将各模型通过整体优化目标整合起来,可以通过整数规划等方法进行优化。
Joint Modeling 称为基于结构的方法,将事件结构看作依存树,抽取任务相应转化为依存树结构预测问题,触发词识别和元素抽取可以同时完成,共享隐层特征,使用搜索进行求解,避免了误差传播导致的性能下降,另外,全局特征也可以从整体的结构中学习得到,从而使用全局的信息来提升局部的预测。
4.3 基于深度学习
- 减少对外部 NLP 工具的依赖,甚至不依赖 NLP 工具,建立成端对端的系统
- 使用词向量作为输入,蕴含更为丰富的语言特征
- 自动提取句子特征,避免了人工特征设计的繁琐工作
4.3.1 Pipeline
DMCNN [10] 我的读后感
4.3.2 Joint
JRNN [11] 我的读后感
5 引用与延伸阅读
[1] 知识抽取-实体及关系抽取这篇文章介绍了数据集、实体抽取、关系抽取。
[2] 斯坦福大学-自然语言处理入门 笔记 第九课 信息抽取(information extraction) 斯坦福 NLP 对应笔记
[3] 斯坦福大学-自然语言处理入门 笔记 第十课 关系抽取(relation extraction) 斯坦福 NLP 对应笔记
[4] 斯坦福@自然语言处理基础课程
[6] 如何通俗地讲解 viterbi 算法? – 路生的回答 – 知乎
[8] 知识抽取-事件抽取
[9] 如何猜出女朋友话中的含义?——关于事件抽取(Event Extraction)
[10] Chen, Yubo, et al. “Event Extraction via Dynamic Multi-Pooling Convolutional Neural Networks.” international joint conference on natural language processing (2015): 167-176.
[11] Nguyen, Thien Huu, Kyunghyun Cho, and Ralph Grishman. “Joint Event Extraction via Recurrent Neural Networks.” north american chapter of the association for computational linguistics (2016): 300-309.