知識庫語言(數(shù)據(jù)庫)
時間:2022-12-10 06:30:01 | 來源:信息時代
時間:2022-12-10 06:30:01 來源:信息時代
知識庫語言 : 用于知識庫開發(fā)的程序設(shè)計語言。這是一種描述性的邏輯數(shù)據(jù)語言,是知識庫研究的核心內(nèi)容之一。知識庫系統(tǒng)是一種軟件系統(tǒng),同常規(guī)軟件系統(tǒng)開發(fā)一樣,知識庫系統(tǒng)的開發(fā)也需要某種程序設(shè)計語言的支撐。一般來講,知識庫語言應(yīng)具備如下功能: ①符號與數(shù)值的兼容處理功能; ②知識表示功能; ③邏輯推理功能; ④并行處理、遞歸及回溯功能。
在目前已推出的智能處理語言中,有多種知識語言符合以上五種功能中的全部或大部分要求,可作為知識處理使用。常用的知識處理語言有以LISP為代表的函數(shù)型語言,以PROLOG、DATALOG為代表的邏輯型語言,及以Smalltalk、C++為代表的面向?qū)ο笳Z言。這些程序設(shè)計語言總體來說是基于一階謂詞邏輯的,是Horn子句的擴(kuò)充。
知識庫系統(tǒng)工作過程中主要涉及知識庫、知識處理器(knowledge processor,KP)、知識庫語言和知識庫用戶。其中: 知識處理器規(guī)定了對知識庫操作的底層原語(primitive),相當(dāng)于一般程序設(shè)計語言中的低級語言; 知識庫語言調(diào)用知識處理器的原語操作,實現(xiàn)高級語言的功能; 知識庫用戶則直接使用知識庫語言編程,實現(xiàn)對知識庫的操作與處理; 內(nèi)建應(yīng)用程序是利用知識庫語言及知識處理器的底層原語實現(xiàn)的程序,可被知識庫用戶直接調(diào)用。知識庫語言與知識系統(tǒng)的關(guān)系如圖1所示。
圖1 知識庫語言與知識系統(tǒng)的關(guān)系
在數(shù)據(jù)庫領(lǐng)域,由于描述性查詢語言SQL的成功使用,“描述性”受到更多的重視。描述性語言DATALOG的提出,使部分學(xué)者認(rèn)為知識庫語言應(yīng)該是描述性的(或稱為非過程性的)。描述性與過程性是兩個對立的概念; 用過程性語言寫應(yīng)用程序時不但要告訴計算機(jī)做什么,還要告訴計算機(jī)如何做,程序嚴(yán)格規(guī)定了計算機(jī)的每一個工作步驟; 而用描述性語言解題,則只要告訴計算機(jī)做什么,而不必說明具體的執(zhí)行步驟。
然而,描述性語言是計算不完備的。因為在馮·諾依曼體系下,從問題求解的底層看,求解一個問題的解法嚴(yán)格規(guī)定了計算機(jī)的每一步工作,這是問題的過程性內(nèi)容(即控制),其中必須用到過程性語言的控制功能。
盡管如此,描述性的概念仍然很有意義。傳統(tǒng)的過程語言中有順序、分支和循環(huán)三種用戶控制。適當(dāng)減少控制,增加描述性成分可以給用戶帶來極大方便。如PROLOG語言沒有循環(huán)和分支結(jié)構(gòu)而只有順序結(jié)構(gòu),所以編程相對方便簡單。另外,關(guān)系數(shù)據(jù)庫查詢語言SQL是描述性的,它也給用戶帶來方便。
計算機(jī)邏輯語言的基礎(chǔ)是數(shù)理邏輯,即以命題演算和一階謂詞演算為基礎(chǔ)的公理化集合論、證明論、模型論和遞歸論等。如PROLOG、DATALOG等都是以一階謂詞演算的Horn子句邏輯為基礎(chǔ)。邏輯語言的程序一般由事實和規(guī)則組成。當(dāng)提問目標(biāo)時,系統(tǒng)根據(jù)規(guī)則(規(guī)則是問題的描述,也可以包括問題的解法)和事實導(dǎo)出滿足目標(biāo)的事實或給出證明的結(jié)論(true或false)。因此,邏輯語言的描述性直觀地可理解為: 事實、規(guī)則及其子目標(biāo)的順序與程序的執(zhí)行結(jié)果無關(guān)。
一階謂詞演算系統(tǒng)可以描述自然語言的很多內(nèi)容以及大多數(shù)數(shù)學(xué)定理。由Skolem定理,一階語言的語句集可以轉(zhuǎn)化為Skolem標(biāo)準(zhǔn)型,故作為其真子集的Horn子句也具有這種性質(zhì)。因此,通過特定算法可以使基于Horn子句(甚至可以是基于一階謂詞邏輯)的語言轉(zhuǎn)換成描述性的,例如,基于Horn子句的DATALOG(一個描述性邏輯語言)、基于一階邏輯的描述性語言SQL等。
邏輯程序設(shè)計由定理自動證明發(fā)展而來。定理自動證明可以用描述性語言實現(xiàn),但定理自動證明不僅要證明定理,還需將證明過程展示給用戶或允許用戶查看中間結(jié)果。因此,邏輯程序設(shè)計語言必須向用戶提供一些控制機(jī)制,例如,PROLOG語言。
基于Horn子句的邏輯語言(如,PROLOG、DATALOG)的規(guī)則隱含了循環(huán)和分支兩種控制結(jié)構(gòu); 循環(huán)可由遞歸實現(xiàn),而規(guī)則本身就是分支結(jié)構(gòu)。
描述性在數(shù)據(jù)庫領(lǐng)域受到重視有兩個重要原因。首先,關(guān)系數(shù)據(jù)庫查詢語言SQL是描述性的;其次,描述性語言可以高效地給出一個問題的所有解答結(jié)果。因此,數(shù)據(jù)庫系統(tǒng)“每次一個集合”的計值模型就大大優(yōu)于人工智能領(lǐng)域常用的“每次一個元組”的計值模型。也就是說用數(shù)據(jù)庫技術(shù)實現(xiàn)描述性語言在某些情況下更為方便。
當(dāng)AI與DB相結(jié)合產(chǎn)生知識庫的時候,DB研究人員就很自然地希望將SQL的優(yōu)點加以保持并擴(kuò)展,而且希望能夠克服SQL與宿主語言不匹配的缺點。Ullman給出的知識庫系統(tǒng)的定義要求: 有一個既可以作為數(shù)據(jù)操縱語言,又可作為宿主語言的描述性語言;支持?jǐn)?shù)據(jù)庫系統(tǒng)大批量數(shù)據(jù)的高效存取、數(shù)據(jù)共享、并發(fā)控制及故障恢復(fù)等主要功能。然而在實際中,邏輯語言為了滿足描述性,難以起到宿主語言的作用,還需加入用戶控制機(jī)制或引入過程語言,所以在現(xiàn)階段實現(xiàn)知識庫語言時無法完全遵循描述性要求。
知識庫語言取邏輯語言的形式是出于AI的要求和邏輯語言的優(yōu)越性。對描述性、操縱語言和宿主語言如何取舍可作如下考慮:
(1)保持描述性,即建立一個描述性的查詢語言(如DATALOG),將其與宿主語言(過程性語言)分開。這里的DATALOG和DML不同,可以隨意編程定義各種遞歸,而DML只提供幾種有限的操作。因此,DATALOG也起了一定的宿主語言的作用。
(2)放棄描述性條件,建立一個既作查詢語言又作宿主語言的邏輯語言。
綜上所述,知識庫語言應(yīng)是一種既有查詢語言功能又可作為宿主語言的邏輯語言(基于Horn子句的語言)。
邏輯語言直接用來表示和實現(xiàn)知識庫系統(tǒng)(尤其是具有更高語義層次和特殊要求的復(fù)雜應(yīng)用)還存在一定困難,因此,人們對邏輯語言的理論、結(jié)構(gòu)和表達(dá)能力等方面還在進(jìn)行改進(jìn)和擴(kuò)充,這方面工作主要集中在語義理論、表達(dá)能力和系統(tǒng)實現(xiàn)等方面的研究。另一種研究方向是,將AI、OO和DB三者結(jié)合起來開發(fā)具有更高智能的知識庫系統(tǒng)。因為在數(shù)據(jù)庫的發(fā)展過程中,知識庫(即智能數(shù)據(jù)庫)研究由理論研究驅(qū)動,而面向?qū)ο髷?shù)據(jù)庫由應(yīng)用驅(qū)動,兩種類型的數(shù)據(jù)庫在很多方面是互補(bǔ)的。最后,還有綜合多種AI語言和多種知識表示方法來實現(xiàn)AI和DB結(jié)合的知識庫,以提高系統(tǒng)的問題求解能力和智能化水平。