知识图谱基础知识之三——知识图谱的构建过程

前两次介绍了知识图谱的基本概念和知识图谱的构建方式,这次介绍一个知识图谱系统的构建过程。

1 知识图谱的总体构建思路

如图所示,从原始的数据到形成知识图谱,经历了知识抽取、知识融合(实体对齐)、数据模型构建、质量评估等步骤。

原始的数据,按照数据的结构化程度来分,可以分为结构化数据、半结构化数据和非结构化数据,根据数据的不同的结构化形式,采用不同的方法,将数据转换为三元组的形式,然后对三元组的数据进行知识融合,主要是实体对齐,以及和数据模型进行结合,经过融合之后,会形成标准的数据表示,为了发现新知识,可以依据一定的推理规则,产生隐含的知识,所有形成的知识经过一定的质量评估,最终进入知识图谱,依据知识图谱这个数据平台,可以实现语义搜索,智能问答,推荐系统等一些应用。

以下对知识图谱构建中的步骤进行详细的介绍。

2 知识抽取

我们将原始数据分为结构化数据、半结构化数据和非结构化数据,根据不同的数据类型,我们采用不同的方法进行处理。

2.1 结构化数据处理

针对结构化数据,通常是关系型数据库的数据,数据结构清晰,把关系型数据库中的数据转换为RDF数据(linked data),普遍采用的技术是D2R技术。D2R主要包括D2R Server,D2RQ Engine和D2RRQ Mapping语言。

D2R Server 是一个 HTTP Server,它的主要功能提供对RDF数据的查询访问接口,以供上层的RDF浏览器、SPARQL查询客户端以及传统的 HTML 浏览器调用。 D2RQ Engine的主要功能是使用一个可定制的 D2RQ Mapping 文件将关系型数据库中的数据换成 RDF 格式。D2RQ engine 并没有将关系型数据库发布成真实的 RDF 数据,而是使用 D2RQ Mapping 文件将其映射成虚拟的 RDF 格式。该文件的作用是在访问关系型数据时将 RDF 数据的查询语言 SPARQL 转换为 RDB 数据的查询语言 SQL,并将 SQL 查询结果转换为 RDF 三元组或者 SPARQL 查询结果。D2RQ Engine 是建立在 Jena(Jena 是一个创建 Semantic Web 应用的 Java 平台,它提供了基于 RDF,SPARQL 等的编程环境)的接口之上。 D2RQ Mapping 语言的主要功能是定义将关系型数据转换成 RDF 格式的 Mapping 规则。

2.2 半结构化数据处理

半结构化数据,主要是指那些具有一定的数据结构,但需要进一步提取整理的数据。比如百科的数据,网页中的数据等。对于这类数据,主要采用包装器的方式进行处理。

包装器是一个能够将数据从HTML网页中抽取出来,并且将它们还原为结构化的数据的软件程序。网页数据输入到包装器中,通过包装器的处理,输出为我们需要的信息。

对于一般的有规律的页面,我们可以使用正则表达式的方式写出XPath和CSS选择器表达式来提取网页中的元素。但这样的通用性很差,因此也可以通过包装器归纳这种基于有监督学习的方法,自动的从标注好的训练样例集合中学习数据抽取规则,用于从其他相同标记或相同网页模板抽取目标数据。

2.3 非结构化数据处理

对于非结构化的文本数据,我们抽取的知识包括实体、关系、属性。对应的研究问题就有三个,一是实体抽取,也称为命名实体识别,此处的实体包括概念,人物,组织,地名,时间等等。二是关系抽取,也就是实体和实体之间的关系,也是文本中的重要知识,需要采用一定的技术手段将关系信息提取出来。三是属性抽取,也就是实体的属性信息,和关系比较类似,关系反映实体的外部联系,属性体现实体的内部特征。

