1 引言
本体是对概念及概念之间的关系的一个明确的形式化的描述。在哲学中,ontology译为客观存在,即一切客观存在的事物。计算机领域将其引入进来,即表示对一切客观存在进行描述,只不过是要求这种描述是显性化的,并且,要求其不但能描述事物本身,还要描述其与其他事物之间的关系。本体最初只在人工智能实验室进行研究,而现在许多领域专家也开始研究和应用本体了,并且取得不错的效果。
特别地,本体的研究和应用在国外发展较快,而在国内的研究则尚处于起步阶段,大多是围绕着本体的概念、建模等展开,真正将其实际应用还很少。今年武汉大学董慧教授的基金项目“基于本体的数字图书馆检索系统”的研制成功,打破了这一局面,使中国也有了自己的语义网成果。然而,本体的应用和能量远不止这些,我们需要对其进行更深入和广泛的研究,使之能够在更多的领域有更广泛、更高级的应用,从而真正为国家建设服务。
本文将主要论述本体的有关概念、本体的构建方法和本体的构建规范,使我们对本体及其构建有一个初步的认识,为其深入的研究和应用打下一个良好的基础。
2 本体的相关概念。
类(class):具有相同特性的事物称之为一个类,如“酒”这个类指所有可以称之为“酒”的事物。由于类通常是对事物进行的一种抽象的结果,又可将类称为概念(concept)。
层次结构(hierarchy):人们在理解和分析复杂事物时,习惯于将复杂事物按照一种层次结构将其进行分解,从而能对事物有更加清晰的认识。对于“类”的组织也是一样,我们也用层次结构来对其进行分解和描述。
属性(property):然而,仅仅有类、层次结构还不能很清晰的描述事物,对于某个类而言,我们往往需要了解其各种特性,比如对于“酒”这个类,我们需要了解其品种、风味、酒精含量等特性,这些术语便是类的属性了。由于类的属性通常是多方面的,我们有时又形象得将其称为槽(slot)。
个体(individual):事物是由许多个体组成的,类也是从个体集合中抽象出来的概念。个体又称为类的 实例(instance).如,我现在正在品尝的一杯行吟阁啤酒便可以看作是酒的一个个体或实例。
下图是一个关于酒的一个简单的本体示例。
2 本体开发的主要内容。
本体是由概念、属性、实例及其之间的关系构成的,创建本体也是围绕这几方面展开的。具体的说,本体开发包括以下几项内容:
(1)定义类
(2)安排类的层次结构
(3)定义槽及描述槽的取值范围
(4)给槽赋值以创建实例
这样,定义好了本体并进行了实例化,二者结合起来便可以构成一个知识库(knowledge base)了。
3 本体开发过程与方法
本体的开发过程和方法有许多思路,并且国外的研究与实践表明,目前为止,尚没有统一和标准的方法,并且对于不同的方法也无法评价到底哪个方法是好是坏。因此,实际开发时,具体该如何开发,需要根据具体应用的要求和开发者本身所具备的知识、技能和思维来定。本节介绍的只是本体开发一般过程和一般的思想,作为初学者的一个参考。
(1)定义本体的领域(domain)和应用范围(range)。这类似于软件开发中的需求分析过程,在开发本体之前,我们需要知道我们描述的是什么,即它覆盖了哪些领域,如“酒”这个领域。同时,还需要了解我们建设的本体是应用在哪些方面,即范围,如酒可以应用在“酿酒厂”、“酒店”等地方。只所以要规定应用的范围,是因为在不同的应用中,对本体的定义有不同的要求,根据具体要求来建设本体。同一般的需求分析一样,我们也要了解本体需要解决哪些问题,列出这些问题,以据此来创建和完善本体。这样的问题又称为能力询问(competency questions)。
(2)考虑是否可以重用现存的本体。世界上有许多组织和机构都在研究和应用本体,并且已经有了一些价值较高的商用和免费的本体库。在实际开发之前,我们可以考虑能否重用这些本体库,这样可以节省成本和缩短开发时间,如DAML Ontology Library,Ontolingua和Wines等。
(3)列举本体中的重要词汇(Terms)。在真正创建本体之前,最好是根据相关要求列出所需要用到的所有词汇,这些词汇是指将来在本体中需要使用的词汇,用其来描述类、属性、实例等。如酒、酒精、生产厂家、主要成分等。
(4)定义类及类的层次结构。定义类是比较简单的,这里关键是如何进行类的层次结构的划分。通常有三种方法,一是自上而下,一种是自下而上,一种是二者的结合的方法。自上而下是首先列出一个通用类,然后一步一步的细化,直至将所需要的问题描述清楚为止。自下而上的方法则是先从具体事物做起,一步一步的网上抽象和概括,最后形成一个通用的顶级类。而这相结合的方法则是从中选取某一个一般的类,然后不断向上抽象和向下细化。如,采用自上而下的方法时,我们可以依次定义:酒——啤酒——清淡啤酒——行吟阁啤酒,自下而上则可以反过来定义:行吟阁啤酒——清淡啤酒——啤酒——酒,二者相结合的方法则是:可以先定义清淡啤酒——啤酒,然后定义清淡啤酒——行吟阁啤酒。
(5)定义槽。定义好了类之后,便需要定义槽了。定义槽的过程主要是定义类的内部和外部属性,内部属性如行吟阁啤酒的主要成分、酒精浓度等,而外部属性如行吟阁的包装纸、标签等。槽必须和相应的类对应。
(6)定义槽的面。槽的面用来描述值的类型(type)、值的范围(allowed values)和值的基数(cardinality)。基数是槽所能允许的值的个数。类型通常有字符串(String)、数值(Number)、枚举(enumerated)、布尔(boolean)、实例(instance)等。值的范围也需要和类相对应,以能够从各个方面来描述类。
(7)创建实例(instance)。创建个体实例是创建知识库的最后一步,这一步要求选择恰当的类,给这个类创建个体,给槽赋值。例如创建行吟阁啤酒的个体,假设其槽包含酒精浓度、生产日期、生产厂家、主要成分四个面,那么可以创建这样一个实例,即给相应的面赋值,如酒精浓度:8,生产日期:2006-12-27,生产厂家:武汉造酒厂,主要成分:水。这样实例就创建完成了。当然,在实际创建实例时,并不是以这样的格式展现出来,而通常是以OWL/RDF格式表示,这里只是提供了一种思路,以便于理解。
到此,本体的基本创建过程已经完毕。但是本体并非一次就能建立好的,它是一个不断反复和循环的过程,需要根据具体应用而不断进行修正。衡量一个知识库的好坏也是需要根据实际应用的使用效果来判断的。
本文只是一个导论,是对本体及本体创建过程的一个简要描述,希望能对初学者有一点小小的帮助,能对本体的创建有一个初步的认识。也因为是导论性质的文章,所以本文忽略了本体创建的许多细节问题,以及实际操作中存在的问题也没有涉及,期望能以最快的速度给读者一个本体开发的轮廓。对于具体的细节问题以及实际开发中碰到的问题,笔者将在后续文章陆续登出,请继续关注。
4 参考文献
[1] Ontology Development 101: A Guide to Creating Your First Ontology, Natalya Fridman Noy and Deborah L. McGuinness. Stanford Knowledge Systems Laboratory Technical Report KSL-01-05 and Stanford Medical Informatics Technical Report SMI-2001-0880, March 2001.
[2]DAML Ontology Library: http://www.daml.org/ontologies/
[3] ontolingua : http://www.ksl.stanford.edu/software/ontolingua/
[4] wines: http://www.wines.com/
[5] Ontology of Data Analysis: http://www.basegroup.ru/tech/ontology.en.htm