基於CommonKADS方法論實現知識庫系統

 

說明:本文是Knowledge-based systems with thecommonKADS method文章的翻譯。html

 

1、知識庫系統的背景ios

1. 什麼是知識庫系統(KBS)git

知識庫系統是人工智能的一個分支,能夠真正地應用於現今的系統開發領域。他們一般內嵌於其餘的應用中,來執行特定知識的任務。算法

知識庫系統是AI科學家長期研究的成果。從上個世紀70年代開始,科學家們開始理解計算機程序解決問題的關鍵不在於規整的表達式或者推理邏輯的模式,而是在於這些問題自己擁有的知識。擁有豐富知識和經驗的人類專家能夠高效地解決不一樣種類的問題----即便他們對這些問題的描述並非十分明確----只要是這些問題處於專家的研究領域。所以,知識庫系統是一組計算機程序,用來仿真(在某些狀況下甚至超越)人類專家解決問題的能力。固然,知識庫系統的目標並非用機器來代替人類的思考,而是發揮出計算機強大的計算能力。爲了打造一個知識庫系統,工程師們須要接受來自專家的大量的建議。在一些領域,這些專家都是基於規則進行建議的,儘管他們自身並無意識到這一點。數據庫

知識庫系統在不基於直覺或者常識而得到有效的結果方面是很是強大的。編程

知識庫系統的發展過程經歷了兩代:在第一代系統中,工程師們侷限於根據專家定義的規則進行編碼實現,這種形式並非十分有效的,由於項目難以維護而且修改代價十分巨大。除此以外,知識獲取的過程嚴重依賴專家的輸出;在第二代系統中,Allen Newel提出了‘知識等級’的概念,知識不依賴於具體的實現,而是根據不一樣種類的知識等級進行結構化表示:網絡

l  知識等級:Agent,Knowledge,Goal,Actions架構

l  表示等級:Computer,Symbols,Instructions編程語言

l  邏輯等級:Digital System,Bits,Logic and Arithmetic Operationside

l  鏈路等級:Electronic System, Current

Newel提出了使用模型的必要性,這樣,咱們把‘知識獲取’定義成一個過程,在這個過程當中,工程師們先建立‘知識模型’,隨後把它們編碼成計算機可運行的形式。

如今一般使用第二代知識庫系統。

 

2. 編程語言

知識庫系統一般基於Prolog,Lisp,C++和CLIPS語言來實現,其中CLIPS是本文介紹的重點。Lisp是一種函數式編程語言,一直以來都應用於AI領域而且取得了不錯的效果。與此相對,Prolog是一種聲明式語言,與面向過程的編程語言經過實現一個算法來解決問題的模式不一樣,它經過推理引擎來論證事實和關係。過程式語言面向‘How’,聲明式語言面向‘What’。另外,C++是一種很是高效而且高度優化的編程語言,可是它缺乏推理引擎,須要從零開始實現。

 

3. 應用領域

  • Support system decision-making:給定一個問題,系統根據系統內已有的知識決策出最優的方案。
  • Configuration:在一個特定的過程當中選擇和計劃可能須要的組件。例如,從給定的組件和需求開始,系統幫助配置物理裝備。
  • Diagnosis:系統根據症狀來肯定問題的根源,例如,疾病診斷和問題排查。
  • Interpretation and analysis:經過分析、處理大量的信息,給出一個顯示的報告並建議採起行動的步驟,其中一個例子就是評估建築物結構抗震等級。
  • Monitoring:它是Interpretation and analysis的一個常用的特殊的案例,因此在這裏單獨劃分開來。它的目標一般是經過監控一個過程來給出控制結果的輸出,例如:核電站的控制系統。
  • Planning:經過創建階段和資源來獲取目標輸出,其中一個例子就是解決工業物流問題。
  • Intelligence interfaces:一般應用在人們很難去使用複雜裝備的狀況下,例如自動駕駛。
  • Design:在Computer Aided Design領域給出建議,例如在電子設計程序中給出正確的工做電壓。

 

