三个零件:盒子、标签位、填写规则
人工智能文献里,本体的定义有一大堆,而且很多定义之间互相矛盾。这本书不去趟这浑水,直接给了一个“够用就行”的工作定义:
就本书而言,本体是对某个论述领域(domain of discourse)中概念的形式化显式描述,包括:
- 类(class,有时也叫 concept,概念)——概念本身;
- 属性(slot,也叫 property;有时也叫 role 角色)——描述概念各种特征和属性的属性位;
- 属性的约束(facet,有时也叫 role restriction,角色约束)——对属性的取值限制。
本体 + 一组类的实例 = 知识库。
原文补了一句很实在的话:现实里,“本体在哪里结束、知识库从哪里开始”这条线其实很模糊。
类 + 属性 + 约束。定义好「有哪些盒子、盒子带哪些标签位」。
往盒子里放具体的东西,把标签位都填上值。
类描述领域中的概念。 大多数本体都是围绕类展开的。举个例子:有一个类叫 Wine(葡萄酒),它代表所有的酒。具体的某瓶酒,是这个类的一个实例(instance)。你读这段文字时,手边杯子里那杯波尔多,就是 Bordeaux(波尔多酒)这个类的一个实例。
类可以有子类(subclass),子类代表比父类更具体的概念。比如把“所有的酒”分成红葡萄酒、白葡萄酒、桃红葡萄酒;换个分法,也可以分成起泡酒和非起泡酒。
属性描述类和实例的属性。原文的例子很具体:Château Lafite Rothschild Pauillac(拉菲古堡波亚克)这款酒,酒体饱满(full body),由 Château Lafite Rothschild 酒庄生产。这里就出现了两个属性:
| 属性 | 值 |
|---|---|
body(酒体) | full(饱满) |
maker(生产者) | Château Lafite Rothschild 酒庄 |
在类层面,我们可以说:Wine 类的实例会有一些属性,描述它们的 flavor(风味)、body(酒体)、sugar(糖分)、maker(生产者)等等。
〔译注〕原文脚注 1 说明了本书的书写约定:类名首字母大写,属性名首字母小写;所有来自示例本体的术语,用打字机字体(等宽字体)排版。本中文版沿用这个约定。
同一个类里的所有实例,以及它子类里的所有实例,共享同一套属性的定义。Wine 类及其子类 Pauillac 的所有实例,都有一个 maker 属性,这个属性的取值为 Winery(酒庄)类的实例。反过来,Winery 类的所有实例,都有一个 produces(生产)属性,指向这家酒庄生产的所有酒——也就是 Wine 类及其所有子类的实例。
原文把“开发一个本体”拆成四个动作:
做完这四步,就得到了一个知识库:定义好各个类的具体实例,填上具体的属性值信息,以及附加的属性约束。
有哪些盒子?Wine、Winery、Grape……
谁是谁的「一种」?红酒是酒的一种。
盒子带哪些标签位?每个标签位能填什么?
放东西进盒子,填满标签位。
做完四件事,一个知识库就诞生了