本文是一篇最新的知识图谱综述论文 Knowledge Graphs[1] 的阅读笔记。由于篇幅较长,故拆分为多个部分推送。
1 引言
虽然知识图谱这个词至少从 1972 年就开始出现在文献中了,但是它的现代形式出自 2012 年发布的 Google Knowledge Graph。在此之后,很多知名企业都相继公开了关于知识图谱的研究成果。随着这一概念在工业界的日益普及,学术界也开始参与其中,越来越多的关于知识图谱的科研文献被出版发行。
知识图谱发展的核心思想是使用图来表示数据,并通过某种方式显示地表示知识来增强这种思想。知识图谱最常见的应用场景是面向大规模不同数据源的集成、管理和值抽取。在这些场景下,与关系模型或 NoSQL 模型相比,使用基于图的知识抽象有很多好处。图为各种领域提供了简洁而直观的抽象,其中边捕获了各种数据(如社会数据、生物数据、文献数据、交通数据等)中内在实体之间的关系。与关系模型相比,图允许维护者推迟提供模式(schema),可以使数据(及其范围)以更灵活的方式发展,适用于获取不完整的知识。与 NoSQL 模型相比,定制化的图查询语言不仅支持标准的关系运算符(连接、联合、投影等),还支持导航运算符,能够递归查找通过任意长度连接的实体。
对于标记和描述图中节点和边的术语,标准的知识表达形式(例如本体和规则)可以用于定义和推理这些术语的语义。而可扩展的图分析框架可用于计算中心性、集群、摘要等,以进一步了解所描述的领域。此外,各种各样支持将机器学习技术直接用于图的表示形式(如知识图谱嵌入、图神经网络等)也被开发出来。
总的来说,知识图谱的构建和应用为从不同数据源集成和提取数据带来了可能。然而,目前还没有文章提供关于知识图谱的通用总结,描述如何使用知识图谱,具体使用了哪些技术,以及与现有的数据管理主题的关联性。本文旨在对知识图谱进行这样全面的总结,具体的内容这里不做赘述,请参考下面的章节名称。本文的目标受众包括刚刚入门知识图谱的新手,并不假设读者拥有知识图谱的相关背景知识,可以放心阅读。
在正式开始之前,原文还对知识图谱的定义、多样性和实践进行了简单的讨论。关于知识图谱的定义,存在着很多争论,这里作者给出了一个比较普适的定义:
知识图谱是一种用于收集和表达真实世界知识的数据图,图的节点表示相关实体,图的边表示实体之间的关系。
定义中的数据图指的是基于图结构的数据模型,将在第二节中详述;而知识则可以理解为一些已知的事情,这些知识可以从外部来源收集,也可以从知识图谱本身中提取。知识可以由简单的声明组成,如:圣地亚哥是智利的首都,也可以由量化的声明组成,如:所有的首都都是城市。简单声明可以作为数据图的边,而量化声明则需要通过表达性更强的方式来体现,比如本体和规则。此外,我们还可以通过演绎方法(Deductive methods)来继承和收集进一步的知识,比如基于上面两条知识可以演绎得出:圣地亚哥是一座城市。我们也可以使用归纳方法(Inductive methods)来从简单或量化语句中发现新的知识。
知识图谱通常通过多个知识来源组建而成,因此在结构和粒度上可能非常多样化。为了解决这种多样性,关于模式(schema)、身份(identity)和上下文(context)的表示起到了关键作用。模式定义了知识图谱的顶层结构,身份则定义了图中(或外部源中)哪些节点指向相同的现实世界实体,而上下文则表示某些知识成立的特定条件(设置)。
在实践中,知识图谱的目标是作为组织或社区内不断发展的共享知识基础。这里将实际的知识图谱分为两类:开放知识图谱和企业知识图谱。开放知识图谱是在网上公布的,可以直接获取其内容。开放知识图谱可以是涵盖多个领域的,如 DBpedia、Freebase 等,也可以是面向特定领域的。而企业知识图谱则是公司内部的,应用于商业案例,包括搜索、推荐、广告等(原文中给出了相当多的引用,感兴趣的可以自行查看)。
为了方便理解,下面的章节中使用了一个与智利旅游业相关的知识图谱作为说明案例(因为作者是智利的)。该知识图谱由智利旅游局构建,主要描述了智利的旅游景点、文化活动、服务、商业、城市以及旅游路线等内容。
为了方便查找,以下各章节的主要内容为:
- 第二节描述了图数据模型以及用于查询数据图的语言
- 第三节描述了知识图谱中模式、身份和上下文的表示
- 第四节描述了用于表示和继承知识的演绎方法
- 第五节描述了用于提取新知识的归纳技巧
- 第六节描述了基于外部来源的知识图谱的创建和丰富
- 第七节描述了知识图谱的质量评价方法
- 第八节描述了各种知识图谱精炼的方法
- 第九节描述了公开知识图谱的原则和协议
- 第十节描述了一些著名的知识图谱及其应用
- 第十一节进行了总结并给出了未来的研究方向
2 数据图
任何知识图谱的基础都是首先将数据通过图进行抽象,从而得到一个初始的数据图。本章将先介绍在实践中表示数据图的图结构化数据模型,再介绍用于查询数据图的图查询语言。
2.1 模型
首先,让我们通过旅游知识图谱的案例直观地了解什么是图模型以及其好处。假设旅游局还没有决定如何对相关的数据如景点、活动、服务等进行建模,他们首先试探性地使用了表结构(关系型数据库)来表示所需的数据,以活动(event)为例,其初始表结构设计如下:
Event(name, venue, type, start, end)
其中 name 和 start 是这张表的主键。在基于这张表组织数据的过程中,旅游局发现了一些严重的问题:某些活动可能有多个名字(如不同语言);某些活动可能有多个地点;对于未来的活动其开始和结束时间尚不清楚等。随着数据多样性的增加,旅游局只能不断地迭代其关系模式的设计,直到得到:
EventName(id, name), EventStart(id, start), EventEnd(id, end), EventVenue(id, venue), EventType(id, type)
基于上述模式,现在我们可以建模包含 0-n 个名称、地点和类型以及 0-1 个开始和结束日期的活动了。
通过上述案例可以看出,对于来源多且变化大的数据,使用关系型数据库建模可能需要承担多次迭代的高额成本。而旅游局最终得出的关系模式可以相当灵活地集成不完整且多样的数据,并且不对关系模式中的多样性(一对一、一对多等)做过多假设。实际上,这种模式可以被看做一种图建模,其构建了实体间二元关系的集合。通过使用这种建模方式,旅游局可以放弃考虑更明确的关系模式,能够对任意实体对的任意二元关系进行定义。
下面将介绍实践中常用的三种图数据模型。
2.1.1 有向标记图
有向标记图(directed edge-labelled graphs)定义为节点以及节点之间有向标记边的集合。在知识图谱中,节点用于表示实体,而边则用于表示实体间的(二元)关系。下图给出了旅游局如何将相关活动数据建模为一个有向标记图的示例:
图中包括了活动的名称、类型、开始和结束时间、地点等数据,注意一般来说完整的边标签应该包括动词,例如 has venue
和 is valid from
。而在本文中为了表达简洁,对边的标签进行了简写,省略了 has
和 is
,例如 venue
和 valid from
。向这种图中添加信息一般包括添加新的节点以及新的边,而表示不完整的信息则需要省略一些特定的边。
以这种方式建模的数据相比于标准的关系模型,在集成新的数据上要更加灵活,我们不再需要定义好明确的关系模式并且在每一步都遵循它。虽然诸如树这样的结构化数据模型也可以提供类似的灵活性,但是图并不需要将数据按照层级结构组织,同时图还允许循环的表示和查询。
一种基于有向标记图的标准化数据模型是资源描述框架(RDF),其受到 W3C 的推荐。RDF 模型定义了不同类型的节点,包括国际化资源标识符(IRIs)、字面量(literals)和空白节点(blank nodes)。国际化资源标识符表示网络上实体的国际化标识符,字面量则表示字符串或其他数据类型值(比如整数、日期等),空白节点也称匿名节点,用来表示没有分配标识符的实体。例如图中的 EID15
和 EID16
,除了创造内部标识符,我们也可以选择使用空白节点来表示它们。第三节中将更加详细地讨论这些节点。
2.1.2 图数据集
虽然我们可以将多个有向标记图连接在一起,但实际上同时管理多个图要更加有价值,例如我们可以对特定来源的数据进行更新,也可以区分不同来源的可信度,即构建一个图数据集(graph dataset)。图数据集通常由一系列的命名图(named graphs)和一个默认图(default graph)组成,每个命名图都包含一个 graph ID 和一张图,默认图则是没有 ID 的一张图,当 ID 未指定时作为默认的引用。
下图给出了一个关于活动和路线的图数据集:
其中活动数据和路线数据分别被存储在一张命名图中,而默认图则管理命名图的元数据。可以看到图的名称也可以被当作图中的节点,而且节点与边可以在不同的图中共用,不同图中的相同节点指向同一实体。一个关于图数据集的经典案例即管理和查询键连数据(Linked Data),其由网络上的 RDF 形式的相关联文档组成,将在第三节中进行详细介绍。
2.1.3 属性图
属性图(property graphs)可以为建模更复杂的关系提供额外的灵活性。假定我们需要对上面的例子加入航班的相关信息,包括航空公司,起始经纬度等,帮助旅游局更好地了解城市之间的可行路线。当使用有向标记图时,我们无法直接在原图中对诸如 Santiago
—flight→ Arica
的边进行标注来表明航空公司,只能通过添加节点的方式定义航班,将其与起始地点,公司等关联,如下图所示:
这种方式会对原图进行巨大的改变。我们也可以考虑将航班信息添加到不同的命名图中去,但是同样需要进行很多调整。相比之下,属性图则可以更加灵活地处理这种需求。属性图允许为节点和边关联一个标签(label)和一系列的属性-值对(property-value),关于属性图的详细定义请参考附录 B。下图给出了表示相同数据的属性图:
我们使用了属性-值对来对公司进行建模,关系的类型则通过标签 flight
表示。此外,对于每个节点通过节点标签表明其类型,并通过属性-值对表明其经纬度。属性图被应用在一些经典的图数据库中,例如 Neo4j。属性图可以在没有信息丢失的情况下和有向标记图或图数据集相互转化。对比来看,有向标记图可以提供更加轻量化的模型,而属性图则可以通过更加灵活的模型。实际应用中还需要综合考虑其他情况来选择最合适的模型。
2.1.4 其他图数据模型
除了上述三种图数据模型外,还存在一些其他的图数据模型,如复杂节点、嵌套图等。本文的观点认为一个知识图谱可以适应基于节点和边的任意类型的图数据模型,通常数据可以在这些模型之中进行转换。近年来,实践中最常用的图模型就是有向标记图、图数据集以及属性图。下面的章节将重点讨论有向标记图(由于其简洁性),不过大部分讨论内容可以自然地扩展到其他模型。
2.2 查询
目前,研究者们已经提出了多种用于进行图查询的语言,包括用于 RDF 图的 SPARQL 查询语言,用于查询属性图的 Cypher、Gremlin 和 G-CORE。这些语言都包含一些共同的特征,例如图模式、关系操作符、路径表达式等。下面将对图查询语言中的核心特征进行介绍。
2.2.1 图模式
基础图模式(graph patterns)是所有结构化图查询语言的核心,其根据待查询的数据图来构造,将其中的部分项替换为变量。图模式中的项可以分为常量与变量两种,变量通过问号前缀来进行区分。图模式的评估(执行)方法为:根据待查询的数据图将图模式中的变量映射为常量。
下图给出了一个图模式的查询案例,其查询的是上一节中的有向标记图模型。可以看到在映射后的变量表中,有部分的变量被映射为原数据图中同一项,这种映射方式取决于具体的应用需求。为了应对需求的变化,研究者们提出了一系列的语义规则(semantics)来对映射进行约束,其中最重要的是基于同态(homomorphism)的语义和基于同构(isomorphism)的语义。基于同态的语义允许多个变量映射至同一项,如案例中所示;而基于同构的语义只允许变量映射至特定的项,即案例中的前两行映射。在实际应用中,不同的查询语言往往采用不同的语义来评估图模式,例如 SPARQL 语言采用同态语义,而 Cypher 对于边则采用同构语义。
图模式可以应用于各类图模型,只需要根据模型中具体的项来设置常量和变量即可。对于有向标记图来说,其项包括节点和边标签;而对于属性图来说,其项包括 id、标签、属性和属性值。
2.2.2 复杂图模式
通过对基础图模式添加关系代数,我们可以进行更加复杂的查询,即得到复杂图模式(complex graph patterns)。关系代数主要由一元操作符(接收单个输入)和二元操作符(接收两个输入)构成,其中一元操作符主要包括:
- 投影(projection)
:输出列的子集
- 选择(selection)
:输出满足条件的行的子集
- 重命名(renaming)
:将列重命名
二元操作符主要包括:
- 联合(union)
:将两张输入表的行合并
- 差分(difference)
:将第一张表中出现在第二张表的行去除
- 联合(join)
:基于联合条件将一张表的行扩展到另一张表
其中选择和联合的常用条件包括相等、不等、逻辑非、逻辑或等。基于上述操作符,我们还可以定义更多的操作,如并集、反联合、左联合等,这里不作赘述。
基于上述关系代数,我们可以图模式表示为一种新的形式。以上一节中的图模式为例,通过三元关系
表示一张图,即包含三列
(主谓宾)的一张表
。那么案例中的查询可以表示为如下的关系代数的形式:
上式通过自然联合操作,基于共同名称的主语列
进行联合,再基于选择条件进行筛选,最后通过投影操作输出查询结果。注意,并不是所有关系代数表示的查询都可以被表达为基础图模式,例如在基础图模式中不能选择投影的变量(只能投影所有)。
诸如 SPARQL、Cypher 等多种图查询语言都支持基于图模式的结果应用关系代数,以构成复杂图模式。下图给出了一个复杂图模式的案例,其通过投影操作选择特定的变量输出为最终结果。这种基于投影的图模式可以被视作图的连接查询(conjunctive queries)。
下图给出了另一种复杂图模型的案例,其目的是找出不在 Santiago 举办的食物节或饮料节。这种基于基础图模式使用关系操作符进行的查询可以被视作图的一阶查询(first-order queries)。
此外,复杂图模式可能会产生重复的结果(如在连接查询中,由于其最终只投影部分变量,所以可能投影的变量存在重复)。针对这种情况,查询语言提供了两种语义:
- 包语义(bag semantics):允许映射多样性带来的重复
- 集合语义(set semantics):移除结果中的重复部分
2.2.3 导航图模式
一个区分不同图查询语言的关键特征就是其在查询中使用路径表达式(path expressions)的能力。路径表达式
即一种正则表达式,允许在两个节点之间匹配任意长度的路径。我们可以将其表示为正则路径查询
,其中
和
是变量或常量。基础的路径表达式中
是一个常量(边的标签),基于基础表达式,还可以延伸出如下路径表达式:
:表示路径方向反转
:表示匹配 0 个或更多
:匹配
或
:匹配
和
我们可以使用不同的语义来解析正则路径查询。一种方式是将其匹配为路径,如下图所示。注意由于存在循环,所以可能匹配出无限条路径,这时我们可以通过额外的语义解析约束,如只返回最短路径,或没有重复节点或边的路径(如 Cypher)。另一种方式则是返回由匹配路径连接的节点对的有限集合(如 SPARQL)。
正则路径查询可以被用于图模式以构建导航图模式(navigational graph patterns),如下图所示。该图展示了一个用于搜索在可通过巴士或飞机前往 Arica 的城市举办的食物节的查询。此外,我们还可以将关系操作符应用于导航图模式,形成复杂导航图模式。
2.2.4 其他特征
除了上述特征外,特定的图查询语言往往还支持一些其他的特性,如聚合(GROUP BY
、COUNT
等)、复杂过滤器、数据类型操作符、基于网络的远程联合查询、更新图的语言、语义继承支持等。关于图查询语言的更详细介绍可以参考这篇 Survey[2]。
参考资料
[1]
Knowledge Graphs: https://arxiv.org/abs/2003.02320
[2]
Foundations of Modern Query Languages for Graph Databases: https://doi.org/10.1145/3104031
- To Be Continued -