陳定甲,淳鑫
(南寧師范大學 計算機與信息工程學院,廣西 南寧 530299)
近年來,隨著知識圖譜構建技術和深度學習技術的快速發展,知識圖譜問答方法源源不斷地被提出。知識圖譜問答系統能夠高效且精準的問答問題,被廣泛地應用在了文化知識、醫療、金融、電子商務等領域[1]。
知識圖譜問答系統可以分為兩個部分:一部分是知識圖譜,其可以高效整合海量數據的有效信息,為實現語義智能化搜索以及知識互聯打下基礎[2]。知識圖譜由許多的三元組來組成,能夠很清晰地表達出實體之間的關系,因此,其可以服務于各種系統。另一部分是問答系統,其采用規則匹配方式完成,將用戶輸入的問題進行語義分析,問題分類并進行問句相似度計算[3]。基于知識圖譜的問答系統則是根據問答系統的問題,在已構建的知識圖譜中查詢對應的答案,然后依據系統返回數據組裝句子進行回答。
對于現有的知識圖譜和問答系統技術來說,領域性的知識圖譜問答系統已經做得比較完善了,但是通用性的并沒有深入的探索,尤其是在歷史文化領域。歷史文化領域的知識如今存在豐富,但是局限于網上多而雜的數據。如果想要從中檢索到所需的知識,其分辨效率低,并且知識比較分散,并沒有深入地挖掘。為此,將研究一套基于歷史文化的通用知識圖譜問答系統的設計并實現。
本研究基于歷史文化的通用知識圖譜問答系統,其中通用的歷史文化知識圖譜目前已有很多,且根據這些知識圖譜開發成了各種平臺[4]。本設計合理地利用好這些資源,以此為基礎,進行問答系統的設計。
設計的問答系統架構如圖1所示。主要分為了3部分:應用層、處理層、數據層。接下來將從上往下對每一層進行分析。

