【知识图谱】RDF的初步了解

正文之前

本文有很多的参考来源,就不一一列举了。除了少部分自己写的,其他的都是从别的地方拼凑来的。但求不喷,不图啥,就做个笔记。

正文

一、知识图谱的基石:RDF

RDF(Resource Description Framework),即资源描述框架,其本质是一个数据模型(Data Model)。它提供了一个统一的标准,用于描述实体/资源。简单来说,就是表示事物的一种方法和手段。RDF形式上表示为SPO三元组,有时候也称为一条语句(statement),知识图谱中我们也称其为一条知识,如下图。

RDF由节点和边组成,节点表示实体/资源、属性,边则表示了实体和实体之间的关系以及实体和属性的关系。在第一篇文章中(为什么需要知识图谱?什么是知识图谱?——KG的前世今生),我们结合罗纳尔多的例子,介绍了RDF节点和边的类型约束,这里不再赘述。对RDF不熟悉的读者,可以参考第一篇文章,里面有更直观的描述和解释。

RDF序列化方法

RDF的表示形式和类型有了,那我们如何创建RDF数据集,将其序列化(Serialization)呢?换句话说,就是我们怎么存储和传输RDF数据??目前,RDF序列化的方式主要有:RDF/XML,N-Triples,Turtle,RDFa,JSON-LD等几种。

  1. RDF/XML
  • 就是用XML的格式来表示RDF数据

  • XML的技术比较成熟,有许多现成的工具来存储和解析XML

  • 对于RDF来说,XML的格式太冗长,也不便于阅读,通常我们不会使用这种方式来处理RDF数据

  1. N-Triples
  • 用多个三元组来表示RDF数据集,是最直观的表示方法

  • 在文件中,每一行表示一个三元组,方便机器解析和处理

  • 开放领域知识图谱DBpedia通常是用这种格式来发布数据的

  • [图片上传失败...(image-83bedb-1542118496557)]

    image.png
  1. Turtle
  • 应该是使用得最多的一种RDF序列化方式了

  • 比RDF/XML紧凑,且可读性比N-Triples好

  • [图片上传失败...(image-594661-1542118496557)]

    image.png
  1. RDFa
  • The Resource Description Framework in Attributes 是HTML5的一个扩展

  • 在不改变任何显示效果的情况下,让网站构建者能够在页面中标记实体,像人物、地点、时间、评论等等

  • 将RDF数据嵌入到网页中,搜索引擎能够更好的解析非结构化页面,获取一些有用的结构化信息

  • https://rdfa.info/play/

  1. JSON-LD
  • JSON for Linking Data

  • 键值对的方式来存储RDF数据

  • 示例

