1. 为什么要开发本体
本体 是指领域概念体系(包括领域术语定义和术语间关系)的形式化规范定义 (Gruber 1993)。 近年来,本体开发的工作逐步从人工智能专家的专属领域转移到领域专家的手中。本体在万维网上颇为常见,例如雅虎 (yahoo.com) 的网站分类体系和亚马逊 (Amazon.com) 的产品分类与描述体系。万维网联盟(W3C)开发的RDF语言,也就是资源描述框架(Brickley and Guha 1999),支持开发者把网页中的知识表示为机器可解析的格式,从而可以被智能机器人理解并处理。美国国防高级研究计划署(DARPA)与W3C一起,通过扩展 RDF 来开发 DARPA 智能机器人标记语言DAML(DARPA Agent Markup Lanuguage). 该语言之后被升级为W3C的万维网本体语言 (OWL, Web Ontology Language)以此形成更有针对性的知识表示构架来促进智能机器人在互联网上的交互(Hendler andMcGuinness 2000)。
现在,有许多学科开发了标准化本体来支持领域专家分享和注释领域信息。医学领域出现了大量标准化、结构化的词汇集,例如SNOMED(Price and Spackman 2000)和UMLS(Humphreys and Lindberg 1993)。同时也出现了众多通用本体。例如,联合国开发计划署和美国邓白氏公司(Dun&Bradstreet)共同制定了为产品和服务提供术语的 UNSPSC 本体(www.unspsc.org)。
为了帮助研究人员在领域中共享信息,本体定义了常用词汇集,包括机器可理解的领域基本概念及其关系的定义。
那为什么要开发一个本体呢?大致有如下原因:
达成信息结构的共识
复用领域知识
领域规则的显性表示
区别领域知识与操作知识
分析领域知识
达成信息结构的共识 是本体开发的常见目标(Musen 1992; Gruber 1993)。例如,当几个不同的网站都包含医疗信息或提供医疗电子商务服务时,如果它们使用相同的底层本体,智能机器人就可以从这些网站中提取并融合信息,进而使用聚合的结果来回答用户的查询或作为其他应用程序服务。
复用领域知识 是本体研究近来激增的动力之一。例如,许多不同领域的模型需要用到时间概念,包括时间区间、时间点、时间的相关度量等。如果有一组研究人员详细研究并定义了这样一个时间本体,那么就可以被其他人直接复用。如果需要构建一个大规模的本体,我们既可以综合若干相关领域的现有本体,也可以从通用本体出发有针对性地扩展领域本体。
领域规则的显性 表示便于专家有效应对领域知识的变化。领域知识不但包括事实,也包括规则,例如,“鹦鹉是鸟”为事实,“鸟会飞“为规则,那么领域规则的应用就可以推导出”鹦鹉会飞“。如果我们只是简单地把领域规则用编程的方式表示出来,不但全程依赖程序员支持维护,而且这样的表示亦不利于专家理解与更新。而领域规则的显性化表示也便于新用户透彻理解领域术语的完整意义。
区别领域知识与操作知识 是本体的另一个常见用途。正如数据本身和数据处理流程可以分离,领域应用中不但需要领域知识,同时可以描述如何配置与处理这些领域知识。例如,我们可以定义一个通用的知识图谱问答系统,不但可以使用音乐知识图谱作为数据源,亦可以使用影视知识图谱为数据源。
分析领域知识 可以利用描述性形式语言。通过对领域知识的形式化表示,可以有效支持本体的复用和扩展(McGuinness等人,2000)。
仅仅开发一个本体是不够的,我们应该通过本体定义数据结构并支持程序应用,例如推理系统、领域无关的应用程序、以及智能机器人等均可以利用本体和基于本体的知识库作为输入数据。本文开发了一个本体覆盖如下概念:葡萄酒、食物、以及葡萄酒与餐点的合理搭配。这个本体可以用于开发餐馆管理应用程序:一个应用程序可以依据当天的菜单帮助侍者向食客推荐对应的葡萄酒;另一个应用程序可以分析一个酒窖的库存列表,针对新出品的食谱,建议采购哪一类葡萄酒以及具体哪一款葡萄酒。
关于本指南
本文采用Protege-2000(Protege 2000),Ontolingua (Ontolingua 1997),Chimaera(Chimaera 2000)作为本体编辑环境。本指南使用Protege-2000展示本体实例。
本指南中使用的葡萄酒和食品示例源自CLASSIC(CLASSIC是一个基于描述逻辑的的知识表示系统)的论文(Brachman 等人,1991)以及短教程(McGuinness等人,1994)。 Protege-2000和其他基于框架的系统(frame-based systems) 显式地描例子中提到的本体,显式地说明了分类树体系以及实体所属的具体分类。
本指南中的部分本体设计思想源自于面向对象设计的文献(Rumbaugh 等人,1991; Booch等人,1997),但是本体开发与面向对象编程中都提到“类”和“关系”两个概念,但是它们的设计有所不同:面向对象的编程主要围绕类的方法,也就是说程序员根据类的操作层面的属性进行设计;而本体设计师根据类的数据结构层面的属性进行设计。
本指南不是为了解决本体开发人员可能需要处理的所有问题,而是试图提供一些起步性的指导意见,帮助一个新的本体设计师开发新的本体。关于领域建模中的更为复杂数据结构与设计原则,本文点到为止并给出了一些参考资料。
本体设计本身的方法论并无定规,本文的思路主要来源于作者在本体开发中积累的经验。在本指南的结尾也列举了一些替代方法的参考文献。
Last updated
Was this helpful?