标签:项目开发 软件设计师 编程语言 匹配 根据 报告 dmi 通信 put
说明:本文是Knowledge-based systems with thecommonKADS method文章的翻译。
一、知识库系统的背景
1. 什么是知识库系统(KBS)
知识库系统是人工智能的一个分支,可以真正地应用于现今的系统开发领域。他们通常内嵌于其他的应用中,来执行特定知识的任务。
知识库系统是AI科学家长期研究的成果。从上个世纪70年代开始,科学家们开始理解计算机程序解决问题的关键不在于规整的表达式或者推理逻辑的模式,而是在于这些问题本身拥有的知识。拥有丰富知识和经验的人类专家可以高效地解决不同种类的问题----即使他们对这些问题的描述并不是十分明确----只要是这些问题处于专家的研究领域。因此,知识库系统是一组计算机程序,用来仿真(在某些情况下甚至超越)人类专家解决问题的能力。当然,知识库系统的目标并不是用机器来代替人类的思考,而是发挥出计算机强大的计算能力。为了打造一个知识库系统,工程师们需要接受来自专家的大量的建议。在一些领域,这些专家都是基于规则进行建议的,尽管他们自身并没有意识到这一点。
知识库系统在不基于直觉或者常识而获得有效的结果方面是非常强大的。
知识库系统的发展过程经历了两代:在第一代系统中,工程师们局限于根据专家定义的规则进行编码实现,这种形式并不是十分有效的,因为项目难以维护并且修改代价十分巨大。除此之外,知识获取的过程严重依赖专家的输出;在第二代系统中,Allen Newel提出了‘知识等级’的概念,知识不依赖于具体的实现,而是根据不同种类的知识等级进行结构化表示:
l 知识等级:Agent,Knowledge,Goal,Actions
l 表示等级:Computer,Symbols,Instructions
l 逻辑等级:Digital System,Bits,Logic and Arithmetic Operations
l 链路等级:Electronic System, Current
Newel提出了使用模型的必要性,这样,我们把‘知识获取’定义成一个过程,在这个过程中,工程师们先创建‘知识模型’,随后把它们编码成计算机可运行的形式。
现在通常使用第二代知识库系统。
2. 编程语言
知识库系统通常基于Prolog,Lisp,C++和CLIPS语言来实现,其中CLIPS是本文介绍的重点。Lisp是一种函数式编程语言,一直以来都应用于AI领域并且取得了不错的效果。与此相对,Prolog是一种声明式语言,与面向过程的编程语言通过实现一个算法来解决问题的模式不同,它通过推理引擎来论证事实和关系。过程式语言面向‘How’,声明式语言面向‘What’。另外,C++是一种非常高效并且高度优化的编程语言,但是它缺少推理引擎,需要从零开始实现。
3. 应用领域
4. 知识库系统的结构
5. 目前的趋势
知识库系统的开发并没有统一的标准,尽管如此,ESPRIT项目提供了一套方法论来开发知识库系统,简称CADS(Knowledge Acquisition Design System)。在KADS中,构造知识库系统基本上就是一种基于模型的活动,其中一个最重要的特性就是构造一个与具体实现无关的、完备的知识模型。KADS是面向结果的方法论,产品中每个开发活动产生的结果是整个项目控制和方向的唯一检验标准。
二、CommonKADS方法论
1. 历史简介
CommonKADS是KBS工程中领先的方法论,已经被许多公司和高校基于欧洲ESPRIT项目集进行开发和测试过。现在是知识库系统开发的事实标准,并且被欧洲、美国和日本的很多公司所采纳、使用。CommonKADS同时也提供方法来进行知识任务和进程的详细分析,下图展示了知识库系统方法论的演进过程:
CommonKADS起源于KADS-I项目----一个拥有悠久历史和众多技术人员参与的项目----尽管这套方法论缺少形式标准。从1990年冬季开始,一个新的方法论具有商业可行性并且覆盖了KBS整个生命周期,它就是CommonKADS。
2. 模型套件
模型套件在知识工程中提供任务分解,来减少复杂性。当考虑构造一个模型的时候,其他方面可以延后考虑。CommonKADS涉及的模型如下图所示:
在这些模型中,本篇文章将重点关注Knowledge Model,其结构如下图所示。
² Domain knowledge:描述了关于应用领域的实体和内容,和其他知识类型的使用无关。
² Inference knowledge:处理不同类型的推理(在任务解决过程中被专家使用的论据)。一个推荐由输入和输出定义----也就是它们的领域角色。推理不允许进一步的分解。
² Task knowledge:指明了任务的目标以及解决方法。
² Problem solving methods:描述了任务解决方法,确定递归分解的子任务以及它们的执行顺序。
² Strategic knowledge:说明了任务执行计划,为了设计更加灵活的系统而加以考量。
3. 角色
和其他的软件项目一样,需要人员来组织、管理和开发知识库系统。在KBS的开发中,一共存在6种相关的角色,如下图所示。
三、使用CommonKADS开发KBS
为了理解以上说明的内容,我们开发了一个用来展示专家系统特性的小型的图书辅助应用。此应用的基本想法是根据读者的年龄、受教育程度和兴趣来推荐一本特定的图书。此应用不是真正可应用的系统,但是加以修改可以展示最基本的功能。因此,它可以应用在图书馆或者书店中,来推荐读者应该读什么类型的书籍。
1. 领域知识
描述了一个领域中的内容以及内容之间的关系,内容可以表示成知识领域中的中心实体,我们通过名字来识别内容,包括抽象的实体和具体的实体对象。它很像C++或者Java中的Class的概念。这些内容被表示成他们的属性或者特性,通过类型和名字来识别;属性是知识领域内容的原子表示。领域知识由下面三种元素组成:
1) 类图
我们使用UML语言来定义内容和属性,也可以使用其他AI建模语言,如KIF,Ontolingua等。
完成建模之后,使用CML(CommonKADS Conceptual Modeling Language)语言进行编写代码。
Concept Person;
ATTRIBUTES:
Name: String;
Age: Int;
Stage: String;
Interests: String;
Education: String;
END CONCEPT Person;
CONCEPT Reading-type;
ATTRIBUTES:
Genre: String;
END CONCEPT;
CONCEPT Reader-type;
ATTRIBUTES:
Level: String;
END CONCEPT;
CONCEPT Book;
ATTRIBUTES:
Title: String;
Author: String;
END CONCEPT;
2) 表达式关系
表达式之间的关系以if…then的形式进行表现:条件表达式在前,赋值表达式在后。我们假设她们之间的一种因果关联关系,本例中展示的关系如下:
RULE-TYPE Abstraction-rules; DESCRIPTION: Abstract the age of a person ANTECEDENT: Person; CARDINALITY: 1; CONSEQUENT: Stage; CARDINALITY: 1; CONNECTION-SYMBOL: Abstracts; END-RULE-TYPE Abstraction-rules;
RULE-TYPE Genre-preferences; DESCRIPTION: Genre selection starting from the interests ANTECEDENT: Interests; CARDINALITY: 1; CONSEQUENT: Genre; CARDINALITY: *; CONNECTION-SYMBOL: Prefers; END-RULE-TYPE Genre-preferences;
RULE-TYPE Level-assignation; DESCRIPTION: Assigns a level according the education ANTECEDENT: Education; CARDINALITY: 1; CONSEQUENT: Level; CARDINALITY: 1; CONNECTION-SYMBOL: Assigns; END-RULE-TYPE Level-assignation;
RULE-TYPE Assign-book; DESCRIPTION: Assign books ANTECEDENT: Genre and Level; CARDINALITY: *; CONSEQUENT: Book; CARDINALITY: *; CONNECTION-SYMBOL: Final assignation; END-RULE-TYPE Assign-book;
3) 知识库
知识库通过之前定义的通用规则来获取表达式对,下面展示了知识库的一个样本实例:
KNOWLEDGE-BASE Literary-assistant-base USES Abstraction-rules FROM literary-assistant-scheme; Genre-preferences FROM literary-assistant-scheme; Level-assignation FROM literary-assistant-scheme; Assign-book FROM literary-assistant-scheme; EXPRESSIONS /* Select stage */ Person.age <= 13 ABSTRACT Person.stage = CHILD Person.age > 13 AND Person.age <= 19 ABSTRACT Person.stage = TEENAGER Person.age > 19 AND Person.age <= 40 ABSTRACT Person.stage = YOUNG Person.age > 40 ABSTRACT Person.stage = ADULT /* Discriminate interests */ Person.interests = "Music" OR Person.interests = "Painting" OR Person.interests = "Cinema" OR Person.interests = "Sculpture" PREFER reading-type.genre = ART . . . /* Adjust reader level */ Person.education = SECONDARY AND Person.stage = YOUNG SELECT-LEVEL reader-type.level = ADVANCED Person.education = SECONDARY AND Person.stage = ADULT SELECT-LEVEL reader-type.level = ADVANCED Person.education = UNIVERSITARY SELECT-LEVEL reader-type.level = ADVANCED . . . /* Science section */ reader-type.level = CHILD AND reading-type.genre = SCIENCE SELECT-BOOK Book.title = "Arithmetics handouts" reader-type.level = BASIC AND reading-type.genre = SCIENCE SELECT-BOOK Book.title = "Basic arithmetics and geometry " reader-type.level = INTERMEDIATE AND reading-type.genre = SCIENCE SELECT-BOOK Book.title = "Derivatives and integrals" reader-type.level = ADVANCED AND reading-type.genre = SCIENCE SELECT-BOOK Book.title = "Differential equations" . . . END KNOWLEDGE-BASE Literary-assistant-base;
2. 推理知识
推理知识是指不需要进行分解的子任务的集合,它们是任务执行过程中的原子论证步骤和元素。通过指明使用的函数以及函数的输入和输出来描述推理知识。需要注意的是,推理的描述并没有暗示它们是如何执行的,因为它们非常依赖特定的应用和领域。
1) 推理模式
就像之前解释的那样,推理是一个基本的论证步骤,但是它依赖于领域角色:
INFERENCE Abstract ROLES INPUT: Person; OUTPUT: Stage; STATIC: Abstraction-model; SPECIFICATION: "Abstracts the age of a person" END INFERENCE Abstract;
INFERENCE Select-genre ROLES INPUT: Interest; OUTPUT: Genre; STATIC: Preferences-model; SPECIFICATION: "Selects a genre according the user‘s interests" END INFERENCE Abstract;
INFERENCE Select-level ROLES INPUT: Education,Stage; OUTPUT: Level; STATIC: Level-model; SPECIFICATION: "Selects a level according the user‘s education and stage" END INFERENCE Abstract;
INFERENCE Select-book ROLES INPUT: Genre, Level; OUTPUT: Book; STATIC: Book-selection-model; SPECIFICATION: "Assigns a book according the user‘s level and selected genres" END INFERENCE Abstract;
2) 领域链接
完成推理知识的建模之后,有必要来描述它们是如何与知识领域的元素进行连接的,如下图所示。
KNOWLEDGE-ROLE Person; TYPE: DYNAMIC; DOMAIN-MAPPING: Person; END KNOWLEDGE-ROLE Person;
KNOWLEDGE-ROLE Abstraction-model; TYPE: STATIC; DOMAIN-MAPPING:Abstraction-rules FROM literary-assistant-scheme; ; END KNOWLEDGE-ROLE Abstraction-model;
KNOWLEDGE-ROLE Stage; TYPE: DYNAMIC; DOMAIN-MAPPING: Stage; END KNOWLEDGE-ROLE Stage;
KNOWLEDGE-ROLE Interest; TYPE: DYNAMIC; DOMAIN-MAPPING: Interest; END KNOWLEDGE-ROLE Interest;
KNOWLEDGE-ROLE Preferences-model; TYPE: STATIC; DOMAIN-MAPPING:Genre preferences FROM literary-assistant-scheme; ; END KNOWLEDGE-ROLE Preferences-model;
KNOWLEDGE-ROLE Genre; TYPE: DYNAMIC; DOMAIN-MAPPING: Genre; END KNOWLEDGE-ROLE Genre;
KNOWLEDGE-ROLE Education; TYPE: DYNAMIC; DOMAIN-MAPPING: Education; END KNOWLEDGE-ROLE Education;
KNOWLEDGE-ROLE Stage; TYPE: DYNAMIC; DOMAIN-MAPPING: Education; END KNOWLEDGE-ROLE Education;
KNOWLEDGE-ROLE Level-model; TYPE: STATIC; DOMAIN-MAPPING:Level-assignation FROM literary-assistant-scheme; END KNOWLEDGE-ROLE Level-model;
KNOWLEDGE-ROLE Level; TYPE: DYNAMIC; DOMAIN-MAPPING: Level; END KNOWLEDGE-ROLE Level;
KNOWLEDGE-ROLE Genre; TYPE: DYNAMIC; DOMAIN-MAPPING: Genre-and-Level; END KNOWLEDGE-ROLE Genre;
KNOWLEDGE-ROLE Level; TYPE: DYNAMIC; DOMAIN-MAPPING: Genre-and-Level; END KNOWLEDGE-ROLE Level;
KNOWLEDGE-ROLE Book-selection-model; TYPE: STATIC; DOMAIN-MAPPING:Assign-book FROM literary-assistant-scheme; END KNOWLEDGE-ROLE Book-selection-model;
KNOWLEDGE-ROLE Book; TYPE: DYNAMIC; DOMAIN-MAPPING: Book; END KNOWLEDGE-ROLE Book;
3. 任务知识
任务代表着一个总体目标,为了达到这个目标,我们使用‘method’来对基本任务进行子任务分解,使用‘control’对子任务在运行时进行排序。在对任务进行递归分解的时候,我们把不能继续分解的、位于叶子节点的子任务称为‘inferences’。‘control method’知识是最终实现一个任务的必要条件,它清晰地、精确地、明确地指明了链接到各个‘inferences’的过程。下图展示了任务、子任务分解和最终的‘inferences’:
TASK Literary-assistant GOAL: "Advice a book to a reader"; ROLES: INPUT: Person: "A person who wants to read a book"; OUTPUT: Book: "Some books to read"; SPEC: "Assign a book to a person according to its education and age"; END TASK Literary-assistant; TASK-METHOD Literary-assistant-sequential; REALIZES: "Literary assistant"; DECOMPOSITION: INFERENCES: Abstract, Select-genre, Select-level, Select-book; TRANSFER-FUNCTIONS:; ROLES: INTERMEDIATE: Abstraction-model: Preferences-model: Level-model: Book-selection-model: CONTROL-STRUCTURE: Abstract(+Stage,-Person,-Abstraction-model); Select-genre(+Genre,-Interest,-Preferences-model); Select-level(+Level,-Education,-Stage,-Level-model); Select-Book(+Book,-Genre,-Level,-Book-selection-model); END-TASK-METHOD Literary-assistant-sequential;
四、一个简单的实现
我们选择使用CLIPS来实现一个例子,CLIPS是起源于1985年的一个专家系统,具有以下的特性:
下面是本文案例的全部源代码,基于CLIPS编写。
; Select level according to education (defrule select_level ?f1<-(start_level) (person (education ?edu)(stage ?stg)) (level (education ?edu)(stage ?stg)(level ?lev)) => (assert (reader-type (level ?lev))) (retract ?f1) ) ; Find interests in interest list (deffunction has_person (?mat $?interests) (return (member$ ?mat $?interests)) ) ; Select genre according to interests (defrule select_genre (interests) (person (interests $?interests)) (matter (interest $?cat)(genre ?genre)) => (bind ?i 1) (while (<= ?i (length$ $?interests)) (bind ?mat (nth$ ?i $?interests)) (if (has_person ?mat $?cat) then (assert (reading-type (genre ?genre))) ) (bind ?i (+ ?i 1)) ) ) ; Select book according to interests (defrule recommend_book (reader-type (level ?level)) (reading-type (genre ?genre)) (category (level ?level)(genre ?genre)(book ?book)) => (printout t "According to this data, you should read: " ?book crlf) )
下图展示了使用CLIPS编写的应用的运行结果。
注意:如果输入了系统不能匹配的年龄或者受教育程度,系统将不会返回任何结果。例如:当你的年龄是50岁但是受教育程度是‘幼儿园’时,系统将不会给你推荐任何的图书。
五、内嵌C++
下面的代码展示了如何将CLIPS内嵌到C++的项目中。
#include <iostream> extern "C" { #include "clips.h" } using namespace std; int main(int argc, char* argv[]) { InitializeEnvironment(); Load("literary assistant.clp"); // Insert the CLIPS source code here Reset(); Run(-1L); cin.get(); return 0; }
六、进一步阅读和引用
标签:项目开发 软件设计师 编程语言 匹配 根据 报告 dmi 通信 put
原文地址:http://www.cnblogs.com/allanli/p/7279185.html