羅東霞,卿粼波,吳曉紅
(四川大學 電子信息學院,四川 成都 610065)
隨著人工智能技術的飛速發(fā)展,傳統(tǒng)搜索引擎已不能滿足用戶需求,自動問答系統(tǒng)逐漸成為信息檢索領域的研究熱點,并具有廣泛應用前景[1]。自動問答系統(tǒng)指允許用戶以自然語言的形式描述問句,并將簡潔答案返回給用戶的一種信息檢索系統(tǒng)[2]。
近年來,自動問答系統(tǒng)相關的研究和應用十分廣泛。2011年,IBM 公司的深度問答系統(tǒng)首次將自然語言處理與深度學習結合起來,使得眾多機構和企業(yè)紛紛效仿。2013年3月,京東上線京東JIMI 客服機器人,提供客戶常規(guī)咨詢服務;2016年10月,百度推出百度醫(yī)療大腦,實現健康在線咨詢[3]。但目前關于中文自動問答系統(tǒng)的研究多是圍繞特指問句,其開放性的回答方式不適用于是非問句的二值答案。例如,對 JIMI 提問:“京東自營滿 88 包郵對嗎?”,JIMI 的答案是京東自營商品包郵的詳細說明,而非是非問句要求的“對”或“不對”的二值答案。中文是非問答系統(tǒng)的設計與實現,能夠彌補目前中文自動問答僅能作答特指問句的不足,幫助用戶快速獲取簡潔的答案,對自動問答系統(tǒng)的研究和應用有著極其重要的意義。
本文利用Lucene 設計并實現一種中文是非問答系統(tǒng),主要工作包括:(1)引入句法成分權重和命名實體權重,改進 TextRank 算法[4-5],提出一種問句核心詞提取方法;(2)針對 MySQL、Neo4j 和本地新聞文件中的多源數據,提出一種多源數據融合索引創(chuàng)建方法,減少索引創(chuàng)建耗時;(3)查詢索引并對索引結果判決,獲得是非問句的二值答案。
本系統(tǒng)主要包括三個模塊:多源數據融合創(chuàng)建索引、問句預處理和答案整理。其中,問句預處理包括問句分詞、問句關鍵詞組 Kw[T1,T2,…,Tn](Ti(i=1…n)表示關鍵詞)與核心詞 Cw的提?。欢嘣磾祿诤蟿?chuàng)建索引對本地數據進行文檔融合,統(tǒng)一創(chuàng)建索引;答案整理將索引結果 LR 與 Cw和 Kw進行匹配,匹配成功則判定為肯定答案,反之為否定答案。系統(tǒng)框圖如圖1 所示。
圖1 是非問答系統(tǒng)框圖
問句預處理指對問句的理解和分析,其任務是根據問句確定檢索和答案提取策略[6]。具體到本系統(tǒng),問句預處理包括問句分詞、問句關鍵詞組提取和問句核心詞提取。
中文問句分詞指將構成問句的漢字序列切分成一個一個單獨的詞的過程[7]。關鍵詞指體現個人需求的詞匯,多個關鍵詞組成關鍵詞組Kw[T1,T2,…,Tn]。問句核心詞 Cw指 Kw中關鍵度最高的詞,其高低由提取關鍵詞時的詞語得分Ws、詞語句法成分權重 Wc和命名實體權重 We共同決定。HanLP 是由一系列模型與算法組成的自然語言處理工具包,適用于 Java 生產環(huán)境[8],本文采用 HanLP 進行問句分詞,分詞結果包含詞語和詞性。TextRank 算法是一種基于圖的排序算法,不需要提前訓練,本文采用該算法提取問句關鍵詞。問句預處理流程如圖2所示。
圖2 問句預處理流程圖
核心詞指關鍵詞組中關鍵度最高的詞,不同句法結構關鍵詞組 Kw大小不同。表 1 中是兩種不同的句型結構及其對應的關鍵詞組的大小。其中,“n”指名詞,包括人名、地名和專用名詞等;“v”指動詞,“np”是名詞性短語,“u”是助詞,“y”是語氣詞。
詞語在句中充當的成分不同,對句子有效信息的貢獻度也不同[9-10]。利用依存句法分析,將詞語的句法成分權重 Wc加入關鍵度計算中。表 1 兩例句的依存句法分析如圖 3 所示,其中“nr”指人名,“b”指區(qū)別詞,“ns”指地名,“w”指標點符號,“u”指助詞。在非省略句中,句子的主謂賓對句子貢獻較大,但謂語動詞一般不作為句子關鍵詞,主語和賓語多數情況下具有相同重要性。句末語氣詞和標點對句子內容貢獻較小,暫不考慮兩者的句法成分權重。結構 1 例句主干“特朗普(主語)+是(謂語)+總統(tǒng)(賓)”的 Wc大小為:
表1 句型結構與關鍵詞組大小
圖3 例句依存句法分析圖
“現任”和“美國”作定語分別從性質和范圍修飾定中短語中心語“總統(tǒng)”,Wc依次為:
最終結構1 例句中各詞的Wc大小依次為:
與結構 1 例句不同,結構 2 例句中“特朗普”從領屬修飾 “女兒”,表示“女兒”從屬于“特朗普”,則:
助詞作輔助之用,賦予其較小的 Wc,結構 2 例句中各詞 Wc為:
考慮數據源中存在較多命名實體信息,引入命名實體權重 We(0≤We<1),對詞語關鍵度做到更好的區(qū)分度。對于任意一個詞 Ti,若該詞是數據庫中的命名實體, 則為詞分配一個命名實體權重We(Ti),反之將該詞的實體權重置為零。對于是非問句關鍵詞組 Kw中任意一個詞 Ti,其關鍵度 W(Ti)由 TextRank關鍵詞得分 Ws(Ti)、句法成分權重 Wc(Ti)和命名實體權重We(Ti)三部分組成,具體表現為:
經實驗統(tǒng)計,當 α=0.4,β=0.6 時,核心詞提取正確率最高,因此令 α=0.4,β=0.6。Ws(Ti)的計算形式為[10]:
其中 d 為阻尼系數(一般取值 0.85),Wji指圖中任兩點(任意兩相連詞語)Ti、Tj相連邊的權重,In(Tj)為 指向點 Tj的點集合,Out(Ti)為點 Ti指向的點集合。是非問句的核心詞 Cw為關鍵度 W(Ti)最高的詞語,即:
多源數據融合創(chuàng)建索引將Neo4j 數據庫中節(jié)點與關系的信息、本地新聞文件信息和MySQL 數據庫中存儲的標準問答對信息進行文檔融合,降低數據多樣性帶來的復雜度,減少索引創(chuàng)建的時間。答案整理將查詢索引的結果LR 與問句預處理輸出的關鍵詞組 Kw和核心詞Cw進行匹配判決,最終得到符合是非問句答語標準的二值答案。
全文檢索指計算機索引程序通過掃描文章的每一個詞,對每個詞建立一個索引,指明該詞在文章中出現的次數和位置。當用戶進行查詢時,檢索程序就根據事先建立的索引進行查找,并將查找的結果反饋給用戶的檢索方式。Lucene 是一款高性能的Java 全文檢索工具包,它提供了完整的查詢引擎、索引引擎和部分文本分析引擎[11]。
文檔(Document)是 Lucene 全文檢索中索引創(chuàng)建和查詢的基本單位, 一篇文檔包含不同類型的信息,分別存儲在不同的域(Field)里,不同的文檔可以有不同的域,每個文檔有獨立的編號。對多源數據進行文檔融合能夠降低數據多樣性帶來的復雜度,為索引創(chuàng)建提供更便利省時的方法。文檔融合流程如圖 4 所示,主要處理如下:
(1)使用Cypher 圖數據庫查詢語言對 Neo4j 進行節(jié)點查詢,為每個節(jié)點創(chuàng)建一個Document 對象,將查詢得到的屬性添加到Document 對象中;
圖4 文檔融合流程圖
(2)若該節(jié)點包含新聞文件信息,獲取節(jié)點中存儲的新聞文件的路徑,通過I/O 操作從本地文件系統(tǒng)中讀取文件內容,并將該內容添加至Document對象;
(3)通過 SQL 語句查詢 MySQL 中的標準問答對信息,并將該信息添加到一個新的Document 對象中。
融合后的文檔對象如圖5 所示,其中Document 1至Document k 為Neo4j 數據庫中實體和新聞文件的文檔對象,域“fullText”為實體節(jié)點的所有屬性鍵值數據,域“newsText”為節(jié)點相關新聞文件數據;Document k+1 是MySQL 數據庫中的標準問答對信息,域中存儲每一對問題-答案信息。
圖5 文檔對象
Lucene 自帶的中文分詞器中,SmartChineseAnalyzer對中文支持較好,使用簡便[12],分詞效果能滿足系統(tǒng)需求,故采用 SmartChineseAnalyzer 分析文檔。分析文檔得到的語匯單元經IndexWriter 對象加入索引庫,至此多源數據融合創(chuàng)建索引完成。
答案整理包括索引查詢和答案判決。根據問句內容查詢索引,返回檢索結果 LR(r1,r2,…,rm)。LR是命中文檔的詳細信息, 而非是非問句的具體答案,需對檢索結果進行答案判決,輸出肯定或否定的答案。答案判決首先遍歷 LR,判斷檢索記錄 ri是否為Cw指向的實體,若是則進行下一步判斷,否則取下一條ri+1繼續(xù)進行此步判斷,直到遍歷結束;判斷該條記錄下是否包含 Kw[T1,T2,…,Tn]中所有詞匯,且詞匯順序與 Kw[T1,T2,…,Tn]中關鍵詞順序一致,若是則判定為肯定答案,否則為否定答案。
為驗證本系統(tǒng)的可行性,根據上述設計方案實現了一個中文是非問答系統(tǒng)。實驗數據來源于本地Neo4j 數據庫、MySQL 數據庫和本地新聞文件。Neo4j數據庫中包括人物、組織和事件等共計12 451 個實體信息,人物之間的親屬關系和組織與領導人關系等共 25 319 條。MySQL 數據庫中包含 1 000 對是非問句及對應正確答案。本地文件中存儲149 篇PDF格式的實體相關新聞文件。構建前文結構 1 和結構2 類型的問句共1 000 條作為核心詞提取和系統(tǒng)功能的測試數據, 人工標注測試問句的核心詞和問題的正確答案。為了定量分析系統(tǒng)效果,實驗用準確率進行核心詞提取和系統(tǒng)整體功能的分析。準確率定義如下:
式中,P 為準確率,Pnum為正確提取核心詞的問句數量或正確得到答案的問句數量,Rnum表示所有測試問句數量。
(1)實驗1:核心詞提取對比分析。使用1 000條測試數據,對改進TextRank 的核心詞提取方法和傳統(tǒng)TextRank 提取的方法進行對比分析,對比結果表明改進TextRank 的核心詞提取方法能夠較為準確地實現問句核心詞的提取,提取準確率有顯著提升。對比結果如表2 所示。
表2 核心詞提取對比
(2)實驗 2:多源數據創(chuàng)建索引對比分析。對本地多源數據進行文檔融合,將融合創(chuàng)建索引、直接創(chuàng)建索引以及三種數據源分別創(chuàng)建索引耗時作統(tǒng)計分析,結果表明文檔融合能有效減少創(chuàng)建索引的時間,對降低多源數據索引創(chuàng)建復雜度有一定作用。時間對比結果如表 3 所示。
表3 創(chuàng)建索引時間對比
(3)實驗3:系統(tǒng)整體功能測試與分析。針對1 000條測試數據,結合核心詞提取準確率和系統(tǒng)輸出準確率對系統(tǒng)整體功能進行評估,測試結果如表4 所示。表 4 顯示,在 1 000 條測試數據上,系統(tǒng)正確回答數為 954,正確率為 95.4%。其中,當核心詞提取正確時,系統(tǒng)回答正確率為95.6%,而核心詞提取出錯時,問答的準確率僅有76.9%,核心詞提取的正確與否對系統(tǒng)回答的準確性有較大影響。
表4 系統(tǒng)測試結果
本文設計并實現了基于Lucene 的中文是非問答系統(tǒng),基于TextRank 算法引入句法成分權重和命名實體權重實現是非問句核心詞提取,捕獲是非問句的關鍵要素。對分類存儲的多源數據進行文檔融合,降低數據多樣性帶來的復雜度。測試證明,改進TextRank 算法能有效提取問句核心詞,多源數據融合創(chuàng)建索引比直接創(chuàng)建耗時更少,且系統(tǒng)在回答是非問題時不會出現答非所問的情況,回答結果較為滿意。