7.5.2 CommonKADS的知识建模过程
1.知识模型概述
一个知识模型包括三部分,每一部分包含一组相关的知识结构。我们将每一部分称为知识范畴。
第一个范畴称为领域知识。这个范畴详细说明特定领域知识和在一个应用中所讨论的信息类型。例如,一个涉及医疗诊断应用的领域知识将会包括相关疾病、症状和检验以及这些类型之间关系的定义。一个领域知识的描述在某种程度上类似于软件工程中的“数据模型”或“对象模型”。
知识模型的第二个范畴包含推理知识。推理知识描述了使用领域知识的基本推理步骤。最好是将这些推理看作推理机的构件。在软件工程术语中,推理表示功能分解的最低水平。在医疗诊断应用中有两个推理的例子:一是将症状和某种可能疾病相联系的“假设”推理,一是用于确定某种特定疾病确实是引起所看到的症状的因素的试验的“检验”推理。
知识模型的第三个范畴是任务知识。任务知识描述一个应用所要达到的目标是什么以及如何将任务分解成子任务和推理来实现这些目标。这个“如何”包含了任务的动态行为描述,即它们的内在控制。例如,一个简单的医疗诊断应用可将DIAGNOSIS(诊断)作为其最高层任务,并且认为这个诊断可以通过一连串重复执行的“假设”和“检验”推理来实现。任务知识类似于软件工程中功能分解的较高水平,但还包括对相关功能的控制。
2.知识建模的过程
知识建模可以被看作是一种特殊形式的需求规范说明。知识模型的构件可以分解为知识识别、知识规范说明和知识净化三个主要阶段。这三个阶段之间也可以相互交叉,其中每个阶段都执行特定的活动,每个活动都需要若干种技术。知识建模需要特定的工具与指导方针,通用的软件工程原则也可以在知识建模中应用。知识建模本身是一个构造型问题求解的过程,所以不存在唯一的正确的解决方案,也不存在最优的方法,任何建模方法学所能做到的,只是提供一些在实际应用中已经被证明有效的指导方针。
知识建模过程被分为几个阶段(stage),每个阶段描述一组有序的必须执行的活动(activity)。每一个活动都可以获得一种或者多种技术的帮助,并且可以得到一些准则的支持。
知识模型的创建分为三个阶段:知识识别、知识规范说明和知识精化。
(1)知识识别
知识识别就是识别出对知识建模有用的信息源。对于实际的知识模型规范说明来说,这是一个准备阶段,在这个阶段需要建立领域的术语表或者词典表,同时对已有的模型组件(例如任务模板和领域模式)进行研究,可使模型组件得到重用。一般来讲,在组织模型中对知识项的描述以及对任务模型中应用任务的特征描述是知识识别的起始点。如果组织模型和任务模型描述完整而且准确,那么识别阶段将能够很快完成。
知识识别的目的是考察知识项,并且将这些知识项应用到知识模型规范说明中,知识识别需要执行两个活动:
①熟悉领域。对任务的信息源进行搜索与结构化,并将它们列于知识项目表中,为领域创建词典表和术语表。因为信息源的本质决定了知识建模所需要的方法类型。如果信息源各不相同,没有单一信息源起决定性作用,那么知识建模将需要较长的时间,有时即使是相同类型的信息源也会经常发生相互冲突。对领域知识中的关键信息进行文本标记以及与领域专家进行面谈都可以促进对领域的了解,其目的主要是在全局范围内对领域有一个较好的理解。对于知之甚少的领域,因为它们存在潜在风险,所以需要对它们进行更加详细的考察。知识工程师要了解相应领域,但要避免成为该领域的专家,所以必须在二者之间找到平衡点。例如,对于某种特定设备诊断,可能需要较多的背景知识,所以存在考察过程过长的危险,这是一个在所有知识工程项目中都会碰到的传统问题。我们经常碰到这种问题,一个人不可避免地(也是他所不愿意的)成为某个领域中的一个“外行专家”,要克服这种现象可以参考一下几条指导方针:
●与某一领域里能与专家交谈的人交谈,而不是与专家交谈;
●如果没有必要,尽量避免沉迷于细节和复杂的理论;
●构建一些能够在全局范围内领会的典型场景。
通过以上方法,可以建立领域知识源的列表,包括简短的特征描述;所选关键文本的总结;所构建场景的描述。另外对隐性知识的了解,即个人对领域的理解,也很重要。
②列出潜在的模型组件。此活动的目的是充分重用在其他模型中已创建好并已经使用的模型组件,因为重用是提高模型质量的一个重要手段。一般从任务角度和领域角度来研究模型组件的重用:
●任务角度:创建任务类型的特征。一般来讲,任务类型已经被暂时地分配到任务模型中,所以,这里的目标是检验使用前一步骤得到的领域知识是否仍然有效。基于选择好的任务类型,可以开始创建适合相应任务的一系列任务模板。
●领域角度:建立领域的模型,并且寻找此领域或者相似领域的标准描述,找到特定领域的领域词汇。这些描述可以有许多种形式,例如有关艺术品的艺术与建筑词汇、医学术语中的医学主标题、本体论库、参考模型、产品模型库。
(2)知识规范说明
在第二个阶段,知识工程师构建知识模型的规范说明。首先,利用在上一个阶段中找到的可重用的模型组件选择一个任务模板,构建初始的领域模型。然后,知识工程师们将在知识模型中“填空”。就领域知识而言,本阶段将重点放在领域知识而不是知识库。实际上,不需写出属于特定知识库的全部知识实例集。这个工作可以在下一阶段进行。
①选择任务模板:建议使用已有的模板进行知识建模,这种方法既能提高效率又能保证模型的质量,这取决于所应用的任务模板的质量和该模板与应用任务的匹配程度。下面几点有助于选择特定的模板:
●选择那些多次用到过的模板;
●如果认为已经找到了一个合适的任务模板,那么建立一个“带注解”的推理结构;
●如果没有现成的模板能满足具体的应用任务,那么找到此任务中的知识密集型特征;
●坏的模板要好于没有模板。
②构建初始领域模式:活动的主要目标是构建一个与所要解决的应用问题无关的,或者与所选择的任务方法无关的初始领域数据模型。这个活动的主要目的是描述特定领域概念化的初始版本。通常一个知识密集型应用的领域模式至少包含两个部分:
●特定领域的概念化,这是直接从领域中识别出来的领域结构,它可以在任何应用中表示出来而与它的应用方式无关;
●特定方法概念化,这可以帮助我们以特定的方法解决特定的问题。
③完善知识模型规范:有两种方法可用来完成知识模型的规范说明:一种方式开始于推理知识,然后移动到相关的领域知识与任务知识;另一种方式开始于领域知识或者任务知识,然后将它们通过推理连接起来。具体选择哪种方法取决于所选的任务模板(如果存在模板)的质量和详细程度。
(3)知识精化
在最后一个阶段,尽可能地验证知识模型,通过插入一组知识实例来完成知识库(例如,插入规则类型的实例)。验证前面一个阶段得到的初始规范说明的一个重要技术是对在知识识别阶段收集的场景进行仿真,这种仿真既可以是在纸上进行的,也可以是构建一个小的专门原型系统。仿真的结果能指示这个知识模型是否能够产生问题求解行为。只有当验证出积极的评价时,才有必要花费精力完善知识库。
在知识精化的过程中要执行两项活动:验证知识模型,完善知识库。一般只有当前一项活动至少取得部分成功之后才会开始执行后一项活动。
①验证知识模型:检验一个模型是否掌握了问题求解行为的主要方法是仿真这种行为。仿真可以用两种方法进行:一是纸上仿真,这种方法和有组织的预排很相似。事先定义一组能够反映需要的系统行为的典型场景,利用知识模型产生对于场景的纸面跟踪。这可以利用一个有三列的表进行描述,最左一列以应用领域的术语描述场景中的步骤,中间一列表明各个步骤如何映射到知识模型元素中,最右一列用作解释与评价。二是通过仿真系统构建一个小的原型系统进行仿真。仿真环境必须能够加载知识模型规范说明和一段与特定实现相关的代码,这样可以在很短的一段时间内完成仿真,一般是数小时或者数天。仿真的结果会指示出这个知识模型是否能够产生预期的问题求解行为。
②完善知识库:通常在开发阶段不可能定义出一个完全的、正确的知识库。除了系统由于在真实应用测试之前,知识库的定义过程很难全部完成这一点以外,知识实例随着时间的推移也会发生变化。例如,医药领域有关对抗生素的抗药性的知识一直在发生变化。多数情况下,这种问题是通过在系统中引入用于更新知识库的编辑功能来解决的。另外还需要在知识库的整个生命周期之中不断对它进行维护。
这三个阶段之间可以相互交叉。有些时候需要反馈环路。例如,验证将导致对知识模型规范说明的修改。同样,完善知识库将需要寻找更多的信息源。通用的规则是:如果对于应用问题有比较好的理解,并且在以前的项目中类似的问题已经得到了很好的解决,那么就不太需要反馈[17]。
CommonKADS模型套件的基本思想是为应用程序开发提供一个完整而正确的视图。知识不是静态的,而是随着时间不断变化的,因此,为了保证知识模型是最新的并且相互之间没有矛盾,可以在系统开发过程中同时设计知识模型。
知识建模建立的主要结果是生成实际的知识模型。最小规范的说明应该包含以下部分:
●一个完整的领域模式的图。
●一个推理结构图。
●一个拥有它们的领域映射的知识角色(静态的和动态的)列表。
●有关任务和任务方法的文本规范说明。知识模型文档化的文档列表如表7-1。
表7-1知识模型文档化的文档列表
3.知识建模的实现环境
KADS建模的实现环境可以选用Prolog和AionDS两个实现环境中的任一个或者是其他的实现环境。Prolog和AionDS的应用程序都具有以下共同特点:
●面向对象。应用程序的所有功能,包括:用户接口、数据访问、应用过程和知识的表示,全由对象来提供。
●基于知识。应用程序使用基于规则的知识来解决日常事务问题,且规则和规则操作的数据被定义成对象的一部分。
●基于组件。组件是软件模块,它可以通过预先定义好的接口与其他组件通信。组件可以用一个库或者一组库来表示。
(1)Prolog实现环境
Prolog是programming in logic的缩写,意思就是使用逻辑的语言编写程序,它是由法国的学者柯尔·迈伦和他的助手提出的一种高效率的逻辑语言。Prolog本身就是一个演绎推理机,具有表处理功能,能通过合一、置换、消解、回溯和匹配等机制来求解问题。Prolog语言是人工智能与专家系统领域最著名的逻辑程序设计语言。
Prolog实现的软件结构由三层组成,即两个结构层和一个应用层,如图7-6所示。
图7-6 Prolog实现的软件结构
①第一层(实现平台):在Prolog上实现一个面向对象的概念,并应MVC体系结构的要求提供潜在的视图-更新工具。
②第二层(结构工具层):包括对通用CommonKADS对象的类、属性和操作的定义。实现从KADS对象到MVC结构的映射。
③第三层(应用实现层):实际应用的实现层,它建立了CommonKADS内核的通用对象的特殊化。它实现了实际应用中的“模块”、“视图”和“控制器”等对象。
(2)AionDS实现环境
AionDS集成了面向对象和基于规则的方法,主要用于业务实践的环境。与Prolog相比,AionDS实现环境多了一个任务模板层。任务模板层提供的模板可以作为某类任务的通用实现模型,且对每个特定的任务,需要对它进行实例化[18]。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。