非结构化数据的抽取问题,研究的人比较多,对于具体的语料环境,采取的技术也不尽相同。举个例子,比如关系抽取,有的人采用深度学习的方法,将两个实体,他们的关系,以及出处的句子作为训练数据,训练出一个模型,然后对于测试数据进行关系抽取,测试数据需要提供两个实体和出处的句子,模型在训练得到的已知关系中查找,得出测试数据中两个实体之间的关系。这是一种关系抽取的方法。还有人用句法依存特征,来获取关系,这种方法认为,实体和实体之间的关系可以组成主谓宾结构,在一个句子中,找出主谓关系和动宾关系,其中的谓词和动词如果是一个词,那么这个词就是一个关系。比如说“小明吃了一个苹果”,主谓关系是“小明吃”,动宾关系是“吃苹果”,那么就认为“吃”是一个关系。

当然,还有其它很多方法,可以在一定程度上实现实体抽取,关系抽取和属性抽取,效果可能会有差异,这需要在实践中测试和完善。

3 知识融合

知识融合,简单理解,就是将多个知识库中的知识进行整合,形成一个知识库的过程,在这个过程中,主要需要解决的问题就是实体对齐。不同的知识库,收集知识的侧重点不同,对于同一个实体,有知识库的可能侧重于其本身某个方面的描述,有的知识库可能侧重于描述实体与其它实体的关系,知识融合的目的就是将不同知识库对实体的描述进行整合,从而获得实体的完整描述。 比如,对于历史人物曹操的描述,在百度百科、互动百科、维基百科等不同的知识库中,描述有一些差别,曹操所属时代,百度百科为东汉,互动百科为东汉末年,维基百科为东汉末期;曹操的主要成就,百度百科为“实行屯田制,安抚流民消灭群雄,统一北方,奠定曹魏政权的基础,开创建安文学,提倡薄葬”,互动百科为“统一北方”,维基百科为“统一了东汉帝国核心地区”。由此可以看出,不同的知识库对于同一个实体的描述,还是有一些差异,所属时代的描述差别在于年代的具体程度,主要成就的差别在于成就的范围不同,等等,通过知识融合,可以将不同知识库中的知识进行互补融合,形成全面、准确、完整的实体描述。 知识融合过程中,主要涉及到的工作就是实体对齐,也包括关系对齐,属性对齐,可以通过相似度计算,聚合,聚类等技术来实现。

4 数据模型构建

上一篇文章,我们阐述过知识图谱的构建方法,提到知识图谱的数据整体上可以分为数据模型和具体数据,数据模型就是知识图谱的数据组织框架,不同的知识图谱,会采用不同的数据模型。对于行业知识图谱来说,行业术语、行业数据都相对比较清晰,可以采用自顶向下的方式来建设知识图谱,也就是先确定知识图谱的数据模型,然后,根据数据模型约定的框架,再补充数据,完成知识图谱的建设。 数据模型的构建,一般都会找一个基础的参考模型,这个参考模型,可以参照行业的相关数据标准,整合标准中对数据的要求,慢慢形成一个基础的数据模型,再根据实际收集的数据情况,来完善数据模型。也可以从公共知识图谱数据模型中抽取,将与行业有关的数据模型从公共知识图谱数据模型中提取出来,然后结合行业知识进行完善。

5 知识推理

