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