from [https://json-ld.org/](https://json-ld.org/)
 {

"@context": "[https://json-ld.org/contexts/person.jsonld](https://json-ld.org/contexts/person.jsonld)",
"@id": "[http://dbpedia.org/resource/John_Lennon](http://dbpedia.org/resource/John_Lennon)",
"name": "John Lennon",
"born": "1940-10-09",
"spouse": "[http://dbpedia.org/resource/Cynthia_Lennon](http://dbpedia.org/resource/Cynthia_Lennon)"
}
RDF的表达能力
RDF是对具体事物的描述,缺乏抽象能力,无法对同一个类别的事物进行定义和描述。就以罗纳尔多这个知识图为例,RDF能够表达罗纳尔多和里约热内卢这两个实体具有哪些属性,以及它们之间的关系。但如果我们想定义罗纳尔多是人,里约热内卢是地点,并且人具有哪些属性,地点具有哪些属性,人和地点之间存在哪些关系,这个时候RDF就表示无能为力了。不论是在智能的概念上,还是在现实的应用当中,这种泛化抽象能力都是相当重要的;同时,这也是知识图谱本身十分强调的。RDFS和OWL这两种技术或者说模式语言/本体语言(schema/ontology language)解决了RDF表达能力有限的困境。

二、RDF的“衣服”——RDFS/OWL

之所以说RDFS/OWL是RDF的“衣服”,因为它们都是用来描述RDF数据的。为了不显得这么抽象,我们可以用关系数据库中的概念进行类比。用过Mysql的读者应该知道,其database也被称作schema。这个schema和我们这里提到的schema language十分类似。我们可以认为数据库中的每一张表都是一个类(Class),表中的每一行都是该类的一个实例或者对象(学过java等面向对象的编程语言的读者很容易理解)。表中的每一列就是这个类所包含的属性。如果我们是在数据库中来表示人和地点这两个类别,那么为他们分别建一张表就行了;再用另外一张表来表示人和地点之间的关系。RDFS/OWL本质上是一些预定义词汇(vocabulary)构成的集合,用于对RDF进行类似的类定义及其属性的定义。

Notice: RDFS/OWL序列化方式和RDF没什么不同,其实在表现形式上,它们就是RDF。其常用的方式主要是RDF/XML,Turtle。另外,通常我们用小写开头的单词或词组来表示属性,大写开头的表示类。数据属性(data property,实体和literal字面量的关系)通常由名词组成,而对象数据(object property,实体和实体之间的关系)通常由动词(has,is之类的)加名词组成。剩下的部分符合驼峰命名法。为了将它们表示得更清楚,避免读者混淆,之后我们都会默认这种命名方式。读者实践过程中命名方式没有强制要求,但最好保持一致。

轻量级的模式语言——RDFS

RDFS,即“Resource Description Framework Schema”,是最基础的模式语言。还是以罗纳尔多知识图为例,我们在概念、抽象层面对RDF数据进行定义。下面的RDFS定义了人和地点这两个类,及每个类包含的属性。

@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> .

@prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .

@prefix : <http://www.kg.com/ontology/> .

### 这里我们用词汇rdfs:Class定义了“人”和“地点”这两个类。

@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> .

@prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .

@prefix : <http://www.kg.com/ontology/> .

### 这里我们用词汇rdfs:Class定义了“人”和“地点”这两个类。

:Person rdf:type rdfs:Class.

:Place rdf:type rdfs:Class.

### rdfs当中不区分数据属性和对象属性,词汇rdf:Property定义了属性,即RDF的“边”。

:chineseName rdf:type rdf:Property;

        rdfs:domain :Person;

        rdfs:range xsd:string .

:career rdf:type rdf:Property;

        rdfs:domain :Person;

        rdfs:range xsd:string .

:fullName rdf:type rdf:Property;

        rdfs:domain :Person;

        rdfs:range xsd:string .

:birthDate rdf:type rdf:Property;

        rdfs:domain :Person;

        rdfs:range xsd:date .

:height rdf:type rdf:Property;

        rdfs:domain :Person;

        rdfs:range xsd:int .

:weight rdf:type rdf:Property;

        rdfs:domain :Person;

        rdfs:range xsd:int .

:nationality rdf:type rdf:Property;

        rdfs:domain :Person;

        rdfs:range xsd:string .

:hasBirthPlace rdf:type rdf:Property;

        rdfs:domain :Person;

        rdfs:range :Place .

:address rdf:type rdf:Property;

        rdfs:domain :Place;

        rdfs:range xsd:string .

:coordinate rdf:type rdf:Property;

        rdfs:domain :Place;

        rdfs:range xsd:string .

我们这里只介绍RDFS几个比较重要,常用的词汇:

  • 1. rdfs:Class. 用于定义类。

  • 2. rdfs:domain. 用于表示该属性属于哪个类别。

  • 3. rdfs:range. 用于描述该属性的取值类型。

  • 4. rdfs:subClassOf. 用于描述该类的父类。比如,我们可以定义一个运动员类,声明该类是人的子类。

  • 5. rdfs:subProperty. 用于描述该属性的父属性。比如,我们可以定义一个名称属性,声明中文名称和全名是名称的子类。

其实rdf:Property和rdf:type也是RDFS的词汇,因为RDFS本质上就是RDF词汇的一个扩展。我们在这里不罗列进去,是不希望读者混淆。RDFS其他的词汇及其用法请参考W3C官方文档。

为了让读者更直观地理解RDF和RDFS/OWL在知识图谱中所代表的层面,我们用下面的图来表示例子中的数据层和模式层。

Data层是我们用RDF对罗纳尔多知识图的具体描述,Vocabulary是我们自己定义的一些词汇(类别,属性),RDF(S)则是预定义词汇。从下到上是一个具体到抽象的过程。图中我们用红色圆角矩形表示类,绿色字体表示rdf:type,rdfs:domain,rdfs:range三种预定义词汇,虚线表示rdf:type这种所属关系。另外,为了减少图中连线的交叉,我们只保留了career这一个属性的rdf:type所属关系,省略了其他属性的此关系。

我的理解:

  1. rdf:type 即说明出发点是目的地的一种。也就代表了 是...的类型的关系

  2. rdf:domain 说明出发点是目的地的一种属性。也就代表了 是....的一种属性的意思

  3. rdf:range 说明该属性的取值类型。 也就代表了 是...的值的关系

RDFS的扩展——OWL

上面我们提到,RDFS本质上是RDF词汇的一个扩展。后来人们发现RDFS的表达能力还是相当有限,因此提出了OWL。我们也可以把OWL当做是RDFS的一个扩展,其添加了额外的预定义词汇。

OWL,即“Web Ontology Language”,语义网技术栈的核心之一。OWL有两个主要的功能:

  • 提供快速、灵活的数据建模能力。

  • 高效的自动推理。

我们先谈如何利用OWL进行数据建模。用OWL对罗纳尔多知识图进行语义层的描述:

@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> .

@prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .

@prefix : <http://www.kg.com/ontology/> .

@prefix owl: <http://www.w3.org/2002/07/owl#> .

### 这里我们用词汇owl:Class定义了“人”和“地点”这两个类。

:Person rdf:type owl:Class.

:Place rdf:type owl:Class.

### owl区分数据属性和对象属性(对象属性表示实体和实体之间的关系)。词汇owl:DatatypeProperty定义了数据属性,owl:ObjectProperty定义了对象属性。

:chineseName rdf:type owl:DatatypeProperty;

        rdfs:domain :Person;

        rdfs:range xsd:string .

:career rdf:type owl:DatatypeProperty;

        rdfs:domain :Person;

        rdfs:range xsd:string .

:fullName rdf:type owl:DatatypeProperty;

        rdfs:domain :Person;

        rdfs:range xsd:string .

:birthDate rdf:type owl:DatatypeProperty;

        rdfs:domain :Person;

        rdfs:range xsd:date .

:height rdf:type owl:DatatypeProperty;

        rdfs:domain :Person;

        rdfs:range xsd:int .

:weight rdf:type owl:DatatypeProperty;

        rdfs:domain :Person;

        rdfs:range xsd:int .

:nationality rdf:type owl:DatatypeProperty;

        rdfs:domain :Person;

        rdfs:range xsd:string .

:hasBirthPlace rdf:type owl:ObjectProperty;

        rdfs:domain :Person;

        rdfs:range :Place .

:address rdf:type owl:DatatypeProperty;

        rdfs:domain :Place;

        rdfs:range xsd:string .

:coordinate rdf:type owl:DatatypeProperty;

        rdfs:domain :Place;

        rdfs:range xsd:string .

schema层的描述语言换为OWL后,层次图表示为:

数据属性用青色表示,对象属性由蓝色表示。

罗纳尔多这个例子不能展现OWL丰富的表达能力,我们这里简单介绍一下常用的词汇:

描述属性特征的词汇

  1. owl:TransitiveProperty. 表示该属性具有传递性质。例如,我们定义“位于”是具有传递性的属性,若A位于B,B位于C,那么A肯定位于C。

  2. owl:SymmetricProperty. 表示该属性具有对称性。例如,我们定义“认识”是具有对称性的属性,若A认识B,那么B肯定认识A。

  3. owl:FunctionalProperty. 表示该属性取值的唯一性。 例如,我们定义“母亲”是具有唯一性的属性,若A的母亲是B,在其他地方我们得知A的母亲是C,那么B和C指的是同一个人。

  4. owl:inverseOf. 定义某个属性的相反关系。例如,定义“父母”的相反关系是“子女”,若A是B的父母,那么B肯定是A的子女。

本体映射词汇(Ontology Mapping)

  1. owl:equivalentClass. 表示某个类和另一个类是相同的。

  2. owl:equivalentProperty. 表示某个属性和另一个属性是相同的。

  3. owl:sameAs. 表示两个实体是同一个实体。

本体映射主要用在融合多个独立的Ontology(Schema)。举个例子,张三自己构建了一个本体结构,其中定义了Person这样一个类来表示人;李四则在自己构建的本体中定义Human这个类来表示人。当我们融合这两个本体的时候,就可以用到OWL的本体映射词汇。回想我们在第二篇文章中提到的Linked Open Data,如果没有OWL,我们将无法融合这些知识图谱。

http://www.zhangsan.com/ontology/Person rdf:type owl:Class .

http://www.lisi.com/ontology/Human rdf:type owl:Class .

http://www.zhangsan.com/ontology/Person owl:equivalentClass http://www.lisi.com/ontology/Human .

更多的OWL词汇和特性请参考W3C官网文档。

接下来我们谈一下OWL在推理方面的能力。知识图谱的推理主要分为两类:基于本体的推理和基于规则的推理。

我们这里谈的是基于本体的推理。读者应该发现,上面所介绍的属性特征词汇其实就创造了对RDF数据进行推理的前提。此时,我们加入支持OWL推理的推理机(reasoner),就能够执行基于本体的推理了。RDFS同样支持推理,由于缺乏丰富的表达能力,推理能力也不强。举个例子,我们用RDFS定义人和动物两个类,另外,定义人是动物的一个子类。此时推理机能够推断出一个实体若是人,那么它也是动物。OWL当然支持这种基本的推理,除此之外,凭借其强大的表达能力,我们能进行更有实际意义的推理。想象一个场景,我们有一个庞大数据库存储人物的亲属关系。里面很多关系都是单向的,比如,其只保存了A的父亲(母亲)是B,但B的子女字段里面没有A,如下表。

如果在只有单个关系,数据量不多的情况下,我们尚能人工的去补全这种关系。如果在关系种类上百,人物上亿的情况下,我们如何处理?当进行关系修改,添加,删除等操作的时候,该怎么处理?这种场景想想就会让人崩溃。如果我们用inversOf来表示hasParent和hasChild互为逆关系,上面的数据可以表示为:

绿色的关系表示是我们RDF数据中真实存在的,红色的关系是推理得到的。通过这个例子,相信读者应该初步了解了OWL的推理功能和能力。

目前,OWL的最新版本是OWL 2,在兼容OWL的基础上添加了新的功能,有兴趣的读者可以查阅W3C文档。另外,OWL 2包含了三个标准,或者三种配置(Profile),它们是OWL 2完整标准(OWL 2/Full)的一个子集。读者目前不用考虑它们之间的差别,只有当我们要用到OWL自动推理功能的时候才需要考虑到底使用哪一种配置。且在大多数情况下,我们需要知道哪种配置才是最合适的。下面简单说说它们使用的场景:

  • OWL 2/EL 使用场景:本体结构中有大量相互链接的类和属性,设计者想用自动推理机得到里面复杂的关系。

  • OWL 2/QL 使用场景:有大量的实例数据。OWL 2 QL本体可以被改写为SQL查询,适用于使用OBDA(ontology based data access)的方式来访问关系数据库。也就是说我们不用显式地把关系数据库中的数据转为RDF,而是通过映射的方式,将数据库转为虚拟RDF图进行访问。

  • OWL 2/RL 使用场景:需要结合基于规则的推理引擎(rule-based reasoning engine)的场合。

正文之后

OK~ 重出江湖了~ 明儿个就是我第一次正式的组会报告了。。紧张胜过其他。。。。ppt改了又改。。。希望快点变油

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 158,736评论 4 362
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,167评论 1 291
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 108,442评论 0 243
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,902评论 0 204
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,302评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,573评论 1 216
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,847评论 2 312
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,562评论 0 197
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,260评论 1 241
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,531评论 2 245
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,021评论 1 258
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,367评论 2 253
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,016评论 3 235
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,068评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,827评论 0 194
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,610评论 2 274
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,514评论 2 269

推荐阅读更多精彩内容

  • 1 知识图谱构建技术 本节首先给出知识图谱的技术地图,然后介绍知识图谱构建的关键技术,包括关系抽取技术、知识融合技...
    达微阅读 33,256评论 2 32
  • 本体、知识库、知识图谱、知识图谱识别之间的关系? 本体:领域术语集合。 知识库:知识集合。 知识图谱:图状具有关联...
    方弟阅读 28,066评论 6 49
  • 一、关于本体 1. 本体论语义学的特点: 本体论语义学与其他人工智能理论、自然语言加工系统相比有自己的一些鲜明特点...
    御风之星阅读 3,793评论 0 1
  • 降低坏习惯的重要性。昨天下午开家长会的时候,有个妈妈说他特别排斥孩子看动画片,偶尔孩子看到一次就觉得孩子像瘾发作一...
    嗨新新新阅读 139评论 0 0
  • 作者在具体说啦科学业的状况并且提出了几项改进意见,甚至被国王融洽的接纳啦
    傲剑_a693阅读 248评论 0 0