图谱实战 | 无本体约束的开放知识图谱构建:以OpenIE为代表的开放信息抽取项目技术方案解读...

目前,本体一直是知识图谱落地过程中的容易受到抨击的点,很多非专业用户对图谱的需求,其实并不想花费大量的时间去做本体约束,而是想直接拿来就用,开箱即用,以达到搜索与分析等目的。对本体的强专业性门槛,直接导致了知识图谱构建平台面临着很实实在在的采购困境。

因此,关于无本体约束的开放知识图谱构建这个话题就会被提出来,例如几年来风靡一时的magi等,其使用体验让人耳目一新(技术上很有挑战,落地模式上还有很漫长的路)。

因此,带着开放信息抽取这一问题,本文以以OpenIE为代表的开放信息抽取项目技术方案解读,供大家参考。

问题的提出

开放信息抽取是开放知识图谱构建的一个重要组成部分,在这方面的工作中,OpenIE是一个典型代表。

698b0fbc79369d8e42596df9b88fd81d.png

OpenIE是一个由华盛顿大学研发的开放信息抽取系统,面向开放文本,并提取大量的关系元组(Arg1, Pred, Arg2),而不需要任何特定关系的训练数据,例如,给定句子:

McCain fought hard against Obama, but finally lost the election

Open IE系统可以从中提取出两个元组:

<McCain, fought against, Obama>

<McCain, lost, the election>

此外,该系统还为每一个抽取结果进行了统计,例如,在系统中输入导致自杀的原因是什么时候,指定relation为cause,arugument为suicide,可以在左侧直接得到原因及其出现的频次,21 answers from 197 sentences

Untreated depression (38)、Depression (mood) (38)、the blast (20)、the explosion (19)、Death (17)、the drugs (13)、the root (12)、Antidepressant (9)、Adderall (5)、OH (4)、Great Depression (2)、Borderline personality disorder (2)、the acne medicine (2)、Idea (2)、Methylphenidate (2)、our understanding (2)、Major depressive disorder (2)、Those letters (2)、the government (2)、Sertraline (2)。

从中可以看到,未经治疗的抑郁症(Untreated depression)是导致自杀的罪魁祸首。

8b01738945807fed95907b555a24e397.png进一步的,针对某个特定原因,还给出了支撑性的可信来源,例如:Untreated depression这一结果,来源句子: Untreated depression is the number one cause for suicide , but bipolar disorder is a close second。

该句子的来源网站: http://www.peteearley.com/2010/03/07/making-a-difference-crisislink-benefit/

这也成为前几年火热的magi搜索思想的一个重要来源。

OpenIE知识库项目从2007年启动,逐年不段更新,自发布以来经历了多个版本:

2004年,华盛顿大学发布了第一OpenIE系统-基于模板的knowitall;

2007年发布OpenIE系统TextRunner;

2010年发布第二个版本Reverb;

2014年发布第四个版本OpenIE4.0,采用基于语义分析的抽取方法,并同时抽取时间和空间信息;

2016年至今,为第五个版本OpenIE5.0,支持符合名词性短语、数字和列表等信息的抽取。

本文围绕着OpenIE这一项目的几个版本系统进行介绍,从中我们可以看到基于规则的方法在信息抽取中的强大作用,以及整个系统逐步完善的整个过程,希望给大家带来一定的启发。

一、OpenIE1.0:KnowItAll

2004年,华盛顿大学发布了第一个openie系统knowitall,利用可扩展的本体和少量的通用规则模板种子,为预定义类别和关系生成提取模板

1、 KnowItAll的构成

该系统包括提取器(Extractor)、搜索引擎接口(Search Engine Interface)、以及概率评估器(Probabilistic Assessment)三个基本组件。

其中,在提取器中,KNOWITALL从一组通用的、独立于领域的模板中为每个类和关系实例制定一套提取规则,如经典的Marti Hears上下位抽取模式:

8f25c367e4ccb68209e545ded17109f8.png

如上表所示,模板 "NP1如NPList2 "可抽取上下位信息,NPList2中每个简单名词短语(NP)都是NP1的具体实例,NP1是一个实体类别。

例如,给定句子: "我们提供巴黎、尼斯和蒙特卡洛等城市的旅游",

