信息抽取 从零入门

信息抽取包括实体抽取、关系抽取、事件抽取。实体抽取即找出文章里的专有名词(人名地名等),方法大致是先检测,再分类;关系抽取即找出两个名词之间的动词,一般是三元组抽取,即一个谓词(predicate)带两个形参(argument);事件抽取即将自然语言转换成结构化的信息,抽取出事件的各要素(时间、地点、人物等)。

1 数据集

最常用的数据集有 MUC、ACE、KBP、SemEval 等。其中 ACE 数据集包括 英语中文 等。

2 实体抽取

主要抽取的是文本中的原子信息元素,如人名、组织/机构名、地理位置、事件/日期、字符值、金额值等。实体抽取任务有两个关键词:find & classify,找到命名实体,并进行分类。

传统的机器学习方法

  1. 把每个 token 标记命名实体;
  2. 特征选择;
  3. 训练一个 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 序列标记特征

  1. 单词:当前单词、前/后一个单词
  2. 词类标记
  3. 前/后一个单词的标签
  4. 单词的子字符串(中间有 ‘oxa’ 的多为 drug,中间有 ‘:’ 的多为 movie,field 结尾的多为 place)
  5. 单词的形状(长度、大小写、数字)

2.3 训练 sequence model

[4] 中主要讲了传统的机器学习方法,有 ① 最大熵马尔可夫模型(MEMMs)/条件马尔可夫模型(CMM)(一个东西)和 ② 条件随机场(CRF);现在又基于深度学习的方法,最经典的是 LSTM + CRF。

2.3.1 MEMM

结构如图所示:

这张图其实就是把上面的过程又说了一遍。MEMM 是用序列标记的特征来推断当前 token 的 tag,这推断就有以下三种:

  1. greedy inference:贪心,每个 token 挑出当前最好的 tag,然后就 move on 了;
  2. beam inference:(空间剪枝)每个 token 都保留最大的 k 条路径(具体见 [5]);
  3. 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 有监督学习

过程:

  1. 找到所有实体
  2. 判断两两实体之间有无关系
  3. 如果有关系,则对关系分类。

提取特征可以有如下几类:

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(自举)

过程:

  1. 找到一些具有关系 R 的实体对作为种子
  2. 把种子上下文学出 pattern
  3. 用 pattern 找到更多有关系 R 的实体对,就又回到 1,迭代得到更多 pair

3.3.2 Distant supervision

假设:两个实体如果在知识库中存在某种关系,则包含该两个实体的非结构化句子均能表示出这种关系。

过程:

  1. 对于关系 R,找到一些具有这个关系的实体 pairs
  2. 找到包含这些 pairs 的句子,在句子中找 features
  3. 用有监督学习方式训练分类器

与监督学习相似的是这种方法用大量特征训练了分类器,通过已有的知识进行监督,不需要用迭代的方法来扩充 pattern。

与无监督学习相似的是这种方法采用了大量没有标注的数据,对训练语料库中的 genre 并不敏感,适合泛化。

3.3.3 Unsupervised learning from the web

过程:

  1. 用结构化的信息(parsed data)训练一个分类器,用来判断两个实体之间有没有关系(是否 trustworthy)
  2. 找到两个实体之间所有可能的关系,留下 trustworthy 的
  3. 如果在很多网页上,用上面方法得到这个 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]:

  1. Trigger Identification
  2. Trigger Type Classification
  3. Argument Identification
  4. 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

将事件抽取任务分成几个阶段,按顺序逐一解决。

将事件抽取任务转化为多阶段的分类问题(管道抽取),需要顺序执行下面的分类器:

  1. 事件触发词分类器(Trigger Classifier)判断词汇是否是事件触发词,以及事件类别
  2. 元素分类器(Argument Classifier)词组是否是事件元素
  3. 元素角色分类器(Role Classifier)判定元素的角色类别
  4. 属性分类器(Attribute Classifier)判定事件属性
  5. 可报告性分类器(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] 斯坦福@自然语言处理基础课程

[5] …束搜索(Beam Search)…

[6] 如何通俗地讲解 viterbi 算法? – 路生的回答 – 知乎

[7] 知识图谱 | 实体链接 – 安小飞的文章 – 知乎

[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.

发表评论