摘要:將軟件工程中模塊化的思想引入本體知識庫的構(gòu)建過程中,將本體組織成多個本體模塊的集成形式,這樣不僅方便了本體的構(gòu)建,更有利于本體知識庫的共享、重用和維護。用模塊化的方法構(gòu)建了汽車駕駛培訓(xùn)領(lǐng)域本體,建立方法庫,在本體模塊間用查詢方式實現(xiàn)模塊間的通信。這樣的開發(fā)經(jīng)驗可以推廣到其他領(lǐng)域。
關(guān)鍵詞:本體; 模塊化; 方法庫; 方法; 查詢
中圖分類號:TP391文獻標(biāo)志碼:A
文章編號:1001-3695(2007)11-0206-04
0引言
現(xiàn)在,本體已被知識工程界廣泛采用,它被Neches等人定義為“給出構(gòu)成相關(guān)領(lǐng)域詞匯的基本術(shù)語和關(guān)系,以及利用這些術(shù)語和關(guān)系構(gòu)成的規(guī)定這些詞匯外延的規(guī)則的定義”[1]。在知識工程、自然語言處理、信息檢索系統(tǒng)、智能信息集成和知識管理、信息交換和軟件工程等領(lǐng)域,本體技術(shù)都得到了研究和發(fā)展[2]。
然而畢竟本體技術(shù)還是一個比較年輕的技術(shù),比起軟件工程經(jīng)過幾十年的發(fā)展已形成的大量成功的程序設(shè)計方法,本體技術(shù)還有很多不完備之處有待改進。
現(xiàn)有的本體系統(tǒng),往往將所有概念組織成一個概念網(wǎng)絡(luò),概念之間存在著錯綜復(fù)雜的關(guān)系。這樣高耦合度的系統(tǒng)確實能夠體現(xiàn)現(xiàn)實世界事物之間廣泛存在的復(fù)雜關(guān)系。但是本體中所包含的概念往往很多,有時一個本體會包含超過10億個概念,對于某個概念的某個細(xì)微變更就可能影響到整個本體系統(tǒng)中的很大一部分。所謂牽一發(fā)而動全身,這樣的本體維護起來十分困難。另一方面,在本體重用時,往往并不會對整個本體感興趣,而只是想重用其中的一部分。但由于系統(tǒng)的高度耦合性,只能將整個本體全部重用(如使用RDF和OWL語言提供的import方法[3]),這不僅增大了開銷,也降低了效率。
模塊化思想在軟件工程中已被廣泛應(yīng)用。一個大型軟件分成多個相互協(xié)作的模塊,每個模塊進而擁有各自的子模塊。模塊化能夠很好地支持重用,并能為系統(tǒng)維護提供很大的方便,但模塊化在知識表示和推理領(lǐng)域并沒有引起足夠的重視。但近年來也有人作過相關(guān)的嘗試。
W.Farmer和J.Guttman等人提出的運用模塊化與數(shù)學(xué)結(jié)構(gòu)的結(jié)合來對復(fù)雜的問題進行推理,顯示了模塊化方法在重用和減少建模成本方面的優(yōu)勢。在這以后,重用、組織知識塊而不是白手起家地建設(shè)知識庫的思想開始被知識工程界采用來構(gòu)建現(xiàn)實世界的知識庫。McIlraith和Amir提出知識庫的模塊化對推理也十分有益,即使是對已有的知識系統(tǒng)進行分解,也能提高推理效率。Rector提出了一種使用描述邏輯來模塊化實現(xiàn)本體的策略。這種方法雖然能夠較方便地建立和重用本體知識,但它仍然將整個模型看做是一個單獨的本體,對世界進行耦合的概念描述。Giunchiglia等人提出了一種更直接的分布式表示法。他們提出將本地的模型語義作為一個標(biāo)準(zhǔn)的一階邏輯標(biāo)準(zhǔn)進行擴展。這種語義方法允許不同的模塊對同一事物用不同的視圖來表示?,F(xiàn)在流行的本體構(gòu)建語言RDF與OWL提供了一些基本的結(jié)合模塊的表示機制。但它結(jié)合不同模型的能力僅限于一個完整的本體或者是直接引用其他模塊中的概念。
總的來說,本體的模塊化缺乏理論的指導(dǎo),如何劃分模塊、如何實現(xiàn)模塊間通信和知識整合、如何進行知識推理都是需要解決的問題。
1本體模塊
1.1定義
一個本體可表示為T(C,R,σ)。
其中:C表示本體中所定義的所有概念的集合;R是所有本體中定義的關(guān)系的集合;σ是本體中概念和關(guān)系必須遵循的約束的集合。
本體中每個模塊可表示為Ti(id,Ci,Ri,σi)。
其中:id對應(yīng)模塊Ti的URI[5](unique resource identifier,統(tǒng)一資源標(biāo)志符);Ci表示模塊中所定義的所有概念的集合;Ri是所有模塊中定義的關(guān)系的集合;σi是Ci與Ri中的元素必須遵循的約束的集合。
1.2劃塊原則
一個領(lǐng)域本體往往包含許多學(xué)科領(lǐng)域的知識,如汽車駕駛培訓(xùn)領(lǐng)域就涉及包括機械動力、心理、生理醫(yī)學(xué)、交通法規(guī)等許多學(xué)科。這些學(xué)科領(lǐng)域知識之間關(guān)系錯綜復(fù)雜。如何將整個知識體系劃分成本體模塊呢?
1)模塊的劃分要使人易于理解本體系統(tǒng)一方面是使計算機理解所處理的知識,但最基本的還是要讓人來理解。這樣對于系統(tǒng)的共享和重用大有好處,也有利于系統(tǒng)的維護和擴展。
2)劃分的模塊應(yīng)具有知識相對獨立性的特點知識相對獨立就能降低模塊間的耦合度,減少模塊間的通信。也即使整個本體系統(tǒng)T中跨模塊的概念間關(guān)系的集合R′和跨模塊的約束集合σ′應(yīng)盡可能地小。與軟件工程中一樣,模塊間較小的耦合度能夠使得各個模塊易于重用和共享。
3)每個模塊與其有關(guān)系的模塊數(shù)盡量少減少相關(guān)的模塊數(shù)使得模塊間的依賴相對明晰,減少模塊間的復(fù)雜度。
根據(jù)模塊劃分的原則,汽車駕駛培訓(xùn)系統(tǒng)中,整個本體系統(tǒng)劃分為車輛結(jié)構(gòu)、駕駛技術(shù)、駕駛心理、生理醫(yī)學(xué)、交通法規(guī)五個模塊。這些模塊本身都是較為獨立的知識體系,其中駕駛心理模塊包含了大量的生理醫(yī)學(xué)和駕駛技術(shù)的知識,而汽車駕駛模塊則關(guān)系到車輛結(jié)構(gòu)模塊的知識,交通法規(guī)模塊關(guān)系到汽車駕駛模塊的知識。可以看出,生理醫(yī)學(xué)和車輛結(jié)構(gòu)模塊相對獨立,它并不調(diào)用其他模塊的領(lǐng)域知識。整個本體系統(tǒng)中,與模塊間知識的調(diào)用關(guān)系十分明晰。模塊及知識調(diào)用關(guān)系如圖1所示。這樣的領(lǐng)域模塊劃分也得到了領(lǐng)域?qū)<业恼J(rèn)可。
2推理方法庫
2.1推理方法與領(lǐng)域知識分離的知識推導(dǎo)方式
現(xiàn)在最常用的也是最簡單的本體推理方法,是在本體知識庫中定義一組邏輯公理或規(guī)則,借此新的事實可以由已有的事實中衍生出來。普通的推理引擎就可以基于這些規(guī)則(rules)或公理(axioms)得出結(jié)論,產(chǎn)生新的知識,最后解決一些簡單的問題。但這些規(guī)則和公理專適用于某一領(lǐng)域。另外規(guī)則常常潛藏隱含的過程性知識(如規(guī)則序、結(jié)合序),最終會影響引擎的實際運行。這些隱含的知識使規(guī)則庫不可靠,當(dāng)領(lǐng)域知識發(fā)展時難以更新[4]。
方法庫利用領(lǐng)域知識解決某種任務(wù)。一方面,方法庫為獲取本體模塊中的知識提供了查詢、推理的方法;另一方面,也為本體模塊中的知識提供了一個對外的接口,應(yīng)用程序能方便地通過它獲得模塊中的知識,而無須了解模塊中的內(nèi)部結(jié)構(gòu)。
使用獨立于本體知識庫的方法庫最大的優(yōu)點是減少了本體知識庫與推理機制之間的耦合度,大大加強了本體知識庫的可重用性和可共享性。另外,由于可通過專門的與領(lǐng)域知識庫的接口獲取知識庫中的現(xiàn)有知識,獨立的方法庫能夠方便地處理數(shù)據(jù),不用像設(shè)計規(guī)則、公理那樣考慮各種知識概念耦合的問題。
方法庫從領(lǐng)域知識抽象并分離出過程性知識,使系統(tǒng)的推理行為和系統(tǒng)中領(lǐng)域知識的任務(wù)清晰且易于更新。在領(lǐng)域知識庫中知識有所改變時,只要不涉及到過程性知識,那么方法庫就無須改動;同樣地,推理機制改變時,也只需要改變方法庫,領(lǐng)域知識庫可以不變。
2.2方法庫的組織
本體中模塊之間存在著通信,通信在模塊所對應(yīng)的方法庫中實現(xiàn)。但為了確保通信的有序性,使得系統(tǒng)易于管理,各個模塊的方法庫必須有一個良好的組織結(jié)構(gòu),規(guī)范方法之間知識的調(diào)用。
將模塊的方法庫設(shè)計成類似于軟件工程中包(package)的形式[5]。一個方法庫可以引入(import)一個或多個方法庫,但每個方法庫只能被一個方法庫直接引入,且不能出現(xiàn)循環(huán)引入的現(xiàn)象。這樣保證了不會出現(xiàn)方法的循環(huán)調(diào)用。為方法庫中的方法定義一個使用范圍屬性,這個屬性的值可以是public、protected或是private,即公開、受保護或是私有。當(dāng)此屬性值為public時,推理系統(tǒng)外的應(yīng)用任務(wù)及系統(tǒng)中各個方法庫中的方法都能夠調(diào)用此方法;若值是protected,則只有直接或間接引入此方法庫中的方法才能夠調(diào)用此方法;若值是private,則只有方法所在的方法庫中的其他方法有權(quán)調(diào)用此方法。
例如,通過駕駛員的駕駛狀態(tài)獲得駕駛員的個性化心理指標(biāo)。在此過程中,在駕駛心理學(xué)本體模塊方法庫中個性化心理指標(biāo)的查詢qd用方法fqd。fqd是范圍屬性,標(biāo)記為public的方法。在此方法中需要調(diào)用駕駛員情緒緊張度指標(biāo)(it)、心臟收縮機能(hc)、駕駛員駕駛操作指標(biāo)(dt)等一系列查詢。對情緒緊張度指標(biāo)的查詢qit由駕駛心理方法庫中的private方法fqit完成。這樣緊張度指標(biāo)對心理方法庫以外的方法來說就是不可見的,這就起到了知識隱藏的作用。心臟收縮機能的查詢qhc使用駕駛心理方法庫所引入的駕駛生理方法庫中的方法fqhc進行查詢。fqhc的范圍屬性被標(biāo)記為protected。這樣只有引入駕駛生理方法庫的方法庫或者是駕駛心理方法庫本身的方法才能夠調(diào)用此方法。而對駕駛員駕駛操作指標(biāo)的查詢qdt,則由駕駛技術(shù)方法庫中的方法fqdt來實現(xiàn)。注意駕駛技術(shù)方法庫并沒有被引入駕駛心理方法庫中,所以fqdt的范圍屬性是public。圖2詳細(xì)描述了各個方法的范圍屬性。
2.3方法的描述
方法庫中的方法分為原子方法和復(fù)合方法兩類。原子方法是不可再分的方法,可以直接被調(diào)用。復(fù)合方法是由若干個原子和復(fù)合方法構(gòu)成的方法。每個方法都有一個IPOE。IPOE是指inputs、outputs、preconditions、effects。Inputs和outputs是指方法的輸入和輸出,可以理解為數(shù)據(jù)的變換。Preconditions和effects是指方法的前提條件和效果,即方法執(zhí)行前應(yīng)該滿足的條件和服務(wù)執(zhí)行后實際產(chǎn)生的效果,它們都是約束,也就是方法執(zhí)行前所必須滿足的約束以及方法執(zhí)行后所產(chǎn)生的新的約束。一個復(fù)合方法還有一個controlConstruct定義。ControlConstruct定義了復(fù)合方法中每個子過程的執(zhí)行順序,這里使用OWL-S[6]中定義的控制流,有sequence、split、split+join、unordered、choice、if-then-else、iterate、repeat-until。
下面的例子是用OWL語言來描述的汽車動力學(xué)方法庫中獲取物體加速度的方法:
〈process:CompositeProcess rdf:ID=\"getAcceleration_Process\"〉
〈rdfs:label〉 This function is used to get the excitement of a particular driver〈/rdfs:label〉
〈process:composedOf〉
〈process:Sequence〉
〈process:hasSubProcess rdf:about=\"#GetObjectDetails\"/〉
〈process:hasSubProcess rdf:about=\"#GetForce\"/〉
〈process:hasSubProcess rdf:about=\"#ComputeAcceleration\"/〉
〈/process:Sequence〉
〈/process:composedOf〉
〈process:domain〉public〈/process:domain〉
〈/process:CompositeProcess〉
該方法由三個子方法組成,即GetObjectDetails、GetForce、ComputeForce,它們按照順序執(zhí)行。方法被標(biāo)志為public,它能被其他方法以及應(yīng)用程序調(diào)用。
下面是方法計算物體加速度的IPOE描述:
〈process:AtomicProcess rdf:ID=\"ComputeAcceleration\"〉
〈process:hasInput rdf:resource=\"#OuterForce_In\"/〉
〈process:hasInput rdf:resource=\"#ObjectMass_In\"/〉
〈process:hasOutput rdf:resource=\"#ObjectAcceleration_Out\"/〉
〈process:hasPreCondition rdf:resource=\"#NoCircumrotation\"/〉
〈/process:AtomicProcess〉
〈process:Input rdf:ID=\"OuterForce_In\"〉
〈process:parameterType rdf:resource=\"physicalconcepts#Force\"/〉
〈/process:Input〉
〈process:Input rdf:ID=\"ObjectMass_In\"〉
〈process:parameterType rdf:resource=\"physicalconcepts#Mass\"/〉
〈/process:UnConditionalOutput〉
〈process:Output rdf:ID=\"ObjectAcceleration_Out\"〉
〈process: parameterType rdf:resource=\"physicalconcepts#Accele ̄ration\"/〉
〈/process:UnConditionalEffect〉
ComputeAcceleration方法有兩個數(shù)據(jù)輸入,分別是物體所受外力outerAcceleration和物體質(zhì)量objectMass,有一個數(shù)據(jù)輸出(物體所受外力outerForce)。這個方法的執(zhí)行有一個前提條件noCircumrotation(無旋轉(zhuǎn)),它沒有任何的effect。
而后,指定computeAcceleration方法中涉及輸入/輸出數(shù)據(jù)的類型。這里acceleration、mass、force等概念都在汽車動力學(xué)本體模塊中定義。通過parameterType實現(xiàn)方法本體與領(lǐng)域知識本體的映射。
圖3是方法各個屬性的結(jié)構(gòu)圖。其中:bag是方法庫的URI;beinBag關(guān)系表示某個方法所在的方法庫;range則是方法的作用范圍屬性。這樣將方法庫中的方法也按照本體概念的形式加以描述,把方法本身作為一個資源,用各種關(guān)系的形式表示方法的輸入/輸出、在執(zhí)行前必須滿足的條件、調(diào)用后的影響等此方法的特性。這就用本體的方法使得應(yīng)用程序和其他方法能夠理解方法提供的服務(wù)。圖3中矩形表示的都是本體知識庫模塊中的資源。
3系統(tǒng)構(gòu)架
實際的應(yīng)用系統(tǒng)可分為三個層次:a)專業(yè)模型(傳統(tǒng)意義上的領(lǐng)域本體)層,它是關(guān)于某一領(lǐng)域知識的集合;b)方法層,它是執(zhí)行系統(tǒng)推導(dǎo)過程以完成任務(wù)的方法的集合,并且它實現(xiàn)每個本體模塊對其他模塊的查詢接口;c)任務(wù)層,它是系統(tǒng)必須具有的功能的集合。
其中最主要的是方法層。在任務(wù)處理方法庫層中,有一個針對系統(tǒng)外應(yīng)用任務(wù)的任務(wù)處理方法庫,所有模塊的方法庫都直接或間接引入該方法庫中,任務(wù)模塊的任務(wù)只能調(diào)用該方法庫中的方法。任務(wù)方法庫負(fù)責(zé)將具體的任務(wù)描述、分解,將一個任務(wù)轉(zhuǎn)換為多個本體模塊方法庫中的方法及其相互協(xié)作關(guān)系。接著任務(wù)處理方法庫調(diào)用模塊方法庫中的方法,運用這些模塊中的知識進行推理。當(dāng)推理遇到需要查詢基于其他本體模塊的知識時,可使用其他模塊中對其可見的方法fi進行查詢。每個本體模塊的方法庫可引入其他模塊方法庫中,但每個方法庫只能直接引入一個方法庫中,且不能循環(huán)引入,所有模塊的方法庫都直接或間接地引入任務(wù)處理方法庫中。這樣將各個模塊的方法庫組織成能夠引入其他方法庫的類似于包的關(guān)系,避免了傳統(tǒng)的直接引入本體知識庫的方法,使得各本體模塊之間的耦合度大大降低,本體模塊之間關(guān)系明晰,易維護性大大增強,也易于模塊的重用。因為每個模塊的方法庫相當(dāng)于知識適配器,在模塊知識發(fā)生改變時,只要不影響查詢的結(jié)構(gòu),方法庫就無須改變;而當(dāng)查詢要求改變時,無須改動知識庫的結(jié)構(gòu),只需將方法庫中的相應(yīng)方法改變即可。當(dāng)需要重用某個模塊時,由于所需要的查詢方法已在查詢庫中,知識模塊的對外接口十分明確,重用起來相當(dāng)方便。
可以看到,目前系統(tǒng)的模塊之間還是存在一定的耦合度。這主要體現(xiàn)在范圍屬性被標(biāo)志為public和protected的方法能夠被其他模塊的方法庫中的方法使用。特別是標(biāo)志為public的方法,由于它的存在,不僅使系統(tǒng)的復(fù)雜性增大,在分布式或大型本體的情況下系統(tǒng)的推理效率會受到極大的影響。針對這一點,系統(tǒng)可將每個模塊需要使用的其他模塊的知識通過其他模塊的方法查詢后所得到的結(jié)果保存在本模塊的方法庫中,作為本模塊本地的知識,這樣就真正實現(xiàn)了模塊內(nèi)推理[4]。但這種編輯映射并將結(jié)果加入到模塊中的方法對本體模塊的修改十分敏感。當(dāng)查詢被編輯完成后,推理的正確性只能在被查詢的模塊結(jié)構(gòu)不改變的情況下才能被保證。另一方面,并不是每一次模塊結(jié)構(gòu)的改變都會影響接口的編輯結(jié)果,只有在查詢中使用到的概念發(fā)生改變或是包含查詢的類的結(jié)構(gòu)發(fā)生變化時問題才會出現(xiàn)。在后一種情況下必須重新編輯接口;而在前一種情況下,可能需要考慮重新定義查詢。為了決定編輯的公理是否繼續(xù)有效,可以采取一種修改偵察機制,它基于一種對本體的修改的分類。這種分類的因素包括修改對類的組織結(jié)構(gòu)的影響,及所影響的類在類結(jié)構(gòu)中的位置。還可以采用一個表示本體模塊之間依賴關(guān)系的清晰的表達(dá)方式,從而能在需要時很容易地通知系統(tǒng)的相關(guān)部分某個模塊已經(jīng)改變,從而作出相應(yīng)的改變。
4結(jié)束語
本文模塊化的本體系統(tǒng)具有以下優(yōu)勢:
a)模塊化使得開發(fā)時分工明確。在本體特別是大型本體的開發(fā)過程需要不同領(lǐng)域的專家所組成的團隊協(xié)作,每個參與團隊只負(fù)責(zé)本體一小部分的構(gòu)建[7]。模塊化后,這樣的工作得到了規(guī)范,每個人的職責(zé)也明確了,從而每個人的構(gòu)建成果易于集成,開發(fā)成本和效率因此提高。
b)模塊化降低了系統(tǒng)的復(fù)雜度。每個模塊內(nèi)只存在模塊內(nèi)概念間的關(guān)系,可以簡化模塊設(shè)計和模塊維護。一個模塊與另一個模塊的通信通過方法庫實現(xiàn),模塊間的耦合度比較小,容易在不改變對外接口的情況下改變模塊內(nèi)部的知識。這樣更新維護十分方便。
c)模塊化易于系統(tǒng)的共享和重用。由于在本體重用時往往只需要重用其中的一部分,而系統(tǒng)的每個模塊都是一個比較完整的理論體系,系統(tǒng)中的每個模塊都能夠被單獨重用。每個本體模塊的方法庫與知識庫獨立,在知識庫不變的情況下重新設(shè)計方法庫就能夠適應(yīng)新的應(yīng)用需求,為模塊的共享和重用提供了有利的保證。
d)本體雖然是為了達(dá)到知識共享目的,但在實際應(yīng)用中可能出于隱私或安全性的考慮或是為了管理上的方便,會選擇性地隱藏本體中一些部分。運用模塊化技術(shù),方法庫中方法的范圍屬性較好地解決了這一問題。
與軟件工程的模塊化相比,本體知識庫的模塊化顯得相當(dāng)不成熟,還有許多需要解決的問題。該方法只是在汽車駕駛培訓(xùn)領(lǐng)域的本體知識庫構(gòu)建中得到應(yīng)用。目前系統(tǒng)還有一些問題沒有得到很好的解決,如各模塊間若存在意義上有重疊的概念如何進行映射,如何在某一模塊更新后其他模塊作相應(yīng)的改變等,在以后的工作中還將繼續(xù)優(yōu)化。
參考文獻:
[1]鄧志鴻,唐世渭,張銘,等.Ontology研究綜述[J].北京大學(xué)學(xué)報:自然科學(xué)版,2002,38(5):24-27.
[2]NOY N, HAFNER C. The state of the art in ontology design[J]. AI Magazine, 1997,18(3):53-74.
[3]SMITH M K.OWL Web ontology language guide[K/OL].http://www.w3.org/TR/2004/REC-owl-guide-20040210.
[4]CRUBZY M, PINCUS Z, MUSEN M A. Mediating knowledge between application components[C]//Proc of the Semantic Integration Workshop of the 2nd International Semantic Web Conference, Sanibel Island, Florida:[s.n.], 2003.
[5]BAO Jie, CARAGEA D, HONAVAR V. Towards collaborative environments for ontology construction and sharing[C]//Proc of International Symposium on Collaborative Technologies and Systems. Las Vegas, Nevada:[s.n.], 2006:99-108.
[6]MARTIN D. OWL-S: semantic markup for Web services[EB/OL].http://www.daml.org/services/owl-s/1.1/.
[7]STUCKENSCHMIDT H, KLEIN M. Modularization of ontologies wonderWeb: ontology infrastructure for the semantic Web[EB/OL].http://wonderweb.semanticweb.org/ deliverables/documents/D21.pdf.
“本文中所涉及到的圖表、注解、公式等內(nèi)容請以PDF格式閱讀原文”