可提取出三个类别为城市的实例: “巴黎”、“尼斯”和“蒙特卡洛”

2、实例关系模板的生成

基于模板对特定的类别进行模板实例化和关键词keywords,并添加语法约束,例如抽取的NP1、NP2等必须是简单名词短语(一个名词前面有零个或多个修饰词), NPList1、NPList等也必须是简单名词短语集合。

5d6afe118aae2c7afb251f8401c545ca.png

对于上述规则,如果要识别一个名为country的关系类别,则将“country”替换Class1,成为country类别的识别规则,并将规则中的字母序列作为关键词集合,变为"countries such as" ,如下:

120dd7f0339972a32fcf4a7121ef3e9c.png

同样的,如果在已知元组中两个元素的情况下,而试图抽取另一个元素时,则可以进一步生成二元规则。

例如,针对"x plays for Seattle Mariners"这个二元关系进行提取时,将Seattle Mariners绑定到一个SportsTeam的实例以及加入到关键词集合当中:

d73665e63671a5fc33bf4a966b9223ef.png

3、基于搜索引擎接口的实例扩充

为了扩大知识抽取的数据来源,KnowItAll针对特定类别提取规则中的关键词自动自动构造查询语句,向Google、Alta Vista、Fast等搜索引擎中发出请求进行搜索,如以 "cities such as"为关键词查询,可以返回大量包含该关键词的句子集合,例如下图以微软必应搜索的返回结果。

d35b021f57dd43414390ebabfd7f6ae4.png

提取器针对返回的结果,使用Brill tagger进行词性标注和名词短语识别,依照上面所述的规则进行匹配和规则约束提取。

4、基于概率评估器的三元组置信度评估

由于抽取出来的结果包含大量的噪声,因此需要针对提取的结果进行置信度估计。

有意思的是,KnowItAll认为,假设“Cuba Gooding”是一个演员,那么在通常情况下,"Cuba Gooding starred in "这个短语在网络出现次数会比其他短语更多,其中的判别词相当于关系的显式标记词。

因此,"Cuba Gooding starred in "中,"X starred in "就是一个辨别词组的模式,这个模式可以通过预先定义好的抽取规则进行自动生成

概率评估器利用搜索引擎查询判别词的方式,将查询返回的数量来作为共现次数,在此基础上通过计算提取结果和一组判别词的共现次数或者点间互信息PMI值来作为提取结果成立的一个重要特征,选择朴素贝叶斯网络来进行二分类。

由于贝叶斯概率是基于观察样本估计出来的,需要一个足够大的训练集来估计给定类别下特征出现的概率。因此,Knowitall采用了基于Bootstrapping的方法来构造正负样例:

首先从通用规则模板中为每个关系实例化一组提取规则,并通过搜索引擎进行查询统计PMI信息,同时从规则的关键词短语和类名中生成一组判别词短语,并反复执行如下操作:

步骤1、为每个关系类别找到200个实例,利用通用判别器短语上找到20个PMI较高的种子作为正样本;

步骤2、在所有通用判别器短语上找到20个PMI较高的种子作为正样本;使用这些正样本种子来训练多个判别器;

步骤3、选择5个最好的判别器,并在这5个判别器上找到一组新的高PMI的种子。

5)知识提取数据的存储

在经过模板定义、搜索引擎查询、规则抽取以及贝叶斯分类之后,Knowitall可以得到大量的三元组数据,并将包括三元组元数据,支撑的证据,以及置信度在内的数据存储在关系型数据库RDBMS中,其中的支撑证据很有意思,具备结果的解释性。

二、OpenIE1.0:TextRunner

2007年,华盛顿大学发布了TextRunner,该系统基于宾夕法尼亚州树库中启发式生成的例子作为训练集,使用非词汇化词性和NP短语特征作为特征,并使用朴素贝叶斯模型(后续采用线性CRF与马尔可夫网络)进行训练来抽取知识

1、TEXTRUNNER的构成

TEXTRUNNER由自监督学习器(Self-Supervised Learner)、单步抽取器(Single-Pass Extractor)以及基于冗余的评估器(Redundancy-Based Assessor)这三个重要部件构成。

