陳定甲,淳鑫
(南寧師范大學(xué) 計算機與信息工程學(xué)院,廣西 南寧 530299)
近年來,隨著知識圖譜構(gòu)建技術(shù)和深度學(xué)習(xí)技術(shù)的快速發(fā)展,知識圖譜問答方法源源不斷地被提出。知識圖譜問答系統(tǒng)能夠高效且精準(zhǔn)的問答問題,被廣泛地應(yīng)用在了文化知識、醫(yī)療、金融、電子商務(wù)等領(lǐng)域[1]。
知識圖譜問答系統(tǒng)可以分為兩個部分:一部分是知識圖譜,其可以高效整合海量數(shù)據(jù)的有效信息,為實現(xiàn)語義智能化搜索以及知識互聯(lián)打下基礎(chǔ)[2]。知識圖譜由許多的三元組來組成,能夠很清晰地表達出實體之間的關(guān)系,因此,其可以服務(wù)于各種系統(tǒng)。另一部分是問答系統(tǒng),其采用規(guī)則匹配方式完成,將用戶輸入的問題進行語義分析,問題分類并進行問句相似度計算[3]?;谥R圖譜的問答系統(tǒng)則是根據(jù)問答系統(tǒng)的問題,在已構(gòu)建的知識圖譜中查詢對應(yīng)的答案,然后依據(jù)系統(tǒng)返回數(shù)據(jù)組裝句子進行回答。
對于現(xiàn)有的知識圖譜和問答系統(tǒng)技術(shù)來說,領(lǐng)域性的知識圖譜問答系統(tǒng)已經(jīng)做得比較完善了,但是通用性的并沒有深入的探索,尤其是在歷史文化領(lǐng)域。歷史文化領(lǐng)域的知識如今存在豐富,但是局限于網(wǎng)上多而雜的數(shù)據(jù)。如果想要從中檢索到所需的知識,其分辨效率低,并且知識比較分散,并沒有深入地挖掘。為此,將研究一套基于歷史文化的通用知識圖譜問答系統(tǒng)的設(shè)計并實現(xiàn)。
本研究基于歷史文化的通用知識圖譜問答系統(tǒng),其中通用的歷史文化知識圖譜目前已有很多,且根據(jù)這些知識圖譜開發(fā)成了各種平臺[4]。本設(shè)計合理地利用好這些資源,以此為基礎(chǔ),進行問答系統(tǒng)的設(shè)計。
設(shè)計的問答系統(tǒng)架構(gòu)如圖1所示。主要分為了3部分:應(yīng)用層、處理層、數(shù)據(jù)層。接下來將從上往下對每一層進行分析。
圖1 問答系統(tǒng)架構(gòu)圖
應(yīng)用層主要提供給用戶進行提問的界面,以及系統(tǒng)返回的一系列答案的展示。此層設(shè)計了進行問題輸入的文本框,用于收集用戶所提的問題,然后根據(jù)前端頁面的技術(shù),生成返回后端的表單,進行數(shù)據(jù)的傳輸。當(dāng)用戶輸入問題進行查詢后,系統(tǒng)將進行數(shù)據(jù)的處理(在處理層進行解析),最終生成問題的答案,展示在前端的頁面上,使用戶快速地了解想要的知識。
處理層主要是對應(yīng)用層中用戶所提的問題進行解析,然后尋找到其答案。對問題的解析分為了兩步:(1)實體抽取和關(guān)系抽取;(2)尋找答案則需要進行知識的推理匹配[5]。這些步驟對應(yīng)著處理層中的3個技術(shù):實體抽取技術(shù)、關(guān)系抽取技術(shù)、知識推理匹配技術(shù)。
1.2.1 實體抽取技術(shù)
知識抽取技術(shù)從海量異構(gòu)數(shù)據(jù)中自動、快速、準(zhǔn)確地抽取人們感興趣的知識[6],其中包括了實體抽取技術(shù)。對于一個用戶提出的問題,首先需要對問題的句子進行分詞,這是最基礎(chǔ)的一個步驟?,F(xiàn)有的分詞工具非常多,如jieba、HanLP、NLTK、ltp等,本研究使用ltp工具包的cws模型,對問句進行初步的分析。
經(jīng)過了分詞后,需要分析其問句的主體是什么,其實就是實體詞。對于實體詞的抽取,依然可以使用ltp工具包中的pos模型來抽取。其步驟主要是對分詞后的問句,進行詞性標(biāo)注,給每一個詞都標(biāo)上其詞性。詞性分為名詞(n)、動詞(v)、形容詞(adv)等,這些是一個詞語的抽象表示,也是識別實體的關(guān)鍵信息。其中對應(yīng)的詞性為名詞的詞語,可以初步的抽取出來,作為目標(biāo)實體。但是這一步得到的實體并不很準(zhǔn)確,所以還需要通過其他的方法去判斷。
另一種方法為命名實體識別,ltp工具包提供了ner模型可以對問句進行命名實體識別。識別出來具有特定意義的實體,其中主要包括人名、地名、專有名詞等。
最后將詞性標(biāo)注得到的名詞和命名實體識別得到的實體詞進行對比,從而確定目標(biāo)實體,完成問句的實體抽取。
1.2.2 關(guān)系抽取技術(shù)
上述已經(jīng)從問句中提取出了實體詞了,也就是明白了問句的主體了,那么接下來將是要了解主體需要做什么,也就是找到其關(guān)系。在關(guān)系抽取中,仍讓依賴ltp工具包的詞性標(biāo)注。從實體抽取中,已經(jīng)對問句進行了詞性標(biāo)注了,只需要提取其中動詞等詞語出來,作為備選的關(guān)系詞,等待進一步去驗證判斷即可。
進一步驗證使用的模型為ltp工具包中的sdp模型,該模型為依存句法分析模型。sdp模型能夠從問句中分析出每個詞組之間的成分,如主謂關(guān)系(SBV)、動賓關(guān)系(VOB)等。從這些關(guān)系中,可以找出與實體詞有關(guān)的關(guān)系,再結(jié)合上述的備選的關(guān)系詞,最終判斷出準(zhǔn)確的關(guān)系詞,對其進行提取,即可完成問句的關(guān)系提取。
1.2.3 知識匹配推理技術(shù)
知識匹配推理主要是通過對問題分析后,結(jié)合知識圖譜的數(shù)據(jù),進行匹配。當(dāng)然,不是所有的知識都能夠準(zhǔn)確得表達清楚,且與數(shù)據(jù)庫中的知識明確對應(yīng)的,這時候即需要進行知識的推理,找出其相似的詞,并給用戶返回相似的答案。
具體來說,根據(jù)實體抽取得到的實體詞和關(guān)系抽取得到的關(guān)系詞,先從知識圖譜中進行搜索,如果能夠得到準(zhǔn)確的答案則返回即可;當(dāng)從知識圖譜中搜索不到相應(yīng)的答案之時,則需要對實體詞和關(guān)系詞進行相似詞的替換,然后再去知識圖譜中進行搜索。
實體詞和關(guān)系詞進行相似詞替換,提供了2種方式。(1)外部補充知識。這個方法需要一個比較全面的詞匯表,如地名等。如果人工收集成本大,于是開發(fā)了一個邊查邊補充詞匯表的方法,即是當(dāng)用戶查詢時,返回相似的信息,若用戶確定其為想要的信息,則將其記錄到相似詞匯表中。(2)對知識圖譜進行模糊搜索。根據(jù)知識圖譜的模糊查詢語句,將實體詞或關(guān)系詞都當(dāng)作模糊詞進行查詢,最后將結(jié)果返回給用戶,由用戶確定想要的信息。當(dāng)然,為了得到更加準(zhǔn)確的結(jié)果,將兩種方式結(jié)合,進行知識的匹配推理,最后得到一個準(zhǔn)確的結(jié)果返回給用戶。
在數(shù)據(jù)層,構(gòu)建了一個知識比較全面的知識圖譜。知識圖譜主要存放著各個相關(guān)信息的三元組,這些三元組信息清晰明了,表達能力強,所以選用知識圖譜作為問答系統(tǒng)的底層數(shù)據(jù)支撐。為了做到比較通用,主要收集了現(xiàn)有關(guān)于歷史文化、旅游景點、人文山水、地理等信息。當(dāng)然,若想在應(yīng)用層表達更豐富的信息,還需要其他形式的知識補充,如圖片、視頻等。
首先,在應(yīng)用層采用了一些比較輕便的框架來實現(xiàn)答案相關(guān)的知識圖譜展示,以及答案的文本或者圖片的頁面填充,如Vue框架、D3.js技術(shù)等。Vue框架主要是輕量級、體積小,比較適合快速的開發(fā),且運行效率很高,生態(tài)豐富,學(xué)習(xí)成本低。本研究主要考慮Vue框架的可移植性和輕便性,從而選定其為前端頁面開發(fā)所使用的框架。D3.js是一個基于web標(biāo)準(zhǔn)的JavaScript可視化庫,其可以使用SVG或者Canvas等HTML的頁面渲染技術(shù)將數(shù)據(jù)生動的展示出來。知識圖譜就是一個靈活多變的樹圖,所以相對于Chart.js等畫圖庫,D3.js技術(shù)能夠更加精準(zhǔn)的制作出所定制的圖,且使用非常方便,兼容現(xiàn)在的所有瀏覽器。
其次,在處理層中使用Flask框架來連接底層數(shù)據(jù)和頂層應(yīng)用。Flask框架性能上基本滿足一般web開發(fā)的需求,并且靈活性以及可擴展性上要優(yōu)于其他web框架,對各種數(shù)據(jù)庫的契合度都非常高。本設(shè)計主要依賴于Flask框架的靈活性和拓展性,能夠把ltp模型嵌套進框架中,設(shè)計比較方便。而且本研究所使用的數(shù)據(jù)庫為圖像庫,F(xiàn)lask框架調(diào)用靈活。由于其靈活的代碼設(shè)計,能夠給開發(fā)者更多再創(chuàng)造的空間,開發(fā)出更加契合項目需求的功能。
最后,有了大量的數(shù)據(jù)之后,應(yīng)當(dāng)存儲在數(shù)據(jù)庫中,才能方便使用。知識圖譜由于其數(shù)據(jù)包含實體、屬性、關(guān)系等,常見的關(guān)系型數(shù)據(jù)庫諸如MySQL之類不能體現(xiàn)數(shù)據(jù)的這些特點。因此,知識圖譜數(shù)據(jù)的存儲一般是采用圖數(shù)據(jù)庫。所以在數(shù)據(jù)層使用了Neo4j數(shù)據(jù)庫來存儲知識圖譜的數(shù)據(jù)。Neo4j是一個高性能的NOSQL圖形數(shù)據(jù)庫,它將結(jié)構(gòu)化數(shù)據(jù)存儲在網(wǎng)絡(luò)上而不是表中,它也是一個嵌入式的、基于磁盤的、具備完全的事務(wù)特性的Java持久化引擎。
基于上述的設(shè)計,使用Neo4j數(shù)據(jù)庫作為知識圖譜的存儲,結(jié)合現(xiàn)在比較輕便開發(fā)的Vue、D3.js以及Flask等技術(shù)實現(xiàn)了基于歷史文化的通用知識圖譜問答系統(tǒng)。其提供了用戶問題搜索、結(jié)果返回展示、知識圖譜的可視化等功能。前端界面如圖2所示。
圖2 歷史文化的通用知識圖譜問答系統(tǒng)展示圖
本設(shè)計的歷史知識的通用知識圖譜問答系統(tǒng)主具有易搜索、高效、簡潔、便于用戶的理解等優(yōu)點。答案以圖譜的形式展示,生動形象,知識清晰可辨,同時是也有對每個知識的詳細內(nèi)容補充,使用戶能夠深入的理解其知識包含的具體內(nèi)容。簡潔的界面使用戶無需從大段的文字中找到自己的想要的知識,本系統(tǒng)的知識能夠做到一目了然。例如圖中搜索“李明儒的相關(guān)事件”,系統(tǒng)將馬上返回以“李明儒”這名偉人的歷史相關(guān)事件,并通過了知識圖譜的形式展示,右側(cè)則是“李明儒”這名偉人的人物介紹。
本設(shè)計完成的與實現(xiàn)了歷史文化的通用知識圖譜問答系統(tǒng),完成了問答系統(tǒng)的實體抽取、關(guān)系抽取以及知識匹配推理技術(shù),并在已有的知識圖譜上,使用Neo4j、Flask、Vue和D3.js等工具開發(fā)出一套較為通用的問答系統(tǒng),幫助人們更高效地檢索信息。