前言:由于项目要求,本人需要趁着这个暑假学习知识图谱相关内容。之前在CSDN上也看见有本学院的学长大放异彩,私以为在这上面记录自己的学习历程是利大于弊的。本人才疏学浅,文章仅记录个人学习之后的一些想法与理解,主要是想以通俗易懂的方式讲明白一些复杂的概念与方法,因此专业性有所欠缺;同时我也希望寻找到志同道合的朋友共同学习进步。若能受到各路大佬斧正,本人将不胜感激。
目录
语义网(Semantic Web)和链接数据(Linked Data)
什么是知识图谱?
引例
知识图谱其实是由Google于2012年提出并发布。他们将知识图谱用于自己的搜索引擎上并极大地提高了用户体验。比如:
这是直接在Google搜索栏中键入“姚明”二字时侧边栏返回的结果。那么这样一系列关联的信息能够以极快的速度被检索出来,除了不断迭代的搜索算法之外,知识图谱也功不可没。
发展历程
语义网络(Semantic Network)
知识图谱的起点----语义网络,其实就是用相互连接的节点和边来表示知识。其中,节点表示对象、概念,边表示节点之间的关系。概念说起来很抽象,其实就是下面这个样子:
它的优点十分明显:
- 易于理解和展示
- 其中的相关概念易聚类
与此同时,它也有着不那么明显但致命的缺陷:
- 其节点和边无固定标准。这样就会导致数据融合困难。
- 无法区分概念节点以及对象节点。
- 无法对节点以及边标签进行定义。
这样的三个缺点可能很难理解,我们来解析一下。
第一个缺陷,如果两种语义网络对于边和节点的定义套用了不同的标准,那么在我们尝试对它们进行融合时,很显然会出现许多问题。作为一种需要长期维护并不断拓展的信息表示方式,这对于语义网本身来说显然是致命的。好在为了解决它,人们在知识图谱中使用了RDF来统一了标准(关于RDF更详细的介绍在后文)。比如对于最简单的"is-a"关系,RDF使用"rdf:type"来定义。
我们再来看看第二第三个缺陷到底想要表达什么问题。假设我们有两个语义网络A和B:
在A中,有一条知识:“ATRI是galgame”(对象)
在B中,有另一条知识:“ATRI是galgame的下一级/子类”(概念)
这就是概念节点和对象节点的区别。你可能觉得这两者没什么差别,但如果把这两条知识放在同一个语义网络中是不可能的,因为ATRI不可能同时是galgame又是galgame的下一级。而正因为语义网络无法对这样有区别的两个节点进行定义,才会导致它无法区分概念节点以及对象节点。而在知识图谱中,人们会使用RDFS/OWL标准来解决这样的冲突(关于RDFS/OWL的详细介绍在下篇,此处先粗浅地提及并运用一下):
###二选一,声明“ATRI是一个类”###
ARTI rdf:type rdfs:Class
ARTI rdf:type owl:Class
###声明“ATRI是galgame”###
ATRI rdf:type galgame
###声明“ATRI是galgame的子类”###
ARTI rdf:type rdfs:Class
ARTI rdfs:subClassOf galgame
语义网(Semantic Web)和链接数据(Linked Data)
语义网的概念相较于语义网络更加宽泛。语义网更加官方化、学术化,它结合了万维网的概念,本质上表示的是由W3C制定的用于描述并关联万维网数据的一系列技术标准。这说起来同样十分抽象,让我们举一个例子:
我们知道:keromakura.net中包含了atri-mdm.com这个URL。这个事实对我们人来说显而易见,因为我们只需要打开keromakura.net就可以在首页点击进入atri-mdm.com,二者的包含关系十分明显。但在当时的计算机眼中,它只是依照排布和程序在执行程序,它不知道这样的两个URL有这样的所属关系。如果我们使用语义网,就能令计算机明晰这种所属关系。在“语义网”这个单词中,Semantic注重的是关系以及背后的含义属性等,而Web则表示着它们所构成的庞大网络。
链接数据则用于定义怎样利用语义网在网上发布数据,它强调如何在不同的数据集(你可以看作一个一个知识图谱或语义网络)之间创建链接。
知识图谱的定义
此处引用"Exploiting Linked Data and Knowledge Graphs in Large Organisations"中的定义:A knowledge graph consists of a set of interconnected typed entities and their attributes.
即,知识图谱是由一些相互连接的实体以及它们的关系组成的。
而知识图谱中的一条条知识,各自又都可以用一个SPO(Subject-Predicate-Object)三元组表示,如下:
这样的一条条知识不断链接,构筑起的网络状知识结构,就是我们所说的知识图谱,如果还觉得理解困难,可以看一看语义网的图,将其中的“是”换成其他的关系并加入“类”去尝试理解。
知识图谱如何表示知识
RDF
资源描述框架(Resource Description Framework)是由W3C制定的一种标准。在知识图谱中,我们使用RDF来表示SPO三元组。
RDF有三种类型:
- IRIS(International Resource Identifiers).可以视作URL及其推广,用于在网络中唯一定义一个实体或资源。
- literal.即字面量,可以视作带有数据类型的纯文本。
- blank nodes.不具备IRIS以及literal的资源。
而SPO三元组对于每个部分也有其限制。
- Subject只能是IRIS/blank nodes
- Predicate一定是IRIS
- Object没有限制,可以是任意一种RDF
说了这么多,我们以一个实例来说明RDF是如何表示一个SPO三元组的。例如对于以下的知识:
ATRI是由日本公司FrontWing开发的一款galgame
我们如果使用RDF来表示“ATRI”和“FrontWing”的关系,就会是如下的结果:
其中:
- "www.kg.com/game/atri"作为一个IRIS,定义了"ATRI"这个实体
- kg:Company是用IRIS定义的用于表示“开发公司”的属性(关系),kg其实是一个prefix,一般会在知识图谱开头表示为:
所以:@prefix kg:<http://www.kg.com/ontology>
即kg:Company实际上也是一个IRISkg:Company = http://www.kg.com/ontology/company
因此,如果我们要完整地表示这条知识:
ATRI是由日本公司FrontWing开发的一款galgame
就会得到如下的图:
至此,知识图谱的基本概念以及其对知识的基本表示方式已经讲解完毕。
参考:
知识图谱技术综述-https://ir.sdu.edu.cn/~zhuminchen/KG/xuzenglin2016.pdf
预告
我们已经学会了知识图谱是什么,以及它基本的表示方式。那么,对于更加复杂的情况,我们又该引入什么样的特殊机制来表示它呢?知识图谱又是怎样储存和结构化的呢?知识图谱进行推理的基本原理又是什么呢?下一节将为大家一一解答这些问题。