知识推理,就是根据已有的数据模型和数据,依据推理规则,获取新的知识或者结论,新的知识或结论应该是满足语义的。知识推理,依据描述逻辑系统实现。描述逻辑(Description Logic)是基于对象的知识表示的形式化,也叫概念表示语言或术语逻辑,是一阶谓词逻辑的一个可判定子集。 一个描述逻辑系统由四个基本部分组成: 最基本的元素:概念、关系、个体 TBox术语集:概念术语的公理集合 Abox断言集:个体的断言集合 TBox 和 ABox上的推理机制 描述逻辑涉及到的内容也比较多,此处举几个例子,比如实体的分类包含关系,一个电脑椅是椅子,椅子是家具,可以说,一个电脑椅是家具。常识规则的推理,一个男人的孩子是A,一个女人的孩子是A,可以知道,这个男人和女人是配偶。 通过推理发现新的知识,应用比较多,说明知识图谱的时候也经常不自觉的会应用推理,比如前两年比较受人关注的王宝强离婚案,为什么会聘用张起淮做律师,通过知识图谱可以很清楚知道,王宝强和冯小刚关系比较密切,冯小刚聘用张起淮作为律师顾问,所以王宝强很容易和张起淮建立关系,这也可以看作是知识推理的范畴。当然,更确切地说,应该是规则的范畴。推理更强调的是固有的逻辑,规则一般是和业务相关的自定义逻辑,但推理和规则都是通过逻辑准则,获取新的知识或发现,在这里先不做区分。

6 质量评估

质量评估,就是对最后的结果数据进行评估,将合格的数据放入知识图谱中。质量评估的方法,根据所构建的知识图谱的不同,对数据要求的差异而有所差别。总的目的是要获得合乎要求的知识图谱数据,要求的标准根据具体情况确定。 比如对于公共领域的知识图谱,知识的获取采用了众包的方法,对于同一个知识点,可能会有很多人来完成,如果这个知识点只有一个答案,可以采用的一种策略是,将多人的标注结果进行比较,取投票多的结果作为最终的结果。当然,这是不严谨的,因为真理往往掌握在少数人的手里,特别是针对一些行业的知识图谱,表现尤为突出。行业内的一条知识,可能只有行业专家能够给出权威正确的答案,如果让大众投票来决定,可能会得到一条错误的知识。所以,针对行业知识图谱,可能会采用不同于公共知识图谱的策略,来进行知识的质量评估。 以上零零散散的将知识图谱的构建过程,大体做了一个描述,知识图谱的构建是一个复杂的系统工程,涉及到的知识和技术都很多,肯定会有很多知识或技术没有说到,或者是描述的比较浅显,没有把握住一些构建方法的本质,希望大家补充,我会在后面做项目的过程中,不断细化构建过程,将构建中碰到的具体问题,再进行详细的描述说明。

原文地址:https://www.cnblogs.com/coodream2009/p/10240229.html

时间: 2024-11-10 00:16:42

知识图谱基础知识之三——知识图谱的构建过程的相关文章

知识图谱基础之RDF,RDFS与OWL

https://blog.csdn.net/u011801161/article/details/78833958 https://blog.csdn.net/baidu_15113429/article/details/82144731 RDF:单纯的三元组,没有本体概念,如果构建一个公司的知识图谱,公司的董事和中层以及普通员工都是员工,你在查找员工的时候,就需要把董事以及各个职位的人都查找出来. RDFS:会添加本体,例如员工下面有董事以及中层和普通员工,这样就能直接通过抽象的员工而不用访问

iOS基础——通过案例学知识之LaunchScreen、APPIcon、StatusBar、UIScrollView、UIPageControl

iOS基础--通过案例学知识之LaunchScreen.APPIcon.StatusBar.UIScrollView.UIPageControl 今天要实现的案例效果图 一.LaunchScreen 1.设置程序的LaunchScreen 在项目配置文件中配置启动页,并且在LaunchScreen.storyboard中进行布局 2.设置LaunchScreen时间 //单位:秒 [NSThread sleepForTimeInterval:1.5f]; 二.APPIcon 1.命名规则:iOS

SVG的基础概念等知识,以及SVG与CANVAS的区别

本文主要介绍了SVG的基础概念等知识,以及SVG与CANVAS的区别,最后给出了一个简单示例,方便大家更好的了解SVG可缩放矢量图形.推荐给大家. SVG可缩放矢量图形(Scalable Vector Graphics)是基于可扩展标记语言(XML),用于描述二维矢量图形的一种图形格式.SVG是W3C制定的一种新的二维矢量图形格式,也是规范中的网络矢量图形标准.SVG严格遵从XML语法,并用文本格式的描述性语言来描述图像内容,因此是一种和图像分辨率无关的矢量图形格式. 什么是SVG? SVG 指

