知识图谱

知识库构建(二):本体与Protege OWL

一、什么是本体?

对于知识库的构建来说,最先要明白的一个概念就是本体。那么什么是本体呢?

本体(Ontology),它最初是一个哲学范畴,后来随着人工智能的发展,被人工智能界赋予了新的定义。而在Web飞速发展的今天,本体的发展已由哲学、人工智能领域延伸到了图书馆学、情报学等其他各个领域,并受到专家和学者的关注。

本体在哲学领域的定义是对世界上客观存在事物的系统的描述,即存在论,也就是最形而上的知识。形而上学不是指孤立、静止之类的意思,而是指超越具体形态的抽象意思,是关于物质世界最普遍的、最一般的、最不具体的规律的学问。比如什么是物质,物质世界的图景、物质与意识的关系,等等。

但这个定义太高大上了,让我们来举一个简单的栗子:

通常,我们理解“一只羊本身”的时候,可能想到的是:羊有两只坚硬的角、四个蹄子、白色的或者黑色的、皮毛是柔软的光滑的、有一种羊膻味、能够发出咩咩的叫声等等。其实这种理解并不是哲学上所说的本体。在哲学上,我们所看到的、听到的和感觉到的一切都只是一种现象,颜色不是羊本身的东西,它是光线带给我们的一种视觉效果,同样,气味、声音也不是,我们所说的坚硬、光滑等等,也都只是我们的一种感觉,是我们比较的结果……。也就是说,被我们叫做羊的那个东西是存在的,但是我们对它的一切认识却都只是现象,那个被我们叫做羊的东西本身是不可认识的,这个不可认识的东西就是哲学上所说的本体。

读到这是不是有一种熟悉感?

说完了哲学上的概念,我们再来聊聊本体在人工智能领域的定义,这里选取一个我自认为说的比较简单的定义:本体就是用详细的描述方法定义出来的概念或者概念体系。

首先我们要理解机器认识这个世界与人认识这个世界是不一样的。人倾向于从整体上高度概括和抽象地认识事物。比如羊,人倾向于用“一种哺乳动物”来定义羊这个概念。但机器却只能识别特征,而无法描述“哺乳动物”这种抽象概念,再根据这些特征组合起来判断一个事物。这很好理解,如果采用“一种哺乳动物”的定义,当我们把“兔子”和“羊”都输入到机器中时,就会把电脑搞糊涂。因此,机器对于羊的定义只能继续细化具体,“长着一只头、两只角、四只蹄子、一身毛,吃草、喝水、会叫唤……”。

到了这里,我们大致就可以讲明白在人工智能领域中本体是个什么东西了。人工智能领域中的本体就是利用一些具体的属性特征以及属性间、属性与概念之间的关系描述抽象复杂的概念。

二、Protege

了解了什么是本体,那我们如何在计算机中构建本体呢?

这就需要用到本体语言OWL了。OWL是W3C推出的O本体语言。它有丰富的操作符,如and,or和negation。它基于的逻辑允许它能够定义概念或描述概念。复杂的概念能建立在简单的概念定义之上。而且,这个逻辑模型允许使用推理机检查本体中的statement和定义是否具有一致性,也能识别哪个概念符合哪个定义。推理机有助于维护层次结构。这在处理有多个父类的类时非常有用。

我们通过以下几个方面来了解OWL:

  • OWL 是“语义网远景”的组成部分,其目标是:
    • Web 信息拥有确切的含义
    • Web 信息可被计算机理解并处理
    • 计算机可从 Web 上整合信息
  • OWL 被设计为供计算机来处理信息
    OWL 被设计为提供一种通用的处理 Web 信息的内容的方法(而不是把它显示出来)。
    OWL 被设计为由计算机应用程序来读取(而不是被人类)。

  • OWL 与 RDF 不同:OWL 与 RDF 有很多相似之处,但是较之 RDF, OWL是一门具有更强机器解释能力的更强大的语言,拥有更大的词汇表以及更强大的语言。

那么我们需要怎么创建、编辑owl文件来描述概念和属性呢?这就用到了下面要讲到的Protege。

三、Protege

Protégé软件是斯坦福大学医学院生物信息研究中心基于Java语言开发的本体编辑和知识获取软件,或者说是本体开发工具,也是基于知识的编辑器,属于开放源代码软件。这个软件主要用于语义网中本体的构建,是语义网中本体构建的核心开发工具。

Protege的使用主要参见教程:实践篇(一):数据准备和本体建模 - SimmerChan的文章 - 知乎

这里主要讲两个我踩到的坑:

  • 在定义类的属性的时候不需要创建id这种唯一标识实体的属性,这字段是在构建数据库的时候加上去的。

  • 保存文件时请务必保存成Turtle Syntax格式,不然后续对接Jena时会出问题。