1. 任务
2. 方法总结
自动识别句子中实体之间具有的某种语义关系。根据参与实体的多少可以分为二元关系抽取(两个实体)和多元关系抽取(三个及以上实体)。
通过关注两个实体间的语义关系,可以得到(arg1, relation, arg2)三元组,其中arg1和arg2表示两个实体,relation表示实体间的语义关系。
根据处理数据源的不同,关系抽取可以分为以下三种:
根据抽取文本的范围不同,关系抽取可以分为以下两种:
根据所抽取领域的划分,关系抽取又可以分为以下两种:
限定域关系抽取方法:
由于工业界的数据集通常来自其自身业务的记录,并不对外公开,故以下只举例介绍相关比赛中出现的数据集(下载链接因版权原因,随时删除):
数据集 提取码:ta8z
任务目标
数据来源
评价指标:
解决方案
2019语言与智能技术竞赛
任务目标
(2) 输出:句子sent中包含的符合给定schema约束的三元组知识Triples
数据集说明
使用的SKE数据集是业界规模最大的基于schema的中文信息抽取数据集,其包含超过43万三元组数据、21万中文句子及50个已定义好的schema,表1中展示了SKE数据集中包含的50个schema及对应的例子。数据集中的句子来自百度百科和百度信息流文本。数据集划分为17万训练集,2万验证集和2万测试集。其中训练集和验证集用于训练,可供自由下载,测试集分为两个,测试集1供参赛者在平台上自主验证,测试集2在比赛结束前一周发布,不能在平台上自主验证,并将作为最终的评测排名。
具体说明:https://www.biendata.com/competition/chip2019/data/
评价指标
top1方案及结果
2020语言与智能技术竞赛
数据集 提取码:8ccx
任务目标:
在给定的文本句子中,根据预先定义的schema集合,抽取出所有满足 schema 约束的 SPO 三元组。schema 定义了关系 P 以及其对应的主体 S 和客体 O 的类别,根据 O 类型的复杂程度可以划分为以下两种:
简单 O 值:也就是说 O 是一个单一的文本。简单 O 值是最常见关系类型,去年竞赛中所发布的所有 schema 都属于这种类型。为了保持格式统一,简单 O 值类型的 schema 定义通过结构体保存,结构体中只有一个 @value 字段存放真正的 O 值类型。例如,「妻子」关系的 schema 定义为:
|
|
复杂 O 值:也就是说 O 是一个结构体,由多个语义明确的文本共同组成,多个文本对应了结构体中的多个槽位(slot)。在复杂 O 值类型的定义中,@value 槽位可以认为是该关系的默认 O 值槽位,对于该关系不可或缺,其他槽位均可缺省。例如,「饰演」关系中 O 值有两个槽位 @value 和 inWork,分别表示「饰演的角色是什么」以及「在哪部影视作品中发生的饰演关系」,其 schema 定义为:
|
|
输入/输出:
数据集说明:
评估方法:
基线系统 Baseline Systems
P: 准确率
R:召回率
F1: 2 P*R/(P+R)
模板匹配:是关系分类中最常见的方法,使用一个模板库对输入文本两个给定实体进行上下文匹配,如果满足模板对应关系,则作为实体对之间的关系。常见的模板匹配方法主要包括:
例:句子中上下位关系,比如hyponym(China; Asia countries)。从下面两个句子中都可以抽取出这种关系:
Asia countries, especially China, Japan, and India…
Asia countries, such as China, Japan, and India…
两个实体之间的especially和such as可以看做这种关系的特征。寻找更多表达这种关系的句子,构造规则模板,即可用于抽取构成上下位关系的实体,从而发现新的三元组。
使用NLP工具获取句子相关特征,对处理结果一般进行如下处理:
手写规则的 优点 :
缺点:
有监督的关系抽取方法:
将关系抽取看成是一个基于构造特征的分类问题
常见特征:
实体特征,包括实体前后的词,实体类型,实体之间的距离等
chunk,如 NP,VP,PP 这类短语
实体间的依存关系,实体间树结构的距离,及其他特定的结构信息
标准流程:
通常会训练两个分类器,第一个分类器是 yes/no 的二分类,判断命名实体间是否有关系,如果有关系,再送到第二个分类器,给实体分配关系类别。这样做的好处是通过排除大多数的实体对来加快分类器的训练过程,另一方面,对每个任务可以使用基于具体任务的特征集。常用的分类器包括 MaxEnt、Naive Bayes、SVM 等。
Pipeline
Pipeline方法先在句子中抽取实体、而后再抽取关系。即把实体识别和关系分类作为两个完全独立的过程,互不影响,关系的识别依赖于实体识别的效果。
Joint Model
现有联合抽取模型总体上有两大类:
1、共享参数的联合抽取模型
通过共享参数(共享输入特征或者内部隐层状态)实现联合,此种方法对子模型没有限制,但是由于使用独立的解码算法,导致实体模型和关系模型之间交互不强。
2、联合解码的联合抽取模型
为了加强实体模型和关系模型的交互,复杂的联合解码算法被提出来,比如整数线性规划等。这种情况下需要对子模型特征的丰富性以及联合解码的精确性之间做权衡:
因此,需要一个算法可以在不影响子模型特征丰富性的条件下加强子模型之间的交互。
此外,很多方法再进行实体抽取时并没有直接用到关系的信息,然而这种信息是很重要的。需要一个方法可以同时考虑一个句子中所有实体、实体与关系、关系与关系之间的交互。
Pipeline对比 Joint Model:
相比于传统的Pipeline方法,联合抽取能获得更好的性能。虽然Pipeline方法易于实现,这两个抽取模型的灵活性高,实体模型和关系模型可以使用独立的数据集,并不需要同时标注实体和关系的数据集。但存在以下缺点:
Bootstrapping:利用少量的实例作为初始种子集合,然后在种子集合上学习获得关系抽取的模板,再利用模板抽取更多的实例,加入种子集合中并不断迭代。Bootstrapping的优点构建成本低,适合大规模的关系任务并且具备发现新关系的能力,但也存在对初始种子较为敏感、存在语义漂移、准确率等问题。Bootstrapping 如今在工业界中依旧是快速构建大规模知识图谱的重要方法。在实际使用中,可以考虑结合基于深度语义模型的关系抽取方法,进一步提高图谱召回。
工业应用:
bootstrapping比较常见的方法有DIPRE和Snowball。和DIPRE相比,Snowball通过对获得的模板pattern进行置信度计算,一定程度上可以保证抽取结果质量。
DIPRE: Dual Iterative Pattern Expansion
DIPRE是从HTML文档集合中提取结构化关系(或表格)的一种方法。 该方法在类似Web的环境下效果最好,其中的表格要提取的tuples往往会在反复出现在集合文档中一致的context内。 DIPRE利用这种集合冗余和内在的结构以提取目标关系并简化训练。
DIPRE Pipeline
DIPRE pattern由5-tuple
伪代码:
|
|
DIPRE样例
从 5 个种子 tuples 开始,找到包含种子的实例,替换关键词,形成 pattern,迭代匹配,就为 (author,book) 抽取到了 relation pattern,x, by y, 和 x, one of y’s。
DIPRE利弊
优点:
缺点:
远程监督算法基于一个非常重要的假设:对于一个已有的知识图谱中的一个三元组(由一对实体和一个关系构成),外部文档库中任何包含这对实体的句子,在一定程度上都反映了这种关系。基于这个假设,远程监督算法可以基于一个标注好的小型知识图谱,给外部文档库中的句子标注关系标签,相当于做了样本的自动标注,因此是一种半监督的算法。
(1)多示例学习:主要基于Bag的特征进行关系分类,主要代表文献包括PCNN[1]、Selective Attention over Instances[2]、Multi-label CNNs[3]、APCNNs[4],其中Bag的表示主要方式和池化方式为:
(2)强化学习:在采用多示例学习策略时,可能会出现整个Bag包含大量噪声的情况。基于强化学习的CNN+RL[5]比句子级别和Bag级别的关系分类模型取得更好效果。
模型主要由样例选择器和关系分类器构成。样例选择器负责从样例中选择高质量的句子,采取强化学习方式在考虑当前句子的选择状态下选择样例;关系分类器向样例选择器反馈,改进选择策略。
(3)预训练机制:采取“Matching the Blank[6]”方法,首次在预训练过程中引入关系分类目标,但仍然是自监督的,没有引入知识库和额外的人工标注,将实体metion替换为「BLANK」标识符。
TEXTRUNNER三个关键步骤:
Open Information Extraction from the Web(TextRunner, 2007,华盛顿大学)
Self-Supervised Learner:
parsing :在一个小的数据集进行语法解析,解析句子中的名词短语
构造三元组:将名词短语作为可能的实体e_i,两个名词短语之间的词语作为关系,构成三元组候选集合
使用约束构造正负样本: 满足下述三个条件的作为正样本
训练分类器:三元组 ,将三元组特征化,训练一个贝叶斯分类器;特征有
Single-Pass Extractor:
输入一个句子,处理过程如下
Redundancy-based Assessor:
OLLIE支持基于语法依赖树的关系抽取。流程图如下,主要包含三个步骤
开源项目:https://github.com/machinalis/iepy
主要做关系抽取:IEPY is an open source tool for Information Extraction focused on Relation Extraction.
工具特征:
带web-UI的语料标注⼯具。
基于主动学习的关系抽取的工具。
基于规则的关系抽取工具。
有web-UI帮助使用:
1)方便非专业用户使用部分功能。
2)允许分布式的用户输入。
通过斯坦福CoreNLP做共指解析。
可以基于开源代码作二次开发。
安装:
作为Python包安装,pip install iepy, 并下载第三方数据 iepy –download-third-party-data
使⽤:
1 创建项目
iepy –create
2 导⼊要抽取的语料
python bin/csv_to_iepy.py data.csv
3 数据预处理( text tokenization, sentence splitting, lemmatization, part-of-speech tagging, and named entity recognition)
python bin/preprocess.py
4 启动web-ui查看项⽬
python bin/manage.py runserver
5 进行active learning(需要自己再依据工具提示标一些数据)或rule-based(写规则)关系抽取
6 在界面上标⼀些测试集来验证抽取效果。
功能:
对于要处理的语料导⼊到项目里,提供前面的预处理和两种方式的关系抽取。Active Learning的需要自己定义关系和标⼀些数据。Rule-based的需要自己写规则。也封装好了⼀些脚本⽅便的做导⼊数据、预处理、规则检查等。
使用方式:
python包 + webUI,类似pyspider。可以用界面来定义关系和查看抽取结果、标注测试集等。不过还是需要⽤命令行来load数据,预处理等,这部分其实也可以在界面实现。
评价:
由于开发的时间早,抽取的方法不新,也没有预先在⼤数据集上训练得到通用领域关系抽取的模型,需要用户自己定义关系并标注数据。每⼀个抽取任务创建⼀个project,使⽤web界面方便操作和可视化,感觉我们做领域迁移也可以采用这种⽅法,把流程固定,然后通过创建不同的project,导⼊不同的数据,定义不同的关系,然后⽤webUI进⾏可视化和人工操作。
3.4.1 介绍
工业级的NLP工具:功能很强⼤,不⽌是做Information Extraction,⽤Cython优化,各种处理超级快(官网fastest in the world),能⽤于在真实场景和产品里的。适合对用于Deep Learning的⽂本进行预处理。能和TensorFlow, PyTorch, scikit-learn, Gensim 等深度学习框架无缝衔接。
3.4.2 工具特点:
并非专门做信息抽取,也没有抽取关系的功能。封装了NLP相关的基础工作,并优化了速度以用于真实产品。
同时也允许用户自己训练模型load后使⽤。
使用方式:
python包+load下载的模型。
评价:
功能很多很实用,定位在于做深度学习前面的文本预处理,且优化速度。使用方式和很多⼯具⼀样,使用python包,封装好各种通用功能和接口,再通过加载不同的模型实现使⽤在不同领域、语言或者应对方法改进的情况。
3.5.1 介绍
永恒语⾔学习:
Never-ending Language Learning。不断学习语⾔知识,2010年提出。
architecture:
流程:
利⽤少量标记样本集合训练学习模型, 然后⽤该模型去标记更多样本。(需要偶尔人工标注)。运⽤多视角学习(multi-view learning)分别从文本背景信息、网页结构信息、构词法特征以及规则学习4个角度进行新知识抽取和知识库的扩充。
3.5.2 总结
评价:
可以借鉴这种方式扩充构建好的知识库,对于通用领域知识库可以在网页文本上抽取,特定领域的可以喂相关领域的文档或者爬取到的网页文本。信息抽取工具应该不包含这个功能,而是通过这个⼯具的使用能够实现这种功能。
官网地址:http://deepdive.stanford.edu/
Deepdive是stanford大学InfoLab实验室开发的一个开源知识抽取系统,它通过弱监督学习,从非结构化的文本中提取结构化的关系数据。DeepDive用于提取实体之间的复杂关系并推断涉及这些实体的事实。在使用Deepdive进行关系抽取的时候,使用者不需要关心算法,只需要指定实体的特征,Deepdive通过联合推理,即可得出两个实体之间有关系的概率。
Deepdive的优点如下:
(1)可以处理带噪声的数据,用户可以通过对断言设置置信度来矫正噪声
(2)可以通过使用已有的领域知识来指导推理结果,通过用户反馈的结果来提高预测的准确率
(3)使用远监督技术,不需要或仅需要少量数据即可完成抽取
一个中文抽取示例:股权抽取 https://zhuanlan.zhihu.com/p/43143663
官网地址:https://stanfordnlp.github.io/CoreNLP
Stanford CoreNLP是斯坦福大学提供的自然语言处理工具,是由Java写成的,可通过使用Web服务与CoreNLP进行交互,从而使用python等其他语言进行编程,目前提供python接口可直接安装使用,支持多种语言。
Open IE(开放信息提取)是指从纯文本中提取关系元组,与其他提取不同的是,Open IE 不需要提前定义schema,主要利用语言结构进行开放领域信息抽取。Stanford Open IE是Stanford CoreNLP包中的一个开放领域信息抽取模块,该模块的抽取思路如下:
1、先将句子分成几个子句(学习一个分类器)
2、最大程度地缩短每个子句,产生一组所需的句子片段
3、从片段中提取三元组(自然逻辑)
相关论文链接:https://nlp.stanford.edu/pubs/2015angeli-openie.pdf
Relation Extractor(关系抽取)是Stanford CoreNLP中的另一个处理模块,用于抽取特定领域的关系。目前支持Live_In, Located_In, OrgBased_In, Work_For, and None这几种关系。用户可以使用提供的接口使用自己的数据集训练自己的模型,从而实现特定领域的关系抽取。该模块的抽取思路如下:
1、数据预处理:tokenization,part of speech tagging
2、实体识别(标注)
3、使用多类逻辑回归分类器对关系进行分类
Stanford Open IE& Relation Extractor对比
模块 | 领域 | 使用方法 | 用户使用 |
---|---|---|---|
Open IE | 开放领域 | 下载StandfordCoreNLP包 | 可以使用java或者其他语言进行服务器与来进行编码 |
Relation Extractor | 特定领域 | 下载StandfordCoreNLP包,用户可自行训练特定领域的模型 | 可以使用java或者其他语言与服务器交互来进行编码 |
收录文章https://zhuanlan.zhihu.com/p/139485679
https://zhuanlan.zhihu.com/p/77868938
SemEval-2020自由文本关系抽取冠军方案解读
https://github.com/WindChimeRan/NREPapers2019
https://paperswithcode.com/sota
2019全国知识图谱与语义计算大会
望江人工智库 信息抽取
https://github.com/yuanxiaosc/Entity-Relation-Extraction
https://zhuanlan.zhihu.com/p/145812779