实体关系抽取

1. 概述

信息抽取旨在从大规模非结构或半结构的自然语言文本中抽取结构化信息。关系抽取是其中的重要子任务之一,主要目的是从文本中识别实体并抽取实体之间的语义关系。

2. 关系抽取方法

2.1 基于规则匹配

比如,对于IS-A这样的关系,我们可以使用如下的规则进行抽取:

1
2
3
4
5
6
“Y such as X ((, X)* (, and|or) X)”!
“such Y as X”!
“X or other Y”!
“X and other Y”!
“Y including X”!
“Y, especially X”!

2.2 基于监督学习的方法

我们可以把关系抽取当成一个多分类问题,每一种关系都是一个类别,通过对标签数据的学习训练出一个分类器(classifier)即可。

流程

  • 预先定义好想提取的关系集合
  • 选择相关的命名实体集合
  • 寻找并标注数据
  • 选择有代表性的语料库
  • 标记命名实体
  • 人工标注实体间的关系
  • 分成训练、开发、测试集
  • 设计特征
  • 选择并训练分类器
  • 评估结果

为了提高 efficiency,通常我们会训练两个分类器,第一个分类器是 yes/no 的二分类,判断命名实体间是否有关系,如果有关系,再送到第二个分类器,给实体分配关系类别。这样做的好处是通过排除大多数的实体对来加快分类器的训练过程,另一方面,对每个任务可以使用 task-specific feature-set。

要解决的难点
1)特征构建
传统的基于机器学习的方法会使用一些NLP技术构建组合特征,比如词性标注,依存分析等。
2)标签数据的获取
监督学习的效果直接取决于训练数据集的大小和质量,但是获得大量的标注数据的代价是非常昂贵的。那么如何解决这个问题呢?我们可以通过远程监督学习(distant supervision)的方法,从已有信息里得到大量的标签数据。

2.3 基于半监督的方法

1)基于种子的启发式算法(Bootstrapping)
基本的思路

  1. 我们先准备一些准确率很高的实体-关系种子集,比如:Jack Ma/Alibaba/Founder-of这种
  2. 以这些种子实例为基础,去语料库里找出所有相关的句子
  3. 对这些句子的上下文进行分析,找出一些可靠的pattern
  4. 然后再通过这些pattern去发现更多的实例
  5. 通过新的实例再去发掘出新的pattern,如此往复,直到收敛
    整个过程像滚雪球一样,越滚越大…

2)🌟远程监督学习(Distant Supervision)

通过远程监督学习获取了大量的标签数据之后,使用传统机器学习的方法进行训练分类器。

一个假设前提
如果两个实体存在关联关系,那么语料库中涉及到这两个实体的地方,都将指向这样的关系。

存在的问题

  1. 假设前提的前提可能不成立;
  2. 基于手动的特征工程效率不高;

改进
现在取得state-of-the-art效果的方法基本都是基于远程监督学习的,而且他们的工作都是为了解决以上两个问题。

3. 数据集

英文

  1. ACE 2005: 599 docs. 7 types;
  2. SemiEval 2010 Task8 Dataset:
  3. NYT+FreeBase 通过Distant Supervised method 提取,里面会有噪音数据
  4. fewrel基于Wiki的数据集,https://thunlp.github.io/fewrel.html

中文

  1. open_data.zip (519.1 MB)
    https://pan.baidu.com/s/1gtq3FEMx4_eAFmZqyn844Q
    密码:8gd2
  2. https://www.biendata.com/competition/ccks_2019_ipre/
    CCKS2019的一项比赛,人物关系抽取,给了数据集

4. 算法模型

4.1 基于监督算法

1)模型
BiLSTM+attention模型
2)特征
词向量+位置向量

5 Reference

  1. 知识抽取-实体及关系抽取(实体识别和关系抽取的概述和算法都涉及,推荐)
  2. 零基础入门–中文实体关系抽取(BiLSTM+attention,含代码)(有监督抽取关系,代码)
  3. 关系抽取(分类)总结(深度学习在关系抽取的算法介绍)
  4. 关系抽取综述(综述,深度学习部分算法涉及)