2、自监督学习器 自监督学习器通过构造训练数据集,学习一个贝叶斯分类器,来判断给定三元组是否可信。具体地:

1)先对数据集进行语法解析。 解析句子中的名词短语,并将名词短语作为可能的实体,两个名词短语之间的词语作为关系,构成三元组候选集合;

2)使用约束来构造正负样本。 例如,若两个实体之间存在依赖路径并且路径小于一定的值,两个实体都不是代词时,将该数据作为正样本;

3)构造特征训练分类起。 如三元组中的字符个数、停用词个数、头实体左边的词性、尾实体右边的词性等特征,并数值化,训练贝叶斯分类器;

3、单步抽取器

单步抽取器针对输入一句话,进行词性标注和名词短语识别,识别名词短语之间的词语作为关系表示,使用分类器进行分类,判别这个三元组候选是否可信;

4、冗余评估器

冗余的评估器通过启发式的规则对关系短语进行归一化,比如去除不必要的修饰词语,如去除was originally developed by 中的副词,originally形成was developed by 作为的规范化形式,并计算三元组在不同句子中的频次,通过设定阈值,保留高频词的结果作为最终结果。

三、OpenIE2.0:Reverb

为了弥补TextRunner系统中出现的不连贯问题,学习的提取器对是否在关系短语中包含每个词做出了一系列的决定,会导致不可理解的关系短语,2010年,华盛顿大学发布了第二个版本Reverb,采用基于词性标注的关系抽取方式。

1、Reverb的构成

Reverb使用OpenNLP对原始句子进行词性标注和组块识别,先后完成关系抽取和论元抽取两个阶段。

在关系抽取阶段,对句子中的每一个动词,找出满足该序列以动词开头,并同时满足句法约束和词法约束,如果任何一对匹配在句子中相邻或重叠,则将它们合并为一个匹配,形成关系短语集合;

论元抽取阶段,针对关系短语集合中的每个关系短语,在句子中找到离该关系短语最近的名词短语,并满足使该名词短语不是相对代词、疑问词(以WH开头)活着存在性名词(比如there)。如果能找到这样的名词短语对,则作为提取结果返回。

2、Reverb的句法约束

Reverb提出了基于动词的关系短语抽取模型,并同时设计了句法约束和词法约束两个约束条件。句法约束通过定义句法模版(词性模式)来完成,例如:

V = verb particle? adv?  
W =(noun|adj|adv|pron|det)  
P = (prep|particle|inf. marker)

该词性模式将关系短语限制为简单的动词短语、紧跟在动词短语后面的介词或小品词(与动词构成短语动词的副词或介词)、或者动词短语后接简单的名词短语,并以介词或小品词结尾的词语序列。

句法约束要求关系短语必须与上述POS标签模式相匹配,如果一个动词在一个句子中有多个可能的匹配,则选择可能最长的匹配结果,如果模式匹配多个相邻序列,则将它们合并成一个关系短语。这种细化使模型能够轻松处理包含多个动词的关系短语,并且满足短语构成的连续性。

四、OpenIE3.0:OLLIE

与第一个版本TextRunner相比,Reverb已经有性能上的提升,但它只能处理有限的句子结构,用浅层句法处理方法来识别以动词开始以及出现在参数短语之间的关系短语,并将关系限制在动词模式的子集上

这种方法只对一个句子进行局部分析,忽略了整体的上下文信息,所以提取的关系往往不是在句子中被明确真实表述的事实关系。

734ce243631a1a8281e1b6e5542d81c2.png

因此,2012年发布第三个版本OLLIE,试图扩大关系短语的句法范围以覆盖更多的关系表达,并使得抽取出来的三元组形式允许有额外的上下文信息(如包括修饰词)。

1、OLLIE的构成

在实现上,如上图所示,OLLIE使用一组来自REVERB的高精度种子元组,利用bootstraaping的方法来构造一个大型训练集,并在此基础上训练并应用抽取模板集合。

2、关系模式的获取

在抽取模版的构造上,OLLIE使用了依存句法分析,与词法模版十分不同,考虑了词语之间的依存关系,使得提取的知识关系进一步明确,通过在语料中进行统计,并设计相应规则,可以取频次较高的模式作为开放模式集合。具体地,关系模式的获取经历了收集、标注、检测、泛化等几个步骤:

