朱淑媛 羅 軍
(重慶大學(xué)計(jì)算機(jī)學(xué)院 重慶 400044)
隨著信息時(shí)代技術(shù)的發(fā)展,人們?cè)絹?lái)越習(xí)慣在互聯(lián)網(wǎng)上獲取各種各樣的信息。傳統(tǒng)的搜索引擎,用戶只能基于關(guān)鍵詞進(jìn)行檢索,這并不能充分表達(dá)用戶的搜索意圖;對(duì)不熟悉專業(yè)領(lǐng)域的業(yè)余人員在詢問(wèn)他們感興趣的領(lǐng)域問(wèn)題時(shí),往往也很難精準(zhǔn)描述領(lǐng)域?qū)I(yè)術(shù)語(yǔ)導(dǎo)致關(guān)鍵詞匹配失敗。基于關(guān)鍵詞匹配檢索返回的候選結(jié)果也難做到問(wèn)題和答案的相關(guān)度吻合。用戶要從大量的候選結(jié)果中定位目標(biāo)結(jié)果,這種方式的準(zhǔn)確率和召回率往往很低,用戶體驗(yàn)較差。因此,自動(dòng)問(wèn)答系統(tǒng)應(yīng)運(yùn)而生。自動(dòng)問(wèn)答系統(tǒng)(Automatic Question and Answering System),簡(jiǎn)稱問(wèn)答系統(tǒng)(QA),是指接受用戶以自然語(yǔ)言形式描述的提問(wèn),并從大量的異構(gòu)數(shù)據(jù)中查找出能回答該提問(wèn)的準(zhǔn)確、簡(jiǎn)潔答案,并非相關(guān)文檔的信息檢索系統(tǒng)[1]。
目前,研究問(wèn)答系統(tǒng)的文獻(xiàn)有很多。已被廣泛使用的問(wèn)答系統(tǒng)大部分基于FAQ(常見(jiàn)問(wèn)題及答案庫(kù)),采用基于字符串匹配的方法[2-4],這種方法一般不考慮語(yǔ)義因素。針對(duì)語(yǔ)義的問(wèn)答系統(tǒng)(SQA)[5-7],運(yùn)用自然語(yǔ)言處理技術(shù)(NLP),借助信息檢索(IR)從網(wǎng)絡(luò)中檢索答案成為了研究熱點(diǎn)。基于語(yǔ)義的問(wèn)答彌補(bǔ)了關(guān)鍵詞匹配不到的不足,通過(guò)運(yùn)用關(guān)鍵詞的語(yǔ)義相識(shí)度模型(如wordnet等)進(jìn)行語(yǔ)義相識(shí)度查詢擴(kuò)展,大大提高了問(wèn)答回答的召回率,使得用戶可以從掌握他們想要查詢領(lǐng)域的特定詞匯的需求中解放出來(lái)。
不幸的是,隨著開(kāi)發(fā)數(shù)據(jù)鏈接(linked open data)的發(fā)展,互聯(lián)網(wǎng)散落了大量異構(gòu)的知識(shí)元數(shù)據(jù)沒(méi)有得到高效的組織管理,鏈接的數(shù)據(jù)云已經(jīng)從Web上構(gòu)建了數(shù)十億個(gè)事實(shí)。如此龐大的數(shù)據(jù)量使要訪問(wèn)給定的所需信息變得復(fù)雜,導(dǎo)致SQA問(wèn)答的研究受知識(shí)庫(kù)表達(dá)的限制。本體是一種能在語(yǔ)義和知識(shí)層次上描述知識(shí)信息的概念模型,通過(guò)概念和關(guān)系的抽取,把互聯(lián)網(wǎng)文本內(nèi)容組織成為結(jié)構(gòu)化的以實(shí)體為基本語(yǔ)義單元的圖結(jié)構(gòu),圖上的邊表示實(shí)體之間語(yǔ)義關(guān)系[8]。近年來(lái),本體在概念的抽取、表示、融合、推理、問(wèn)答等關(guān)鍵問(wèn)題上得到了一定的解決和突破。通過(guò)構(gòu)建領(lǐng)域本體知識(shí)庫(kù)來(lái)管理互聯(lián)網(wǎng)上的語(yǔ)義元元素,不僅保證了查詢的語(yǔ)義關(guān)聯(lián),同時(shí)利用本體的一致性原則對(duì)領(lǐng)域知識(shí)做明確規(guī)范,可以避免Web知識(shí)庫(kù)中大量冗余的原始數(shù)據(jù),優(yōu)化查詢的時(shí)間消耗。因此我們可以通過(guò)研究自然語(yǔ)言問(wèn)題到本體知識(shí)庫(kù)的映射,實(shí)現(xiàn)面向結(jié)構(gòu)化網(wǎng)絡(luò)的問(wèn)答系統(tǒng)。但由于自然語(yǔ)言問(wèn)題文法結(jié)構(gòu)的復(fù)雜性,要完成問(wèn)題在知識(shí)本體上的查詢、匹配、推理等操作還面臨很多挑戰(zhàn)。需要解決的有兩個(gè)核心問(wèn)題。第一個(gè)是如何理解問(wèn)題語(yǔ)義,并用計(jì)算機(jī)可以接受的形式進(jìn)行表示。問(wèn)題詞匯和概念之間存在“詞匯鴻溝”,一個(gè)概念可有多個(gè)描述詞,例如,hypertension和高血壓有著相同的語(yǔ)義,同一語(yǔ)義的問(wèn)題也存在多種提問(wèn)句式。這些都給問(wèn)題的理解帶來(lái)困難。第二個(gè)是如何在理解問(wèn)題的基礎(chǔ)上把問(wèn)題轉(zhuǎn)化為結(jié)構(gòu)化的查詢語(yǔ)句SWRL、SPARQL等。目前主流的基于深度學(xué)習(xí)的QA系統(tǒng)可以把傳統(tǒng)的問(wèn)句語(yǔ)義解析、文本檢索、答案抽取與生成的復(fù)雜步驟轉(zhuǎn)變?yōu)橐粋€(gè)可學(xué)習(xí)的過(guò)程[9-10]。這種學(xué)習(xí)生成的方式雖然取得了一定的效果,但由于方法依賴大量的訓(xùn)練語(yǔ)料,且多是針對(duì)語(yǔ)義層次單一的問(wèn)題設(shè)計(jì)的,對(duì)于復(fù)雜問(wèn)題的回答能力尚且不足。目前,針對(duì)語(yǔ)義層次復(fù)雜的問(wèn)題,另外一種主流方法是通過(guò)語(yǔ)義分析,運(yùn)用范疇語(yǔ)法(Category CompositionalGrammar,CCG)以及依存組合語(yǔ)法(Dependency-based Compositional Semantics,DCS)等將用戶的自然語(yǔ)言問(wèn)句轉(zhuǎn)化成結(jié)構(gòu)化的語(yǔ)義表示[11-12]。針對(duì)中文的漢語(yǔ)框架網(wǎng)(Chinese FrameNet,CFN)[13]就是山西大學(xué)運(yùn)用根據(jù)漢語(yǔ)語(yǔ)法規(guī)則在Fillmore的框架語(yǔ)義學(xué)理論基礎(chǔ)上參照加州大學(xué)伯克利的FrameNet構(gòu)建的漢語(yǔ)詞匯語(yǔ)義框架知識(shí)庫(kù)。該框架由框架元素、詞元和句子三部分組成??蚣茉赜脕?lái)標(biāo)識(shí)語(yǔ)義角色;詞元記錄框架涉及的相關(guān)詞語(yǔ);句子記錄用框架標(biāo)注好語(yǔ)義信息的句子。受李茹等[14]用CFN來(lái)解析旅游領(lǐng)域問(wèn)題語(yǔ)義結(jié)構(gòu)的啟發(fā),本文在此基礎(chǔ)上進(jìn)行改進(jìn),結(jié)合CFN漢語(yǔ)框架網(wǎng),給出從領(lǐng)域知識(shí)本體直接生成能理解問(wèn)題語(yǔ)義的QFN問(wèn)題框架本體的映射算法用來(lái)解析問(wèn)題語(yǔ)義。
由于近幾年人工智能及精準(zhǔn)醫(yī)療、智慧醫(yī)療的提出,醫(yī)學(xué)知識(shí)本體應(yīng)用正受到國(guó)內(nèi)外企業(yè)、學(xué)界的廣泛關(guān)注,目前的醫(yī)學(xué)知識(shí)本體庫(kù)有:醫(yī)學(xué)概念知識(shí)庫(kù)LinkBase、TAMBIS本體庫(kù)(TaO)等。人工構(gòu)建的醫(yī)學(xué)知識(shí)庫(kù)本體如包括臨床醫(yī)學(xué)知識(shí)庫(kù)、SNOMED-CT、ICD-10以及用CHV和SNOMED-CT兩個(gè)醫(yī)學(xué)詞典自動(dòng)構(gòu)建醫(yī)學(xué)知識(shí)庫(kù)的典型例子一體化醫(yī)學(xué)語(yǔ)言系統(tǒng)UMLS也得到了不錯(cuò)的實(shí)驗(yàn)結(jié)果[15]。利用這些醫(yī)學(xué)知識(shí)本體進(jìn)行自動(dòng)問(wèn)答,有望帶來(lái)更廉價(jià)、高效、精準(zhǔn)的醫(yī)療建議和診斷。因此,本研究將以醫(yī)療領(lǐng)域作為實(shí)例,通過(guò)重構(gòu)已有的醫(yī)學(xué)知識(shí)本體,分析基于醫(yī)療領(lǐng)域的本體自動(dòng)問(wèn)答系統(tǒng)來(lái)論證方法的有效性。
問(wèn)題到本體映射的最終目的是通過(guò)重構(gòu)原始問(wèn)題來(lái)理解問(wèn)題的語(yǔ)義。由于本體知識(shí)庫(kù)的知識(shí)組織是由基本元素(包括類、實(shí)例、對(duì)象屬性、數(shù)據(jù)屬性)組成,而自然語(yǔ)言描述體系的語(yǔ)法結(jié)構(gòu)是由詞進(jìn)行表達(dá)的。因此,問(wèn)題到本體的映射需要各種各樣的自然語(yǔ)言處理技術(shù)。本文采用的映射過(guò)程大致可分為命名實(shí)體標(biāo)注和QFN語(yǔ)義解析兩部分。圖1是問(wèn)題映射到本體的命名實(shí)體標(biāo)注過(guò)程。對(duì)輸入的自然語(yǔ)言問(wèn)題首先通過(guò)分詞,詞性識(shí)別,關(guān)鍵詞抽取等NLP技術(shù)獲得一系列的詞(Word)。然后對(duì)詞的語(yǔ)義屬性添加實(shí)體(Entity)標(biāo)注信息,如開(kāi)放域?qū)傩匀嗣⒌孛?、?shù)字、日期,領(lǐng)域?qū)傩约膊∶⑺幤访?、治療方式等,以及利用本體的語(yǔ)義結(jié)構(gòu)擴(kuò)展的同義詞,等價(jià)詞,父子概念等標(biāo)注信息。接下來(lái)再對(duì)重構(gòu)問(wèn)題進(jìn)行問(wèn)題在語(yǔ)義層次的理解。
圖1 問(wèn)句命名實(shí)體標(biāo)注過(guò)程
用命名實(shí)體的識(shí)別通常運(yùn)用詞林的規(guī)則匹配,如英文詞林WordNet,中文的哈工大同義詞詞林等。但詞林詞典的結(jié)構(gòu)往往龐大且缺乏針對(duì)特定領(lǐng)域的專業(yè)術(shù)語(yǔ)詞匯[16],在限定領(lǐng)域內(nèi)進(jìn)行實(shí)體識(shí)別顯然是不合適的。本文在進(jìn)行命名實(shí)體識(shí)別的過(guò)程中在傳統(tǒng)基于詞林的實(shí)體識(shí)別上引入本體自身天然的對(duì)領(lǐng)域內(nèi)相關(guān)概念和概念之間關(guān)系具有描述特性,在醫(yī)學(xué)本體中,加入如圖2所示的實(shí)體匹配詞典。
圖2 醫(yī)學(xué)本體內(nèi)實(shí)體匹配詞典
實(shí)體匹配詞典從領(lǐng)域本體中挖掘所有的概念(實(shí)體)作為最小語(yǔ)義單位,生成概念庫(kù)。每個(gè)概念對(duì)應(yīng)一個(gè)描述該概念的術(shù)語(yǔ)集合。例如,高血壓是領(lǐng)域本體里一個(gè)概念,它可以用術(shù)語(yǔ)集合高血壓、high blood pressure和hypertension表示。
考慮術(shù)語(yǔ)集合中的元素通常由一個(gè)詞或多個(gè)詞組成,單個(gè)詞就是自然的索引詞,而術(shù)語(yǔ)中的一些知識(shí)成分,如大部分屬性的術(shù)語(yǔ)集合通常是一個(gè)比較完整的自然語(yǔ)言片段。本文通過(guò)在問(wèn)題的自然語(yǔ)言描述詞、領(lǐng)域本體的術(shù)語(yǔ)集合、術(shù)語(yǔ)對(duì)應(yīng)的概念之間建立索引,構(gòu)建如圖3所示的問(wèn)題到實(shí)體映射的鏈?zhǔn)綌?shù)據(jù)結(jié)構(gòu),用于標(biāo)注問(wèn)題中領(lǐng)域命名實(shí)體。
圖3 實(shí)體映射的鏈?zhǔn)綌?shù)據(jù)結(jié)構(gòu)
算法1具體描述了從自然語(yǔ)言問(wèn)句中標(biāo)注領(lǐng)域命名實(shí)體的方法。
算法1問(wèn)句標(biāo)注領(lǐng)域命名實(shí)體的方法
輸入:醫(yī)學(xué)本體,自然語(yǔ)言問(wèn)題。
輸出:已標(biāo)注領(lǐng)域命名實(shí)體的問(wèn)題。
1) 借助Jena解析醫(yī)學(xué)本體。
(1) 提取類概念,屬性概念,實(shí)例概念加入到領(lǐng)域本體圖2中的“概念”類。
(2) 將“概念”類中的每個(gè)概念的實(shí)例的同義詞,等價(jià)詞生成領(lǐng)域本體圖2中的“術(shù)語(yǔ)”類。
(3) 添加屬性關(guān)系<有對(duì)應(yīng)術(shù)語(yǔ)>連接概念類和術(shù)語(yǔ)類中的實(shí)例。
2) 對(duì)術(shù)語(yǔ)類下的每個(gè)實(shí)例:根據(jù)命名規(guī)則,采用中科院的分詞工具(ICTCLAS)分詞生成索引圖(3)所示的索引詞Indexword。
3) 同2)中規(guī)則,將自然語(yǔ)言問(wèn)句分詞生成一系列詞序列Q(Q-word1,Q-word2,…,Q-wordn)。通過(guò)索引詞在Question→Index word→Term table→Concept table流動(dòng)。將問(wèn)句的關(guān)鍵詞標(biāo)注為本體知識(shí)庫(kù)中醫(yī)學(xué)領(lǐng)域命名實(shí)體。
CFN語(yǔ)義網(wǎng)絡(luò)解析問(wèn)題框架結(jié)構(gòu)[14]的思路是對(duì)一個(gè)問(wèn)題,獲取RDF三元組,即提取問(wèn)題的語(yǔ)義謂詞以及對(duì)應(yīng)的主體和客體。例如文獻(xiàn)[14]提到的用“[到達(dá)/Arriving框架]”來(lái)解析例句“駕車從太原到五臺(tái)山怎樣走最近?”,給出如圖4所示的到達(dá)框架結(jié)構(gòu)。根據(jù)CFN標(biāo)注結(jié)果為:“
架名到達(dá)定義指轉(zhuǎn)移體朝目的地方向的移動(dòng)。目的地可直接表達(dá)出來(lái),或從上下文中得到理解,動(dòng)詞本身隱含目標(biāo)之義核心框架元素:目的地[Goal]目的地表現(xiàn)的是轉(zhuǎn)移體運(yùn)動(dòng)終止之地,或行將終止之地轉(zhuǎn)移體[Thm]轉(zhuǎn)移體指移動(dòng)的物體非核心框架元素:并行轉(zhuǎn)移體[Thm_c]并行轉(zhuǎn)移體指除轉(zhuǎn)移體以外的其他移動(dòng)的物體形容[Dep]形容指用來(lái)描寫轉(zhuǎn)移體到達(dá)的狀態(tài)目的地狀態(tài)[G_c]轉(zhuǎn)移體到達(dá)目的地時(shí)目的地所呈現(xiàn)出的狀態(tài)修飾[Manr]表現(xiàn)修飾的話語(yǔ)用于對(duì)動(dòng)作特性的描述,用來(lái)描述運(yùn)動(dòng)的速度、姿態(tài)以及其他情況方法[Mns]用于表現(xiàn)轉(zhuǎn)移體到達(dá)的方式傳送模式[MoT]傳送模式指作用于主體的運(yùn)動(dòng)模式,通過(guò)傳送主體的主體身體或交通工具而實(shí)現(xiàn)軌道[Path]軌道指運(yùn)動(dòng)的軌道,既非源點(diǎn),也非目的地源點(diǎn)[Src]源點(diǎn)即明確表達(dá)運(yùn)動(dòng)的出發(fā)點(diǎn),該框架中出現(xiàn)表達(dá)源點(diǎn)的用語(yǔ)是可能的,但出現(xiàn)的頻率卻相對(duì)不高時(shí)間[Time]該框架元素表現(xiàn)到達(dá)這一動(dòng)作出現(xiàn)的時(shí)間詞元到達(dá)v,來(lái)到v,進(jìn)入v,抵達(dá)v,返回v,走到v,走進(jìn)v,趕到v,回來(lái)v,歸來(lái)v,到v,回到v
圖4 CFN中“到達(dá)”框架結(jié)構(gòu)
本文提出的QFN是在傳統(tǒng)的CFN上,把領(lǐng)域本體的語(yǔ)義結(jié)構(gòu)提取出來(lái),構(gòu)建的一個(gè)帶有語(yǔ)義關(guān)聯(lián)的問(wèn)題框架網(wǎng),這個(gè)框架網(wǎng)絡(luò)又是利用本體來(lái)管理和維護(hù)的。圖5是根據(jù)CFN框架網(wǎng)絡(luò)和本體元素的語(yǔ)義關(guān)聯(lián)構(gòu)建的一個(gè)QFN本體模型。
圖5 問(wèn)題框架本體結(jié)構(gòu)
框架名類定義的查詢問(wèn)題的框架,詞元類是和該框架相關(guān)的字、詞表達(dá),用來(lái)作為特征識(shí)別問(wèn)題對(duì)應(yīng)的框架。Slot類是CFN中‘框架元素’的等價(jià)類,Value類是CFN中‘詞元’的等價(jià)類。Type類存放實(shí)例、屬性、類三個(gè)實(shí)例,關(guān)聯(lián)領(lǐng)域本體知識(shí)庫(kù)對(duì)應(yīng)元素即Value值所屬的類別。句子庫(kù)類描述從領(lǐng)域本體知識(shí)庫(kù)中抽取的與框架相關(guān)的RDF三元組關(guān)系。QFN本體的映射可以用圖6描述。
圖6 領(lǐng)域本體到框架元素的映射算法
圖6左邊是傳統(tǒng)CFN框架網(wǎng)絡(luò)的結(jié)構(gòu),右邊是領(lǐng)域本體的結(jié)構(gòu)。從領(lǐng)域本體到傳統(tǒng)CFN框架的映射算法具體描述如算法2。通過(guò)該映射算法,可以根據(jù)領(lǐng)域知識(shí)庫(kù)自動(dòng)生成該領(lǐng)域下的QFN框架結(jié)構(gòu)用于問(wèn)題結(jié)構(gòu)的解析。當(dāng)領(lǐng)域本體信息更新的同時(shí),系統(tǒng)可以自動(dòng)檢測(cè)并更新QFN框架。
算法2領(lǐng)域本體到框架元素的映射算法
輸入:領(lǐng)域本體,傳統(tǒng)CFN框架結(jié)構(gòu)。
輸出:圖6所示的框架名和Slot槽之間的關(guān)聯(lián)關(guān)系。
算法步驟:
Begin
1:For each Individual框架名屬于Class框架名do
2:根據(jù)框架名的實(shí)例在領(lǐng)域本體中映射到對(duì)應(yīng)的知識(shí)類元素。完成Individual框架名到本體類元素的映射,得到映射類C1~Ck
3:For類Ci在領(lǐng)域本體中已存在的屬性P1~Pk do
4:識(shí)別屬性pj關(guān)聯(lián)的主體Sij和客體Oij。作為實(shí)例加入到Slot類。
5:在框架名和Slot槽之間添加對(duì)應(yīng)的has slot關(guān)聯(lián):
6:將領(lǐng)域本體Sij類和Oij類的下的所有Individual添加到Value類。
7:For Ik in Sij添加對(duì)應(yīng)的has Value關(guān)聯(lián)
8:end for
9:For Ik in Sij添加對(duì)應(yīng)的has Value關(guān)聯(lián)
10:end For
11:end For
12:在句子庫(kù)中加入模式(
13:end For
End
表1以“診斷”框架為例,描述了從領(lǐng)域知識(shí)本體中自動(dòng)生成的QFN框架的框架內(nèi)容的過(guò)程。
表1 診斷的QFN框架本體的框架結(jié)構(gòu)
如問(wèn)句“繼發(fā)性高血壓/去/醫(yī)院/要做/哪些/檢查/?”經(jīng)過(guò)命名實(shí)體識(shí)別可以得到(繼發(fā)性高血壓,疾病類,實(shí)例)/(醫(yī)院類,類)/(實(shí)驗(yàn)室檢查,物理檢查,病癥檢查,類)。根據(jù)QFN進(jìn)行標(biāo)注,計(jì)算框架語(yǔ)義相似得到如下結(jié)果:
dis_top1:診斷框架
涉及相關(guān)RDF句子庫(kù)topk:<[solt=疾病value=繼發(fā)性高血壓 type=實(shí)例],[患病實(shí)驗(yàn)室檢查 type=屬性],[slot=實(shí)驗(yàn)室檢查 value=null type=實(shí)例]>
<[solt=疾病 value=繼發(fā)性高血壓 type=實(shí)例],[患病病癥檢查 type=屬性],[slot=病癥檢查 value=null type=實(shí)例]>
<[solt=疾病 value=繼發(fā)性高血壓 type=實(shí)例],[患病物理檢查 type=屬性],[slot=物理檢查 value=null type=實(shí)例]>
……
SPARQL是為RDF數(shù)據(jù)模型定義的查詢語(yǔ)言和數(shù)據(jù)獲取協(xié)議[17]。對(duì)產(chǎn)生單一關(guān)系的問(wèn)句,基于QFN框架,在解析出的RDF三元組上,只要分析出這個(gè)問(wèn)句中所有已知和未知的成分信息,構(gòu)建簡(jiǎn)單SPARQL查詢語(yǔ)句,并且這些信息能夠在領(lǐng)域本體知識(shí)庫(kù)中做出相應(yīng)的解釋,那么就可以認(rèn)為這個(gè)領(lǐng)域問(wèn)句被理解了。
對(duì)包含多個(gè)關(guān)系的復(fù)雜問(wèn)句,本文分解RDF查詢語(yǔ)義圖,分別構(gòu)建SPARQL查詢語(yǔ)句。這里分為兩種情況:(1) 并列關(guān)系:提取關(guān)系之間是并列的關(guān)系,即屬性節(jié)點(diǎn)位于查詢語(yǔ)義圖同一層次。此時(shí),分別輸出各關(guān)系的查詢語(yǔ)句。(2) 嵌套關(guān)系:關(guān)系與關(guān)系分別處于查詢語(yǔ)義圖的不同層次。此時(shí),從低層次到高層次根據(jù)屬性的層次關(guān)系,依次組裝SPARQL查詢語(yǔ)句。
對(duì)于一個(gè)復(fù)雜的SPARQL查詢Q(G,S,F(xiàn)):本文給出如下定義:
Q(G,S,F(xiàn))表示一組簡(jiǎn)單SPARQL查詢的集合。其中G={G1,G2,…,Gn}是基礎(chǔ)RDF三元組生成的語(yǔ)義查詢圖。S={S1,S2,…,Sn}是一組SELECT或者ASK頭集合。F={f1,f2,…,fn}是一組過(guò)濾表達(dá)式。輸入一個(gè)復(fù)雜查詢Q,此時(shí),從圖G的葉子結(jié)點(diǎn)開(kāi)始遍歷,遇到非NULL的節(jié)點(diǎn),用filter表達(dá)式把節(jié)點(diǎn)的值作SPARQL查詢的限制條件;遇到NULL節(jié)點(diǎn),加入SELECT頭作為SPARQL查詢的查詢返回信息。通過(guò)在語(yǔ)義查詢圖上對(duì)路徑上所有節(jié)點(diǎn)的遍歷,我們可以構(gòu)造一個(gè)等價(jià)的SPARQL查詢語(yǔ)句。
算法3給出由查詢語(yǔ)義圖生成SPARQL語(yǔ)句的程序流程。
算法3查詢語(yǔ)義圖生成SPARQL語(yǔ)句
輸入:<[solt=* value=* type=*],[relation type=*],[slot=* value=* type=*]>
輸出:對(duì)應(yīng)RDF結(jié)構(gòu)的SPARQL查詢語(yǔ)句。
拼裝SPARQL語(yǔ)句
1) 組合Select語(yǔ)句
queryStry="Select";
for(遍歷所有未知信息實(shí)例節(jié)點(diǎn)){
queryStr.append(?variable)
}
2) 組合查詢條件語(yǔ)句
queryStr.append("Where{"};
for(遍歷QFN解析出的該問(wèn)題的RDF屬性節(jié)點(diǎn)Relation){
queryStr.append(?Domain)
queryStr.append(Relation)
queryStr.append(?Ranage)
}
3) Filter過(guò)濾語(yǔ)句
queryStr.append("filter(");
for(遍歷所有實(shí)例變量){
queryStr.append(?Domain=′value′)
queryStr.append(?Ranage=′value′)
}
queryStr.append(")}")
表2分別列舉了陳述型和布爾型問(wèn)題自動(dòng)生成SPATQL語(yǔ)句的流程。
表2 醫(yī)療問(wèn)題分析-例子
為驗(yàn)證本文提出系統(tǒng)的可行性,根據(jù)上述設(shè)計(jì)方案,采用Eclipse+Protégé+Jena實(shí)現(xiàn)了一個(gè)基于醫(yī)療領(lǐng)域本體的自動(dòng)問(wèn)答實(shí)驗(yàn)系統(tǒng)。系統(tǒng)主要模塊包括問(wèn)題預(yù)處理、命名實(shí)體識(shí)別、QFN解析、SPARQL語(yǔ)句生成以及答案抽取。系統(tǒng)架構(gòu)如圖7所示。
圖7 基于本體的自動(dòng)問(wèn)答系統(tǒng)架構(gòu)
實(shí)驗(yàn)領(lǐng)域本體抽取SNOMED-CT[18]醫(yī)學(xué)本體的部分信息,運(yùn)用斯坦福大學(xué)提出的本體構(gòu)建七步法[19],從領(lǐng)域本體的概念出發(fā),在MeSH醫(yī)學(xué)主題詞表首先抽取醫(yī)學(xué)領(lǐng)域中以疾病、個(gè)體、藥品、醫(yī)院四個(gè)概念的層次概念和實(shí)例,并確定領(lǐng)域本體中概念間的等級(jí)關(guān)系。再根據(jù)醫(yī)學(xué)中的關(guān)鍵要素從個(gè)體屬性、疾病屬性、藥品屬性、醫(yī)院屬性四個(gè)核心屬性抽取關(guān)于疾病、醫(yī)院、藥品、個(gè)體之間的醫(yī)學(xué)聯(lián)系,添加概念與概念的關(guān)系。在已經(jīng)重構(gòu)好的本體結(jié)構(gòu)上,再?gòu)腁醫(yī)藥網(wǎng)用Scrapy框架與正則表達(dá)式結(jié)合爬取相關(guān)概念的實(shí)例豐富本體知識(shí)庫(kù)。重構(gòu)的醫(yī)學(xué)本體核心結(jié)構(gòu)如圖8所示。
圖8 醫(yī)學(xué)領(lǐng)域本體部分結(jié)構(gòu)
測(cè)試問(wèn)題數(shù)據(jù)來(lái)自A+醫(yī)藥網(wǎng)中篩選的400個(gè)涵蓋不同類別的問(wèn)題。對(duì)比圖9從本系統(tǒng)得到的問(wèn)題回答效果和圖10從百度知道問(wèn)答中檢索出的答案可以看出:本系統(tǒng)是從理解問(wèn)題語(yǔ)義的角度給出的針對(duì)問(wèn)題問(wèn)點(diǎn)的相對(duì)準(zhǔn)確的答案。
圖9 本系統(tǒng)給出的問(wèn)題答案
圖10 百度知道檢索結(jié)果
為了定量分析系統(tǒng)的效果,實(shí)驗(yàn)用召回率、準(zhǔn)確率和F值三個(gè)指標(biāo)進(jìn)行系統(tǒng)性能的分析。性能指標(biāo)定義如下:
P=(Pnum×100% )/Rnum
(1)
R=(Pnum×100% )/Anum
(2)
F=2×P×R/(P+R)
(3)
式中:P表示準(zhǔn)確率,R表示召回率,Pnum是給出回答的問(wèn)題中準(zhǔn)確回答的問(wèn)題數(shù),Rnum是測(cè)試問(wèn)題中給出答案的問(wèn)題數(shù),Anum是用來(lái)測(cè)試的問(wèn)題數(shù)。
實(shí)驗(yàn)一問(wèn)題語(yǔ)義解析的情況分析。表3是用QFN對(duì)醫(yī)學(xué)領(lǐng)域4個(gè)主要類別的問(wèn)題解析情況的結(jié)果。
實(shí)驗(yàn)二問(wèn)題回答結(jié)果的準(zhǔn)確率分析。和實(shí)驗(yàn)一采用相同的數(shù)據(jù),為了避免QFN解析問(wèn)題結(jié)構(gòu)失敗導(dǎo)致實(shí)驗(yàn)結(jié)果的偏差,實(shí)驗(yàn)二在實(shí)驗(yàn)一的基礎(chǔ)上,用已經(jīng)解析出QFN框架結(jié)構(gòu)的問(wèn)題,分析問(wèn)題回答的準(zhǔn)確性。實(shí)驗(yàn)結(jié)果如表4所示。
表4 問(wèn)題集測(cè)試結(jié)果
從實(shí)驗(yàn)數(shù)據(jù)分析,對(duì)問(wèn)題集中的所有問(wèn)題,sparql語(yǔ)句的生成率達(dá)到了90.07%,說(shuō)明該方法能夠準(zhǔn)確識(shí)別問(wèn)題中的命名實(shí)體,并生成相關(guān)SPARQL語(yǔ)句。但平均F值和開(kāi)放領(lǐng)域TREC[20]的結(jié)果相比沒(méi)有很大的提升。進(jìn)一步分析實(shí)驗(yàn)中找不到答案和錯(cuò)誤回答的問(wèn)題,影響實(shí)驗(yàn)一QFN識(shí)別的原因主要是實(shí)驗(yàn)系統(tǒng)構(gòu)建的領(lǐng)域本體知識(shí)的缺失,在進(jìn)一步的實(shí)驗(yàn)中已驗(yàn)證通過(guò)豐富本體知識(shí)可以提高系統(tǒng)的可用性。實(shí)驗(yàn)二中對(duì)QFN正確解析的問(wèn)題生成sparql查詢語(yǔ)句的平均準(zhǔn)確率達(dá)到90%以上,說(shuō)明通過(guò)QFN解析問(wèn)題產(chǎn)生的RDF三元組是可以高效地把問(wèn)題轉(zhuǎn)化成SPARQL語(yǔ)句的。但答案回答的R值較低,原因是系統(tǒng)尚未加入推理機(jī)制,導(dǎo)致召回率低。利用本體自身的語(yǔ)義推理特性,系統(tǒng)引入兩層推理機(jī)制。第一層在框架識(shí)別層根據(jù)識(shí)別的框架語(yǔ)義推理多個(gè)符合問(wèn)題的結(jié)構(gòu),生成多條SPARQL查詢,提高系統(tǒng)的召回率。第二層推理在SPARQL查詢執(zhí)行失敗時(shí),利用領(lǐng)域知識(shí)本體查找規(guī)則庫(kù)中的規(guī)則,執(zhí)行推理查詢。如:?jiǎn)栴}問(wèn)點(diǎn)是詢問(wèn)高血壓病情時(shí),通過(guò)以下規(guī)則可以推測(cè)高血壓的病情。
[rule:(?x medical:患有medical:高血壓)(?x medical:收縮壓血壓值?y), lessThan(?y,159), greaterThan(?y,140)->(?x medical:所患疾病等級(jí) medical:1級(jí)高血壓)]
這條規(guī)則表達(dá)了x是患有高血壓病的病人。y是收縮壓血壓值,且y的值被判斷在140~159之間,可以推斷出x是屬于1級(jí)高血壓的病人。
實(shí)驗(yàn)進(jìn)一步用100個(gè)醫(yī)療領(lǐng)域問(wèn)題,啟動(dòng)推理機(jī)制,分8個(gè)批次,每次擴(kuò)充100個(gè)與實(shí)驗(yàn)問(wèn)題相關(guān)的實(shí)例到領(lǐng)域知識(shí)本體后,系統(tǒng)F值的變化趨勢(shì)如圖6所示。
圖11橫坐標(biāo)表示加入新的領(lǐng)域本體知識(shí)的數(shù)量,縱坐標(biāo)是回答的F值。可以看出,開(kāi)啟推理機(jī)制后,系統(tǒng)初始F值從75.27%提升到80.6%。同時(shí)沒(méi)隨著新加入本體知識(shí)數(shù)量的增加,F(xiàn)值呈現(xiàn)上升趨勢(shì)??梢?jiàn),系統(tǒng)能夠隨著領(lǐng)域本體知識(shí)庫(kù)知識(shí)的豐富不斷提升回答的效果。
圖11 引入推理機(jī)制的系統(tǒng)F值隨本體知識(shí)擴(kuò)充后變化趨勢(shì)
大多數(shù)傳統(tǒng)的基于Web的QA系統(tǒng)是通過(guò)在Web知識(shí)庫(kù)下檢索識(shí)別到的命名實(shí)體和相似度的度量來(lái)呈現(xiàn)候選答案。本文利用本體在知識(shí)管理上帶有語(yǔ)義的特性,將問(wèn)題的命名實(shí)體和本體語(yǔ)義結(jié)構(gòu)聯(lián)系起來(lái),通過(guò)QFN問(wèn)題框架網(wǎng)解析問(wèn)題語(yǔ)義結(jié)構(gòu),抽取RDF三元組自動(dòng)生成SPAQRQL語(yǔ)句從領(lǐng)域本體中之間查詢、推理出問(wèn)題的一系列更具有語(yǔ)義針對(duì)性的答案?;诒倔w的自動(dòng)問(wèn)答系統(tǒng)在加入本體和推理之后,能夠發(fā)掘檢索詞與其相關(guān)領(lǐng)域的顯示和隱式聯(lián)系,使檢索具有語(yǔ)義性,答案抽取更加全面且準(zhǔn)確,輕松解決了傳統(tǒng)搜索引擎無(wú)法解決的問(wèn)題。此外,通過(guò)QFN問(wèn)題框架本體自動(dòng)更新機(jī)制,實(shí)現(xiàn)了問(wèn)題框架的增量式更新。確保了系統(tǒng)的性能在使用中可以不斷提高,優(yōu)化用戶體驗(yàn)。實(shí)驗(yàn)表明,本文的所有研究對(duì)實(shí)際應(yīng)用具有一定的意義,但是仍然有很多需要改進(jìn)和完善的地方:
1) 基于領(lǐng)域本體庫(kù)進(jìn)行概念擴(kuò)展階段,擴(kuò)展的深度在一定程度上會(huì)導(dǎo)致問(wèn)題的意圖的偏移。如何控制擴(kuò)展的深度是今后研究的方向。
2) 自然語(yǔ)言問(wèn)題的復(fù)雜結(jié)構(gòu),如問(wèn)題“吃阿莫西林一直肚子疼是怎么回事?”(藥品的副作用)這類很難抽取RDF三元組的問(wèn)題,系統(tǒng)還需引入語(yǔ)料學(xué)習(xí)的機(jī)制,提升回答的準(zhǔn)確性。