4. 知識庫系統的結構

 

  • 知識庫:KBS以形式化和結構化的方式來存儲人類專家的知識,一般稱爲知識庫。一些知識庫系統擁有‘元知識’或者‘關於知識的知識’,也就是說他們能夠根據不一樣的狀況,採起不一樣的策略,以智能的方式來搜索知識庫並找到問題解決方案。這就意味着在具體實現的過程當中,系統會根據定義的標準或者條件來決定使用哪一種策略。知識庫能夠被表示成謂詞演算、列表、對象、語義網絡和產品規則,大多數狀況下,一般基於規則和對象進行實現。
  • 推理引擎:也稱爲規則解釋器,目標是在推理過程當中搜索和選擇正確的規則。
  • 事實庫:它就像一個臨時的大內存,來存儲在推理過程當中使用的用戶數據、初始問題、假設條件和臨時結果。經過事實庫,咱們能夠洞悉系統當前的狀態和它是若是工做的。最好將這些信息存儲在關係型數據庫中,不要選擇其它的持久化方式。
  • 用戶接口:容許和KBS進行通訊,包括數據的輸入和輸出。

5. 目前的趨勢

知識庫系統的開發並無統一的標準,儘管如此,ESPRIT項目提供了一套方法論來開發知識庫系統,簡稱CADS(Knowledge Acquisition Design System)。在KADS中,構造知識庫系統基本上就是一種基於模型的活動,其中一個最重要的特性就是構造一個與具體實現無關的、完備的知識模型。KADS是面向結果的方法論,產品中每一個開發活動產生的結果是整個項目控制和方向的惟一檢驗標準。

 

2、CommonKADS方法論

1. 歷史簡介

CommonKADS是KBS工程中領先的方法論,已經被許多公司和高校基於歐洲ESPRIT項目集進行開發和測試過。如今是知識庫系統開發的事實標準,而且被歐洲、美國和日本的不少公司所採納、使用。CommonKADS同時也提供方法來進行知識任務和進程的詳細分析,下圖展現了知識庫系統方法論的演進過程:

CommonKADS起源於KADS-I項目----一個擁有悠久歷史和衆多技術人員參與的項目----儘管這套方法論缺乏形式標準。從1990年冬季開始,一個新的方法論具備商業可行性而且覆蓋了KBS整個生命週期,它就是CommonKADS。

 

2. 模型套件

模型套件在知識工程中提供任務分解,來減小複雜性。當考慮構造一個模型的時候,其餘方面能夠延後考慮。CommonKADS涉及的模型以下圖所示:

  • Organization Model:描述和分析一個公司的主要活動。
  • Task Model:分析一個組織的全局子過程的模式:輸入、輸出、前置條件、性能標準、資源和能力要求等。
  • Agent Model:任務執行的特徵描述:能力要求、受權流程和限制條件等。
  • Communication Model:一個任務中涉及到的Agent事務流的概念性描述。
  • Knowledge Model:一個任務使用的知識類型、結構的描述,或者一個任務解決過程當中涉及的知識組件的角色的描述----它們不依賴於具體的實現。
  • Design Model:描述了技術規格,例如架構、實現平臺、軟件模塊等等,目的是獲得Knowledge Model和Communication Model中涉及的功能。

 

在這些模型中,本篇文章將重點關注Knowledge Model,其結構以下圖所示。

 

²  Domain knowledge:描述了關於應用領域的實體和內容,和其餘知識類型的使用無關。

²  Inference knowledge:處理不一樣類型的推理(在任務解決過程當中被專家使用的論據)。一個推薦由輸入和輸出定義----也就是它們的領域角色。推理不容許進一步的分解。

²  Task knowledge:指明瞭任務的目標以及解決方法。