步骤1:模式实例的收集。 对包含三元组的句子进行依存关系分析,获得arguments和relation词语的依存路径;

步骤2:关系模式的标注。 首先,对关系节点进行标注,注明关系词语(作为词法限制)和词性(作为词性限制);接着创建关系模式,通过将“is”等词归一化成 “be”,同时将关系词语替换成为{rel};

步骤3:关系模式的检测。 对关系模式进行句法检测,以判定句法模式的成立性,例如,路径上没有没有槽节点,关系词语在arg1和ar2中间等。如果通过检测,那么就是一个句法模式,可以作为一个模式,否则还需要进行语义和句法上的检测,才可以作为一个模式;

步骤4:关系模式的泛化。 为了使关系模式更具有一般性,需要去除路径中的某些非通用成分,以提升泛化能力。例如去掉所有关系节点的词义限制、将所有介词边转换为抽象的 {prep ∗} 边、用 {prep} 替换提取模板中的特定介词。如此一来,对于给定的三元组

(Godse; kill; Gandhi)

其依存路径可能是:

{Godse}↑nsubj↑{kill:postag=VBD}↓dobj↓{Gandhi},

经过处理后,形成泛化模式为:

{arg1}↑nsubj↑{rel:postag=VBD}↓dobj↓{arg2}。

3、基于关系模式的抽取

在构建好开放模式之后,则可以实时提取时,先对句子进行依存句法分析,并将结果将开放模式与句子的依赖性解析进行匹配,并确定参数和关系的基本节点。然后我们扩展这些来传达与提取相关的所有信息,例如:给定句子:

“I learned that the 2012 Sasquatch music festival is scheduled for May 25th until May 28th.”,

经过依存句法分析后可以得到如右图所示的结果,通过匹配后命中模式:

{arg1}↑nsubjpass↑ {rel:postag=VBN} ↓{prep ∗}↓ {arg2}

先将arg1匹配到'festival',rel匹配到'scheduled',并用prep'for'匹配到arg2' 25th',得到(festival, be scheduled for, 25th)的知识元组信息。

为了得到更好的知识信息,再利用amod, nn, det等标签进行词语成分的扩充,如:

”25th”变成“May 25th”,

“ festival”变成“the 2012 Sasquatch music festival”,

最后得到的三元组变为:

(the Sasquatch music fes-tival; be scheduled for; May 25th)。

五、总结

开放域抽取的特点是不限定关系类别、不限定目标文本,难点在于如何获取训练语料、如何获取实体关系类别、如何针对不同类型目标文本抽取关系。

由华盛顿大学研发的开放信息抽取系统OPENIE从2007年启动,到现在已经发布了第五个版本,从其中每个版本迭代中所体现出来的算法升级,可以看到整个系统不断完善。

本文围绕着OpenIE这一项目的几个版本系统进行介绍,从中我们可以看到基于规则的方法在信息抽取中的强大作用,以及整个系统逐步完善的整个过程,希望给大家带来一定的启发。

知识可信与来源实证是解决当前知识图谱数据不准确的一个重要解决形式,关于这一点,我们可以多多思考。

参考文献

1、https://openie.allenai.org/

2、http://reverb.cs.washington.edu

3、http://turing.cs.washington.edu/papers/ijcai07.pdf

4、https://github.com/knowitall/openie/

关于老刘

老刘,刘焕勇,NLP开源爱好者与践行者,主页:https://liuhuanyong.github.io。

就职于360人工智能研究院、曾就职于中国科学院软件研究所。

老刘说NLP,将定期发布语言资源、工程实践、技术总结等内容,欢迎关注。


OpenKG

OpenKG(中文开放知识图谱)旨在推动以中文为核心的知识图谱数据的开放、互联及众包,并促进知识图谱算法、工具及平台的开源开放。

6ee9df7bebf4e7ac1323b828e1728856.png

点击阅读原文,进入 OpenKG 网站。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/477415.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

计算机视觉,凉了?