圖1 問答系統架構圖
應用層主要提供給用戶進行提問的界面,以及系統返回的一系列答案的展示。此層設計了進行問題輸入的文本框,用于收集用戶所提的問題,然后根據前端頁面的技術,生成返回后端的表單,進行數據的傳輸。當用戶輸入問題進行查詢后,系統將進行數據的處理(在處理層進行解析),最終生成問題的答案,展示在前端的頁面上,使用戶快速地了解想要的知識。
處理層主要是對應用層中用戶所提的問題進行解析,然后尋找到其答案。對問題的解析分為了兩步:(1)實體抽取和關系抽取;(2)尋找答案則需要進行知識的推理匹配[5]。這些步驟對應著處理層中的3個技術:實體抽取技術、關系抽取技術、知識推理匹配技術。
1.2.1 實體抽取技術
知識抽取技術從海量異構數據中自動、快速、準確地抽取人們感興趣的知識[6],其中包括了實體抽取技術。對于一個用戶提出的問題,首先需要對問題的句子進行分詞,這是最基礎的一個步驟。現有的分詞工具非常多,如jieba、HanLP、NLTK、ltp等,本研究使用ltp工具包的cws模型,對問句進行初步的分析。
經過了分詞后,需要分析其問句的主體是什么,其實就是實體詞。對于實體詞的抽取,依然可以使用ltp工具包中的pos模型來抽取。其步驟主要是對分詞后的問句,進行詞性標注,給每一個詞都標上其詞性。詞性分為名詞(n)、動詞(v)、形容詞(adv)等,這些是一個詞語的抽象表示,也是識別實體的關鍵信息。其中對應的詞性為名詞的詞語,可以初步的抽取出來,作為目標實體。但是這一步得到的實體并不很準確,所以還需要通過其他的方法去判斷。
另一種方法為命名實體識別,ltp工具包提供了ner模型可以對問句進行命名實體識別。識別出來具有特定意義的實體,其中主要包括人名、地名、專有名詞等。
最后將詞性標注得到的名詞和命名實體識別得到的實體詞進行對比,從而確定目標實體,完成問句的實體抽取。
1.2.2 關系抽取技術
上述已經從問句中提取出了實體詞了,也就是明白了問句的主體了,那么接下來將是要了解主體需要做什么,也就是找到其關系。在關系抽取中,仍讓依賴ltp工具包的詞性標注。從實體抽取中,已經對問句進行了詞性標注了,只需要提取其中動詞等詞語出來,作為備選的關系詞,等待進一步去驗證判斷即可。
進一步驗證使用的模型為ltp工具包中的sdp模型,該模型為依存句法分析模型。sdp模型能夠從問句中分析出每個詞組之間的成分,如主謂關系(SBV)、動賓關系(VOB)等。從這些關系中,可以找出與實體詞有關的關系,再結合上述的備選的關系詞,最終判斷出準確的關系詞,對其進行提取,即可完成問句的關系提取。
1.2.3 知識匹配推理技術
知識匹配推理主要是通過對問題分析后,結合知識圖譜的數據,進行匹配。當然,不是所有的知識都能夠準確得表達清楚,且與數據庫中的知識明確對應的,這時候即需要進行知識的推理,找出其相似的詞,并給用戶返回相似的答案。
具體來說,根據實體抽取得到的實體詞和關系抽取得到的關系詞,先從知識圖譜中進行搜索,如果能夠得到準確的答案則返回即可;當從知識圖譜中搜索不到相應的答案之時,則需要對實體詞和關系詞進行相似詞的替換,然后再去知識圖譜中進行搜索。
實體詞和關系詞進行相似詞替換,提供了2種方式。(1)外部補充知識。這個方法需要一個比較全面的詞匯表,如地名等。如果人工收集成本大,于是開發了一個邊查邊補充詞匯表的方法,即是當用戶查詢時,返回相似的信息,若用戶確定其為想要的信息,則將其記錄到相似詞匯表中。(2)對知識圖譜進行模糊搜索。根據知識圖譜的模糊查詢語句,將實體詞或關系詞都當作模糊詞進行查詢,最后將結果返回給用戶,由用戶確定想要的信息。當然,為了得到更加準確的結果,將兩種方式結合,進行知識的匹配推理,最后得到一個準確的結果返回給用戶。
在數據層,構建了一個知識比較全面的知識圖譜。知識圖譜主要存放著各個相關信息的三元組,這些三元組信息清晰明了,表達能力強,所以選用知識圖譜作為問答系統的底層數據支撐。為了做到比較通用,主要收集了現有關于歷史文化、旅游景點、人文山水、地理等信息。當然,若想在應用層表達更豐富的信息,還需要其他形式的知識補充,如圖片、視頻等。
首先,在應用層采用了一些比較輕便的框架來實現答案相關的知識圖譜展示,以及答案的文本或者圖片的頁面填充,如Vue框架、D3.js技術等。Vue框架主要是輕量級、體積小,比較適合快速的開發,且運行效率很高,生態豐富,學習成本低。本研究主要考慮Vue框架的可移植性和輕便性,從而選定其為前端頁面開發所使用的框架。D3.js是一個基于web標準的JavaScript可視化庫,其可以使用SVG或者Canvas等HTML的頁面渲染技術將數據生動的展示出來。知識圖譜就是一個靈活多變的樹圖,所以相對于Chart.js等畫圖庫,D3.js技術能夠更加精準的制作出所定制的圖,且使用非常方便,兼容現在的所有瀏覽器。
其次,在處理層中使用Flask框架來連接底層數據和頂層應用。Flask框架性能上基本滿足一般web開發的需求,并且靈活性以及可擴展性上要優于其他web框架,對各種數據庫的契合度都非常高。本設計主要依賴于Flask框架的靈活性和拓展性,能夠把ltp模型嵌套進框架中,設計比較方便。而且本研究所使用的數據庫為圖像庫,Flask框架調用靈活。由于其靈活的代碼設計,能夠給開發者更多再創造的空間,開發出更加契合項目需求的功能。
最后,有了大量的數據之后,應當存儲在數據庫中,才能方便使用。知識圖譜由于其數據包含實體、屬性、關系等,常見的關系型數據庫諸如MySQL之類不能體現數據的這些特點。因此,知識圖譜數據的存儲一般是采用圖數據庫。所以在數據層使用了Neo4j數據庫來存儲知識圖譜的數據。Neo4j是一個高性能的NOSQL圖形數據庫,它將結構化數據存儲在網絡上而不是表中,它也是一個嵌入式的、基于磁盤的、具備完全的事務特性的Java持久化引擎。
基于上述的設計,使用Neo4j數據庫作為知識圖譜的存儲,結合現在比較輕便開發的Vue、D3.js以及Flask等技術實現了基于歷史文化的通用知識圖譜問答系統。其提供了用戶問題搜索、結果返回展示、知識圖譜的可視化等功能。前端界面如圖2所示。

圖2 歷史文化的通用知識圖譜問答系統展示圖
本設計的歷史知識的通用知識圖譜問答系統主具有易搜索、高效、簡潔、便于用戶的理解等優點。答案以圖譜的形式展示,生動形象,知識清晰可辨,同時是也有對每個知識的詳細內容補充,使用戶能夠深入的理解其知識包含的具體內容。簡潔的界面使用戶無需從大段的文字中找到自己的想要的知識,本系統的知識能夠做到一目了然。例如圖中搜索“李明儒的相關事件”,系統將馬上返回以“李明儒”這名偉人的歷史相關事件,并通過了知識圖譜的形式展示,右側則是“李明儒”這名偉人的人物介紹。
本設計完成的與實現了歷史文化的通用知識圖譜問答系統,完成了問答系統的實體抽取、關系抽取以及知識匹配推理技術,并在已有的知識圖譜上,使用Neo4j、Flask、Vue和D3.js等工具開發出一套較為通用的問答系統,幫助人們更高效地檢索信息。