²  Problem solving methods:描述了任務解決方法,肯定遞歸分解的子任務以及它們的執行順序。

²  Strategic knowledge:說明了任務執行計劃,爲了設計更加靈活的系統而加以考量。

 

3. 角色

和其餘的軟件項目同樣,須要人員來組織、管理和開發知識庫系統。在KBS的開發中,一共存在6種相關的角色,以下圖所示。

  • Knowledge provider/ specialist:人類知識的擁有者,一般是應用領域內典型的專家,也能夠是組織內沒有專家頭銜的人員。
  • Knowledge engineer/ analyst:知識工程師的一個重要問題就是要找到以前提到的真正的專家,‘知識工程師’的頭銜一般專指進行‘系統分析工做’的人員,因此也能夠稱他們爲‘知識分析師’,所以,這兩種稱呼是等價的。CommonKADS向知識工程師們提供一整套的方法和工具,使得標準任務分析工做簡單明瞭。
  • Knowledge system developer:知識系統開發員主要負責設計和實現,他們必須有數據分析的基本背景知識。在知識系統開發的過程當中,主要的知識問題都被知識分析師解決掉了,所以,此角色應該具有軟件設計師的一些技能。
  • Knowledge user:主要負責知識系統的使用----直接或者間接地。他們與KBS的交互對於項目開發和驗證來講是很是重要的。
  • Project manager:負責項目的管理以及知識工程師和知識系統開發員的管理。
  • Knowledge manager:在整個層級的最上面,在宏觀上把握項目,就像一個策略家,協做、定義和分發知識給其餘的角色。

 

        

3、使用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;
Person
CONCEPT Reading-type; 
ATTRIBUTES:
Genre: String;
END CONCEPT;
Reading-type
CONCEPT Reader-type;
ATTRIBUTES:
Level: String;
END CONCEPT;
reader-type
CONCEPT Book;
ATTRIBUTES:
Title: String;
Author: String;
END CONCEPT;
book

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;
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;
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;
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;
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;
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;
Abstract

 

INFERENCE Select-genre

ROLES

INPUT: Interest;

OUTPUT: Genre;

STATIC: Preferences-model;

SPECIFICATION:

"Selects a genre according the user's interests"

END INFERENCE Abstract;
Select-genre

  

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;
Select-level

  

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;
Select-book

2)         領域連接

完成推理知識的建模以後,有必要來描述它們是如何與知識領域的元素進行鏈接的,以下圖所示。

KNOWLEDGE-ROLE Person;

TYPE: DYNAMIC;

DOMAIN-MAPPING: Person;

END KNOWLEDGE-ROLE Person;
Person
KNOWLEDGE-ROLE Abstraction-model;

TYPE: STATIC;

DOMAIN-MAPPING:Abstraction-rules

  FROM literary-assistant-scheme; ;

END KNOWLEDGE-ROLE Abstraction-model;
Abstraction-model
KNOWLEDGE-ROLE Stage;

TYPE: DYNAMIC;

DOMAIN-MAPPING: Stage;

END KNOWLEDGE-ROLE Stage;
Stage

KNOWLEDGE-ROLE Interest;
TYPE: DYNAMIC;
DOMAIN-MAPPING: Interest;
END KNOWLEDGE-ROLE Interest;
Interest
KNOWLEDGE-ROLE Preferences-model;
TYPE: STATIC;
DOMAIN-MAPPING:Genre preferences 
   FROM literary-assistant-scheme; ;
END KNOWLEDGE-ROLE Preferences-model;
Preferences-model
KNOWLEDGE-ROLE Genre;
TYPE: DYNAMIC;
DOMAIN-MAPPING: Genre;
END KNOWLEDGE-ROLE Genre;
Genre