计算机视觉是人工智能的关键领域之一&#xff0c;是一门研究如何使机器“看”的科学。近年来&#xff0c;尽管计算机视觉技术在学术上取得了长足的进步&#xff0c;但由于缺少“现金牛”应用&#xff0c;经常在网络上出现“计算机视觉凉凉了”的言论。其实这种观点是非常片面的…

LeetCode 1346. 检查整数及其两倍数是否存在(哈希)

1. 题目 给你一个整数数组 arr&#xff0c;请你检查是否存在两个整数 N 和 M&#xff0c;满足 N 是 M 的两倍&#xff08;即&#xff0c;N 2 * M&#xff09;。 更正式地&#xff0c;检查是否存在两个下标 i 和 j 满足&#xff1a; i ! j0 < i, j < arr.lengtharr[i]…

微服务架构的基础框架选择:Spring Cloud还是Dubbo?

最近一段时间不论互联网还是传统行业&#xff0c;凡是涉及信息技术范畴的圈子几乎都在讨论微服务架构。近期也看到各大技术社区开始组织一些沙龙和论坛来分享Spring Cloud的相关实施经验&#xff0c;这对于最近正在整理Spring Cloud相关套件内容与实例应用的我而言&#xff0c;…

自监督学习效果差?Meta AI 提出 Q-score 快速过滤错误样本!

文 | jxyxiangyu自监督学习指的是不依靠人工标注数据&#xff0c;直接从数据中学习到有用的特征表示。自监督学习中所采用的监督信息可以是“是否属于同一实例样本”的二分类标签&#xff08;对比学习&#xff09;&#xff0c;也可以是一段连续的自然语言文本的下一个词&#x…

LeetCode 1347. 制造字母异位词的最小步骤数

1. 题目 给你两个长度相等的字符串 s 和 t。每一个步骤中&#xff0c;你可以选择将 t 中的 任一字符 替换为 另一个字符。 返回使 t 成为 s 的字母异位词的最小步骤数。 字母异位词 指字母相同&#xff0c;但排列不同的字符串。 示例 1&#xff1a; 输出&#xff1a;s &qu…

图谱实战 | 为什么我们需要医学知识图谱?

转载公众号 | OMAHA联盟 人工智能正在变得司空见惯。在医疗领域&#xff0c;医生也越来越重视人工智能所带来的疾病诊断效率和治疗价值的提升。要实现医疗人工智能&#xff0c;需要构建医学知识图谱以满足医疗领域对知识的应用需求。◆ ◆ ◆知识图谱是什么&#xff1f;知识图…

Spring Cloud构建微服务架构(三)断路器

在微服务架构中&#xff0c;我们将系统拆分成了一个个的服务单元&#xff0c;各单元间通过服务注册与订阅的方式互相依赖。由于每个单元都在不同的进程中运行&#xff0c;依赖通过远程调用的方式执行&#xff0c;这样就有可能因为网络原因或是依赖服务自身问题出现调用故障或延…

测试集涨点猛如虎,推上线无收益?算法新手翻车原因盘点!

文 | 杨旭东知乎在推荐算法领域&#xff0c;时常会出现模型离线评测效果好&#xff0c;比如AUC、准召等指标大涨&#xff0c;但上线后业务指标效果不佳&#xff0c;甚至下降的情况&#xff0c;比如线上CTR或CVR下跌。本文尝试列举一些常见的原因&#xff0c;为大家排查问题提供…

LeetCode 1348. 推文计数(哈希map+set)

1. 题目 请你实现一个能够支持以下两种方法的推文计数类 TweetCounts&#xff1a; recordTweet(string tweetName, int time) 记录推文发布情况&#xff1a;用户 tweetName 在 time&#xff08;以 秒 为单位&#xff09;时刻发布了一条推文。 getTweetCountsPerFrequency(s…

Spring Cloud构建微服务架构(二)服务消费者

在上一篇《Spring Cloud构建微服务架构&#xff08;一&#xff09;服务注册与发现》中&#xff0c;我们已经成功创建了“服务注册中心”&#xff0c;实现并注册了一个“服务提供者&#xff1a;COMPUTE-SERVICE”。那么我们要如何去消费服务提供者的接口内容呢&#xff1f; Rib…

2202年了,继续大比拼ViT、MLP、CNN结构有意义吗??