iOS基础——通过案例学知识之UITableView(上)

iOS基础--通过案例学知识之UITableView(上) 对于UITableView的知识点特别多,因为它是iOS用得最多控件之一,我会尽我最大努力和语言的组织,将所有知识点介绍到位,今天要实现的效果图 吐槽 与Android对比,可以说跟ListView的实现几乎一样,跟RecyclerView一模一样 Android写起来似乎比iOS复杂一点,因为iOS大部分都被封装好了,这一点iOS做得好 对于iOS的方法的命名只能说又长又臭 知识点包括 UITableView的UITableViewD

如何将别人的知识转化成自己的知识?

不传授具体的知识,只告诉你获得知识的方法.将别人的知识转化成自己的知识,成就你的丰盈人生! 由知识管理中心(Knowledge Management Center)基于最新知识管理理论和实践.认知与学习理论,结合互联网对于信息和知识整合.传播.创造的影响所开发的"KMC高效学习方法网络课程"已经在众多同学学习的基础上.结合多位专家的建议进行了重大升级. [课程名称]KMC 高效学习方法网络课程–互联网思维下的高效学习方法 [课程导师]田志刚 知名知识管理专家.个人知识管理畅销书<

AspectJ基础学习之三HelloWorld(转载)

AspectJ基础学习之三HelloWorld(转载) 一.创建项目 我们将project命名为:aspectjDemo.然后我们新建2个package:com.aspectj.demo.aspect 和 com.aspectj.demo.test 前者用来方apsect.后者用来放测试类.如果你仔细的话,你会发现Aspectj的项目上面有个AJ的标志. 二.创建Aspect 首先我们创建HelloWorld.java.他包含main()方法,但是没有方法体,代码如下: [java] view

bash shell基础特性之三(数组)

bash shell基础特性之三(数组) 一.数组定义 数组指连续的多个独立内存空间,每个内存空间相当于一个变量. bash shell只支持一维数组,但参数个数没有限制. 数组元素:数组名+索引(从0开始编号) 声明数组:declare -a ARRAR_NAME(其实不用声明,按数组方式直接赋值给变量即可,BASH就知道那是数组) 关联数组:declare -A ARRAY_NAME 数组元素的赋值:一次赋值全部元素.指定索引进行赋值.一次只赋值一个元素 (1) array=(var1 va

基础算法之三——递归法

基础算法之三--递归法"汉诺塔问题" 题目描述 古代有一座汉诺塔,塔内有三个座A.B.C,A座上有n个盘子,盘子大小不等,大的在下,小的在上,如图所示.有一个和尚想把这n个盘子从A座移到C座,但每次只能移动一个盘子,并且在移动过程中,3个座上的盘子始终要保持大盘在下,小盘在上.在移动过程中可以利用B座来放盘子.要求输出移动的步骤. 输入数据 汉诺塔内的盘子个数n.(1<n<64) 输出要求 输出移动的步骤,每行一步,如从A座移动到C座,输出"A->C&quo

Android基础入门教程——2.4.7 构建一个可复用的自定义BaseAdapter

Android基础入门教程--2.4.7 构建一个可复用的自定义BaseAdapter 标签(空格分隔): Android基础入门教程 本节引言: 如题,本节给大家带来的是构建一个可复用的自定义BaseAdapter,我们每每涉及到ListView GridView等其他的Adapter控件,都需要自己另外写一个BaseAdapter类,这样显得非常麻烦, 又比如,我们想在一个界面显示两个ListView的话,我们也是需要些两个BaseAdapter- 这,程序员都是喜欢偷懒的哈,这节我们就来写