KNOWLEDGE-ROLE Education;
TYPE: DYNAMIC;
DOMAIN-MAPPING: Education;
END KNOWLEDGE-ROLE Education;
Education
KNOWLEDGE-ROLE Stage;
TYPE: DYNAMIC;
DOMAIN-MAPPING: Education;
END KNOWLEDGE-ROLE Education;
Stage
KNOWLEDGE-ROLE Level-model;
TYPE: STATIC;
DOMAIN-MAPPING:Level-assignation 
   FROM literary-assistant-scheme; 
END KNOWLEDGE-ROLE Level-model;
Level-model
KNOWLEDGE-ROLE Level;
TYPE: DYNAMIC;
DOMAIN-MAPPING: Level;
END KNOWLEDGE-ROLE Level;
Level

KNOWLEDGE-ROLE Genre;
TYPE: DYNAMIC;
DOMAIN-MAPPING: Genre-and-Level;
END KNOWLEDGE-ROLE Genre;
Genre
KNOWLEDGE-ROLE Level;
TYPE: DYNAMIC;
DOMAIN-MAPPING: Genre-and-Level;
END KNOWLEDGE-ROLE Level;
Level
KNOWLEDGE-ROLE Book-selection-model;
TYPE: STATIC;
DOMAIN-MAPPING:Assign-book 
   FROM literary-assistant-scheme;
END KNOWLEDGE-ROLE Book-selection-model;
Book-selection-model
KNOWLEDGE-ROLE Book;
TYPE: DYNAMIC;
DOMAIN-MAPPING: Book;
END KNOWLEDGE-ROLE Book;
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;
Literary-assistant

 

4、一個簡單的實現

咱們選擇使用CLIPS來實現一個例子,CLIPS是起源於1985年的一個專家系統,具備如下的特性:

  • 知識表現:CLIPS內置了一個工具來處理各類各樣的知識,支持三種不一樣的編程範式:基於規則的、基於對象的、過程式的。
  • 可移植性:爲了高可移植性和運行速度,CLIPS使用C來實現,不須要任何程序的變化就能夠安裝在各類不一樣的操做系統上,已經通過測試的系統有:Windows XP, MacOS X和Unix。理論上,CLIPS能夠被移植到任何有ANSI C和C++編譯器的操做系統上面。CLIPS是徹底開源的,能夠進行修改或者裁剪來知足用戶特殊的需求。
  • 集成/可擴展性:CLIPS能被內嵌在過程代碼中,叫作子程序。支持的嵌入語言有:C、C++、Java、FORTAN和ADA。
  • 檢查和驗證:CLIPS經過內置的特性來支持專家系統的檢查和驗證,這些特性包括:模塊設計、知識庫的劃分、函數參數和值的靜態/動態檢查、規則模式的語義分析等。
  • 豐富的文檔。
  • 低成本:CLIPS是徹底開源的軟件。

下面是本文案例的所有源代碼,基於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)

)
View Code

 下圖展現了使用CLIPS編寫的應用的運行結果。

注意:若是輸入了系統不能匹配的年齡或者受教育程度,系統將不會返回任何結果。例如:當你的年齡是50歲可是受教育程度是‘幼兒園’時,系統將不會給你推薦任何的圖書。

 

 

5、內嵌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;
}
View Code

 

6、進一步閱讀和引用

  • Knowledge engineering and management: the CommonKADS methodology. [Guus Schreiber][ Hans Akkermans][Anjo Anjewierden][Robert de Hoog][Nigel Shadbolt] et al. Massachusetts Institute of Technology.
  • http://www.csae.map.es/csi/silice/Sgexpt.html. [Consejo Superior de Administración Electrónica - Government of Spain]
  • Basic aspects of Artificial Intelligence. [J. Mira][A.E. Delgado][ J.G. Boticario][ F.J. Diez]. UNED - National University for Distance Education.
  • Methodological aspects of KBS development. [J. Mira][R. Martínez Tomás]. UNED - National University for Distance Education.
  • CLIPS: a tool for building expert systemshttp://clipsrules.sourceforge.net/.
相關文章
相關標籤/搜索