文 | 卖萌菌近日&#xff0c;MSRA发布了一篇题为《Transformer不比CNN强 Local Attention和动态Depth-wise卷积前世今生》的博文&#xff0c;再次谈论了这个老生常谈的话题。文中提到&#xff0c;Depth-wise CNN 和 attention 存在高度相似的结构&#xff0c;调参优化之后&…

Spring Cloud构建微服务架构(一)服务注册与发现

Spring Cloud简介 Spring Cloud是一个基于Spring Boot实现的云应用开发工具&#xff0c;它为基于JVM的云应用开发中的配置管理、服务发现、断路器、智能路由、微代理、控制总线、全局锁、决策竞选、分布式会话和集群状态管理等操作提供了一种简单的开发方式。 Spring Cloud包…

击败GPT3,刷新50个SOTA!谷歌全面统一NLP范式

文 | ZenMoore编 | 小轶写在前面一觉醒来&#xff0c;迷糊之中看到一条推特&#xff1a;瞬间清醒&#xff01;Google 的 Yi Tay (and Mostafa) 团队提出了一个新的策略 Mixture-of-Denoisers, 统一了各大预训练范式。重新思考现在的预训练精调&#xff0c;我们有各种各样的预训…

剑指Offer - 面试题3. 数组中重复的数字(哈希)

1. 题目 找出数组中重复的数字。 在一个长度为 n 的数组 nums 里的所有数字都在 0&#xff5e;n-1 的范围内。数组中某些数字是重复的&#xff0c;但不知道有几个数字重复了&#xff0c;也不知道每个数字重复了几次。请找出数组中任意一个重复的数字。 示例 1&#xff1a; 输…

击败GPT3,刷新50个SOTA,谷歌全面统一NLP范式?

声明&#xff1a;本文原创首发于公众号夕小瑶的卖萌屋。作者&#xff1a;ZenMoore&#xff0c;编辑&#xff1a;小轶--->【我是传送门】写在前面一觉醒来&#xff0c;迷糊之中看到一条推特&#xff1a;瞬间清醒&#xff01;Google 的 Yi Tay (and Mostafa) 团队提出了一个新…

Spring Boot 2.3.0 发布

Spring Boot 2.3.0 已经发布&#xff0c;此版本主要更新内容包括&#xff1a; 依赖升级 新版本核心组件依赖升级 Spring Data NeumannSpring HATEOAS 1.1Spring Integration 5.3Spring Kafka 2.5Spring Security 5.3Spring Session Dragonfruit 三方组件依赖 Cassandra Dri…

剑指Offer - 面试题4. 二维数组中的查找(双指针)

1. 题目 在一个 n * m 的二维数组中&#xff0c;每一行都按照从左到右递增的顺序排序&#xff0c;每一列都按照从上到下递增的顺序排序。请完成一个函数&#xff0c;输入这样的一个二维数组和一个整数&#xff0c;判断数组中是否含有该整数。 示例: 现有矩阵 matrix 如下&…

涵盖1600+任务的巨型Benchmark来了!跑个测试花一周??

文 | 兔子酱最近&#xff0c;benchmanking又卷出了新高度&#xff0c;allen AI 前段时间发布了史上最强基准测试——NATURAL-INSTRUCTIONSv2&#xff0c;涵盖了1600个任务、70个不同任务类型、50种不同语言&#xff0c;用来测试生成模型的泛化性。论文标题&#xff1a;Benchmar…

Spring Boot 2.x基础教程:使用MyBatis访问MySQL

之前我们已经介绍了两种在Spring Boot中访问关系型数据库的方式&#xff1a; 使用spring-boot-starter-jdbc使用spring-boot-starter-data-jpa 虽然Spring Data JPA在国外广泛流行&#xff0c;但是在国内还是MyBatis的天下。所以&#xff0c;今天这篇我们将具体说说如何在Spri…

剑指Offer - 面试题5. 替换空格(字符串)

1. 题目 请实现一个函数&#xff0c;把字符串 s 中的每个空格替换成"%20"。 示例 1&#xff1a; 输入&#xff1a;s "We are happy." 输出&#xff1a;"We%20are%20happy."限制&#xff1a; 0 < s 的长度 < 10000来源&#xff1a;力扣&…