根据处理数据源的不同,关系抽取可以分为以下三种:
根据抽取文本的范围不同,关系抽取可以分为以下两种:
根据所抽取领域的划分,关系抽取又可以分为以下两种:
限定域关系抽取方法:
数据集
提取码:ta8z
2019语言与智能技术竞赛
2020语言与智能技术竞赛
模板匹配:是关系分类中最常见的方法,使用一个模板库对输入文本两个给定实体进行上下文匹配,如果满足模板对应关系,则作为实体对之间的关系。常见的模板匹配方法主要包括:
例:句子中上下位关系,比如hyponym(China;Asiacountries)。从下面两个句子中都可以抽取出这种关系:
Asiacountries,especiallyChina,Japan,andIndia...
Asiacountries,suchasChina,Japan,andIndia...
两个实体之间的especially和suchas可以看做这种关系的特征。寻找更多表达这种关系的句子,构造规则模板,即可用于抽取构成上下位关系的实体,从而发现新的三元组。
手写规则的优点:
缺点:
有监督的关系抽取方法:
将关系抽取看成是一个基于构造特征的分类问题
常见特征:
标准流程:
通常会训练两个分类器,第一个分类器是yes/no的二分类,判断命名实体间是否有关系,如果有关系,再送到第二个分类器,给实体分配关系类别。这样做的好处是通过排除大多数的实体对来加快分类器的训练过程,另一方面,对每个任务可以使用基于具体任务的特征集。常用的分类器包括MaxEnt、NaiveBayes、SVM等。
Pipeline
Pipeline方法先在句子中抽取实体、而后再抽取关系。即把实体识别和关系分类作为两个完全独立的过程,互不影响,关系的识别依赖于实体识别的效果。
JointModel
现有联合抽取模型总体上有两大类:
1、共享参数的联合抽取模型
通过共享参数(共享输入特征或者内部隐层状态)实现联合,此种方法对子模型没有限制,但是由于使用独立的解码算法,导致实体模型和关系模型之间交互不强。
2、联合解码的联合抽取模型
为了加强实体模型和关系模型的交互,复杂的联合解码算法被提出来,比如整数线性规划等。这种情况下需要对子模型特征的丰富性以及联合解码的精确性之间做权衡:
因此,需要一个算法可以在不影响子模型特征丰富性的条件下加强子模型之间的交互。
此外,很多方法再进行实体抽取时并没有直接用到关系的信息,然而这种信息是很重要的。需要一个方法可以同时考虑一个句子中所有实体、实体与关系、关系与关系之间的交互。
Pipeline对比JointModel:
相比于传统的Pipeline方法,联合抽取能获得更好的性能。虽然Pipeline方法易于实现,这两个抽取模型的灵活性高,实体模型和关系模型可以使用独立的数据集,并不需要同时标注实体和关系的数据集。但存在以下缺点:
Bootstrapping:利用少量的实例作为初始种子集合,然后在种子集合上学习获得关系抽取的模板,再利用模板抽取更多的实例,加入种子集合中并不断迭代。Bootstrapping的优点构建成本低,适合大规模的关系任务并且具备发现新关系的能力,但也存在对初始种子较为敏感、存在语义漂移、准确率等问题。Bootstrapping如今在工业界中依旧是快速构建大规模知识图谱的重要方法。在实际使用中,可以考虑结合基于深度语义模型的关系抽取方法,进一步提高图谱召回。
工业应用:
bootstrapping比较常见的方法有DIPRE和Snowball。和DIPRE相比,Snowball通过对获得的模板pattern进行置信度计算,一定程度上可以保证抽取结果质量。
DIPRE:DualIterativePatternExpansion
DIPRE是从HTML文档集合中提取结构化关系(或表格)的一种方法。该方法在类似Web的环境下效果最好,其中的表格要提取的tuples往往会在反复出现在集合文档中一致的context内。DIPRE利用这种集合冗余和内在的结构以提取目标关系并简化训练。
DIPREPipeline
DIPREpattern由5-tuple*
伪代码:
DIPRE样例
从5个种子tuples开始,找到包含种子的实例,替换关键词,形成pattern,迭代匹配,就为(author,book)抽取到了relationpattern,x,byy,和x,oneofy’s。
DIPRE利弊
优点:
远程监督算法基于一个非常重要的假设:**对于一个已有的知识图谱中的一个三元组(由一对实体和一个关系构成),外部文档库中任何包含这对实体的句子,在一定程度上都反映了这种关系。**基于这个假设,远程监督算法可以基于一个标注好的小型知识图谱,给外部文档库中的句子标注关系标签,相当于做了样本的自动标注,因此是一种半监督的算法。
(1)多示例学习:主要基于Bag的特征进行关系分类,主要代表文献包括PCNN[1]、SelectiveAttentionoverInstances[2]、Multi-labelCNNs[3]、APCNNs[4],其中Bag的表示主要方式和池化方式为:
(2)强化学习:在采用多示例学习策略时,可能会出现整个Bag包含大量噪声的情况。基于强化学习的CNN+RL[5]比句子级别和Bag级别的关系分类模型取得更好效果。
模型主要由样例选择器和关系分类器构成。样例选择器负责从样例中选择高质量的句子,采取强化学习方式在考虑当前句子的选择状态下选择样例;关系分类器向样例选择器反馈,改进选择策略。
(3)预训练机制:采取“MatchingtheBlank[6]”方法,首次在预训练过程中引入关系分类目标,但仍然是自监督的,没有引入知识库和额外的人工标注,将实体metion替换为「BLANK」标识符。
TEXTRUNNER三个关键步骤:
OpenInformationExtractionfromtheWeb(TextRunner,2007,华盛顿大学)
Self-SupervisedLearner:
Single-PassExtractor:
输入一个句子,处理过程如下
Redundancy-basedAssessor:
OLLIE支持基于语法依赖树的关系抽取。流程图如下,主要包含三个步骤
主要做关系抽取:IEPYisanopensourcetoolforInformationExtractionfocusedonRelationExtraction.
工具特征:
安装:
作为Python包安装,pipinstalliepy,并下载第三方数据iepy--download-third-party-data
使:
1创建项目
iepy--create
2导要抽取的语料
pythonbin/csv_to_iepy.pydata.csv
3数据预处理(texttokenization,sentencesplitting,lemmatization,part-of-speechtagging,andnamedentityrecognition)
pythonbin/preprocess.py
4启动web-ui查看项
pythonbin/manage.pyrunserver
5进行activelearning(需要自己再依据工具提示标一些数据)或rule-based(写规则)关系抽取
6在界面上标些测试集来验证抽取效果。
功能:
对于要处理的语料导到项目里,提供前面的预处理和两种方式的关系抽取。ActiveLearning的需要自己定义关系和标些数据。Rule-based的需要自己写规则。也封装好了些脚本便的做导数据、预处理、规则检查等。
使用方式:
python包+webUI,类似pyspider。可以用界面来定义关系和查看抽取结果、标注测试集等。不过还是需要命令行来load数据,预处理等,这部分其实也可以在界面实现。
评价:
3.4.1介绍
工业级的NLP工具:功能很强,不是做InformationExtraction,Cython优化,各种处理超级快(官网fastestintheworld),能于在真实场景和产品里的。适合对用于DeepLearning的本进行预处理。能和TensorFlow,PyTorch,scikit-learn,Gensim等深度学习框架无缝衔接。
3.4.2工具特点:
同时也允许用户自己训练模型load后使。
python包+load下载的模型。
功能很多很实用,定位在于做深度学习前面的文本预处理,且优化速度。使用方式和很多具样,使用python包,封装好各种通用功能和接口,再通过加载不同的模型实现使在不同领域、语言或者应对方法改进的情况。
3.5.1介绍
永恒语学习:
Never-endingLanguageLearning。不断学习语知识,2010年提出。
architecture:
流程:
利少量标记样本集合训练学习模型,然后该模型去标记更多样本。(需要偶尔人工标注)。运多视角学习(multi-viewlearning)分别从文本背景信息、网页结构信息、构词法特征以及规则学习4个角度进行新知识抽取和知识库的扩充。
3.5.2总结
Deepdive是stanford大学InfoLab实验室开发的一个开源知识抽取系统,它通过弱监督学习,从非结构化的文本中提取结构化的关系数据。DeepDive用于提取实体之间的复杂关系并推断涉及这些实体的事实。在使用Deepdive进行关系抽取的时候,使用者不需要关心算法,只需要指定实体的特征,Deepdive通过联合推理,即可得出两个实体之间有关系的概率。
Deepdive的优点如下:(1)可以处理带噪声的数据,用户可以通过对断言设置置信度来矫正噪声(2)可以通过使用已有的领域知识来指导推理结果,通过用户反馈的结果来提高预测的准确率(3)使用远监督技术,不需要或仅需要少量数据即可完成抽取.
抽取流程如下:
StanfordCoreNLP是斯坦福大学提供的自然语言处理工具,是由Java写成的,可通过使用Web服务与CoreNLP进行交互,从而使用python等其他语言进行编程,目前提供python接口可直接安装使用,支持多种语言。
OpenIE(开放信息提取)是指从纯文本中提取关系元组,与其他提取不同的是,OpenIE不需要提前定义schema,主要利用语言结构进行开放领域信息抽取。StanfordOpenIE是StanfordCoreNLP包中的一个开放领域信息抽取模块,该模块的抽取思路如下:
1、先将句子分成几个子句(学习一个分类器)
2、最大程度地缩短每个子句,产生一组所需的句子片段
3、从片段中提取三元组(自然逻辑)
RelationExtractor(关系抽取)是StanfordCoreNLP中的另一个处理模块,用于抽取特定领域的关系。目前支持Live_In,Located_In,OrgBased_In,Work_For,andNone这几种关系。用户可以使用提供的接口使用自己的数据集训练自己的模型,从而实现特定领域的关系抽取。该模块的抽取思路如下: