知识图谱
知识图谱有了一个初步的印象,其本质是为了表示知识。
它背后的思想可以追溯到上个世纪五六十年代所提出的一种知识表示形式——语义网络(Semantic Network)。语义网络由相互连接的节点和边组成,节点表示概念或者对象,边表示他们之间的关系。
知识图谱则更偏重于描述实体之间的关联。
知识图谱是由一些相互连接的实体和他们的属性构成的。换句话说,知识图谱是由一条条知识组成,每条知识表示为一个SPO三元组(Subject-Predicate-Object)。
在知识图谱中,我们用RDF形式化地表示这种三元关系。RDF(Resource Description Framework),即资源描述框架,是W3C制定的,用于描述实体/资源的标准数据模型。RDF图中一共有三种类型,International Resource Identifiers(IRIs),blank nodes 和 literals。下面是SPO每个部分的类型约束:
- Subject可以是IRI或blank node。
- Predicate是IRI。
- Object三种类型都可以。
IRI可以看做资源定位符,类似于ID。literal我们可以把它看做是带有数据类型的纯文本。blank node简单来说就是没有IRI和literal的资源,或者说匿名资源。
所以下面的三元组就有了对应的表示形式
罗纳尔多的中文名是罗纳尔多·路易斯·纳扎里奥·达·利马
"www.kg.com/person/1"是一个IRI,用来唯一的表示“罗纳尔多”这个实体。"kg:chineseName"也是一个IRI,用来表示“中文名”这样一个属性。罗纳尔多·路易斯·纳扎里奥·达·利马是文本信息(literal)
对于罗纳尔多的整体信息而言
则可以表示为下面的三元组。
我们其实可以认为知识图谱就包含两种节点类型,资源和字面量。借用数据结构中树的概念,字面量类似叶子节点,出度为0。
后续我会根据语义网技术栈(Semantic Web Stack,如下图)来介绍知识图谱实现过程中所需要的具体技术。另外,可能会结合实践,介绍如何利用关系型数据库中的数据来构建一个知识图谱,并搭建一个简易的基于知识图谱的问答系统(KBQA)。
语义网络(Semantic Network)
语义网络是由Quillian于上世纪60年代提出的知识表达模式,其用相互连接的节点和边来表示知识。节点表示对象、概念,边表示节点之间的关系。
语义网络的优点:
-
容易理解和展示。
-
相关概念容易聚类。
语义网络的缺点:
-
节点和边的值没有标准,完全是由用户自己定义。
-
多源数据融合比较困难,因为没有标准。
-
无法区分概念节点和对象节点。
-
无法对节点和边的标签(label,我理解是schema层,后面会介绍)进行定义。
由于缺少标准,其比较难应用于实践。
RDF的提出解决了语义网络的缺点1和缺点2,在节点和边的取值上做了约束,制定了统一标准,为多源数据的融合提供了便利。另外,RDF对is-a关系进行了定义,即,rdf:type(是rdf标准中的一个词汇,之后的文章会介绍)。因此,不管在哪个语义网络中,表达is-a关系,我们都用rdf:type,在语法上形成了统一。比如上图中猫、熊与哺乳动物的关系就可以形式化的表达为:
猫 rdf:type 哺乳动物
熊 rdf:type 哺乳动物
但还有个问题,如何区分概念和对象?即定义Class和Object(也称作Instance, Entity)。举个例子,假如我们有两个语义网络A和B。在A中,熊是哺乳动物的一个实例。在B中,熊是哺乳动物的一个子类。前者是is-a关系,后者是subClassOf关系。这种情况常有发生,我们建模的角度不同,那么同一个事物的表示也可能不同。如果我们不能用一种方法来区别两者,不仅会给我们带来理解上的困难,在进行融合的时候也会造成数据冲突。我们不能说A既是B的一个实例,又是B的一个子类。W3C制定的另外两个标准RDFS/OWL解决了这个问题,如下图。
在语义网技术栈中,RDFS和OWL是RDF更上一层的技术,主要是为了解决语义网络的缺点3和缺点4,其提供了schema层的描述.通过RDFS或者OWL中的预定义词汇,我们可以形式化地声明一个类
哺乳动物 rdf:type rdfs:Class
哺乳动物 rdf:type owl:Class
通过RDFS也可以声明一个子类:
熊 rdf:type rdfs:Class
熊 rdfs:subClassOf 哺乳动物
或者声明一个实例
熊 rdf:type 哺乳动物
我们也可以把rdf:type用a代替,即:
熊 a 哺乳动物
RDF,RDFS/OWL属于语义网技术栈,它们的提出,使得语义网克服了语义网络的缺点。
语义网(Semantic Web)和链接数据(Linked Data)
语义网和链接数据是万维网之父Tim Berners Lee分别在1998年和2006提出的。相对于语义网络,语义网和链接数据倾向于描述万维网中资源、数据之间的关系。它们都是指W3C制定的用于描述和关联万维网数据的一系列技术标准,即,语义网技术栈。
语义网是一个更官方的名称,语义网正是为了使得网络上的数据变得机器可读而提出的一个通用框架。“Semantic”就是用更丰富的方式来表达数据背后的含义,让机器能够理解数据。“Web”则是希望这些数据相互链接,组成一个庞大的信息网络。
链接数据起初是用于定义如何利用语义网技术在网上发布数据,其强调在不同的数据集间创建链接。当它指语义网技术时,它更强调“Web”,弱化了“Semantic”的部分。对应到语义网技术栈,它倾向于使用RDF和SPARQL(RDF查询语言)技术,对于Schema层的技术,RDFS或者OWL,则很少使用。知识图谱是对链接数据这个概念的进一步包装。
知识图谱形式化定义
知识图谱是由本体(Ontology)作为Schema层,和RDF数据模型兼容的结构化数据集。Tom Gruber把本体定义为“概念和关系的形式化描述”,分别指实体的类层次和关系层次。
罗纳尔多是一个人,里约热内卢是一个地点,我们用RDF来表示就是:
www.kg.com/person/1 rdf:type kg:Person.
www.kg.com/place/10086 rdf:type kg:Place.
关系我们也称为属性(Property),根据是实体和实体之间的关系还是实体和数据值之间的关系分为对象属性(Object Property)和数据属性(Data Property)。
罗纳尔多和里约热内卢的关系(本例中是对象属性)与罗纳尔多和全名的关系(本例中是数据属性)用RDF就可以表示为:
www.kg.com/person/1 kg:hasBirthPlace www.kg.com/place/10086
www.kg.com/person/1 kg:fullName “Ronaldo Luís Nazário de Lima”^^xsd:string
这里kg:Person,kg:Place,kg:hasBirthPlace,kg:fullName是我们在Ontology中定义好的类和关系。
链接数据和知识图谱最大的区别在于:
-
正如上面Open Linked Data Project所展示的,每一个圆圈代表一个独立存在和维护的知识图谱;链接数据更强调不同RDF数据集(知识图谱)的相互链接。
-
知识图谱不一定要链接到外部的知识图谱(和企业内部数据通常也不会公开一个道理),更强调有一个本体层来定义实体的类型和实体之间的关系。另外,知识图谱数据质量要求比较高且容易访问,能够提供面向终端用户的信息服务(查询、问答等等)。