吳志霞,葉根梅,甘 麗
隨著信息技術(shù)的發(fā)展,通過搜索引擎查詢問題答案已成為日常生活中一種普遍現(xiàn)象.問答系統(tǒng)(Question Answering System,QAS)[1]作為信息檢索系統(tǒng)的一種,是一種在檢索技術(shù)上發(fā)展的、可以給用戶一定反饋的系統(tǒng).創(chuàng)建服務(wù)于校園的問答系統(tǒng),需要先采集服務(wù)于校園領(lǐng)域的問答集,然后運用問答集進(jìn)行訓(xùn)練生成訓(xùn)練模型.為采集校園問答集,需要開發(fā)采集問答的平臺.在設(shè)計實現(xiàn)問答采集平臺過程中,設(shè)計開發(fā)者必須考慮為平臺提供問題的檢索服務(wù).傳統(tǒng)的問題檢索大多基于關(guān)系數(shù)據(jù)庫的關(guān)鍵字查詢,檢索方式比較單一,隨著數(shù)據(jù)量的增多,檢索效率也會降低.Lucene 是一種性能優(yōu)異的開源全文搜索框架,利用它可以方便地定制符合自身需求的搜索引擎.本文采用Lucene 的中文分詞、倒排索引、結(jié)果相關(guān)度排序、高亮等關(guān)鍵技術(shù),設(shè)計并實現(xiàn)了服務(wù)于某高?;赪eb 應(yīng)用的校園中文問答采集平臺,采用MySQL 關(guān)系數(shù)據(jù)庫存儲的14 萬條問答記錄驗證了檢索的準(zhǔn)確性和高效性[2-6].
校園中文問答采集平臺基于Web 開發(fā)模式,采用Spring+SpringMVC+MyBatis 框架技術(shù)實現(xiàn).開發(fā)實例提供問答樣本數(shù)據(jù)集采集模塊、問答樣本數(shù)據(jù)集管理模塊、文本制度文件導(dǎo)入模塊、問答樣本數(shù)據(jù)集輸出模塊和智能應(yīng)答五個模塊.其中,需要運用Lucene 搜索架構(gòu),實現(xiàn)問答采集平臺的問句檢索.
運用Lucene 搜索架構(gòu)實現(xiàn)問答采集平臺,利用四張數(shù)據(jù)表存儲通過平臺導(dǎo)入的校園規(guī)章制度文件數(shù)據(jù),以及針對這些規(guī)章制度文件采集到的問答集.
(1)規(guī)章制度文件表(subject).用來存儲導(dǎo)入的規(guī)章制度文件主題信息,主要包括id、導(dǎo)入的制度文件主題描述、順序編號等信息.具體描述如表1 所示.
表1 規(guī)章制度文件表(subject)
(2)章節(jié)表(chapterTitle).用來存放導(dǎo)入的制度文件的章節(jié)名稱.主要包括id、導(dǎo)入的制度文件章節(jié)名稱、順序編號、章節(jié)歸屬的規(guī)章制度文件id 和創(chuàng)建時間等信息.具體描述如表2 所示.
表2 章節(jié)表(chapterTitle)
(3)條例表(rules).用來存放具體的條例,主要包括id、導(dǎo)入的制度文件條例標(biāo)題、條例內(nèi)容、順序編號、章節(jié)歸屬的規(guī)章制度文件id、條例歸屬的章節(jié)id 和創(chuàng)建時間等信息.具體描述如表3 所示.
表3 條例表(rules)
(4)問答表(qanswer).用來存放采集到的問答樣本數(shù)據(jù),主要包括qid、問題、答案、參考信息文本塊、問題歸屬的條例id、問題歸屬的規(guī)章制度文件id、問題歸屬的章節(jié)id、創(chuàng)建人、創(chuàng)建時間、第一審核人、審核時間、審核級別、第二審核人、審核時間、審核級別、核定級別和狀態(tài)等信息.具體描述如表4 所示.
表4 問答表(qanswer)
Lucene 是一種運用Java 語言編寫的開源全文搜索框架,屬于Apache 軟件基金會Jakarta項目組下的子項目.Lucene 作為一個搜索工具包,提供了完整的查詢引擎、搜索引擎和某些語言的分析引擎.開發(fā)人員可以利用其強大的索引和搜索功能為目標(biāo)系統(tǒng)添加信息檢索功能[3].
基于Lucene 實現(xiàn)平臺數(shù)據(jù)檢索流程如圖1 所示.第一步,搜集數(shù)據(jù).數(shù)據(jù)可以是文件系統(tǒng)、手工輸入、網(wǎng)絡(luò)上的數(shù)據(jù)和數(shù)據(jù)庫中的數(shù)據(jù);第二步,通過數(shù)據(jù)創(chuàng)建索引;第三步,用戶輸入要查詢的關(guān)鍵字;第四步,通過關(guān)鍵字創(chuàng)建查詢器;第五步,根據(jù)查詢器到索引里獲取數(shù)據(jù);最后,把查詢結(jié)果展示給用戶.
圖1 基于Lucene 實現(xiàn)平臺數(shù)據(jù)檢索流程圖
基于Lucene 實現(xiàn)通過問答采集平臺輸入要查詢的問題并得到多個候選問答集,根據(jù)問題得到候選問題集的檢索程序流程圖如圖2 所示.獲取用戶輸入的針對問題需要查詢的關(guān)鍵字;準(zhǔn)備中文分詞器,調(diào)用業(yè)務(wù)邏輯中的方法獲取數(shù)據(jù)庫中所有的問答對數(shù)據(jù);運用中文分詞器與問答對數(shù)據(jù)創(chuàng)建索引;依據(jù)中文分詞器和針對“問題”的字段去創(chuàng)建查詢器;執(zhí)行搜索;由指定的界面展示查詢出來的候選問題集和對應(yīng)的答案,得到的候選問題都標(biāo)有相應(yīng)的匹配得分,匹配得分越高顯示越靠前.
圖2 候選問題集的檢索程序流程圖
運用中文分詞器與問答對數(shù)據(jù)創(chuàng)建索引的核心代碼如下:
在“創(chuàng)建索引”的代碼塊中,應(yīng)用程序把每一條數(shù)據(jù)記錄都轉(zhuǎn)換成一個文檔(Document),并寫入索引文件中.用戶輸入查詢關(guān)鍵字,執(zhí)行搜索的程序流程如圖3 所示.創(chuàng)建IndexReader 類型的對象reader;基于reader 創(chuàng)建搜索器;指定每頁要顯示多少條數(shù)據(jù);執(zhí)行搜索,得到數(shù)組,返回的數(shù)組類型為ScoreDoc;運用搜索器、數(shù)組、查詢器和中文分詞器,返回符合條件的查詢結(jié)果.
圖3 執(zhí)行搜索程序流程圖
用戶在本文中的搜索引擎輸入查詢關(guān)鍵字,搜索結(jié)果如圖4 所示.分值表示當(dāng)前行的匹配度得分,得分越高在問答集列表中越靠前顯示.為提升用戶的使用體驗,應(yīng)用程序中關(guān)鍵字都進(jìn)行了突出標(biāo)識,在圖4 中用黑框標(biāo)識出突出的字體.
圖4 搜索結(jié)果
數(shù)據(jù)檢索主要考慮檢索的效率與檢索的準(zhǔn)確性.本文對比了基于Lucene 的全文檢索和基于MySQL 數(shù)據(jù)庫表“SELECT * FROM qanswer WHERE qname LIKE %檢索詞%”方式的模糊查詢檢索功能.文中選取了不同詞長的8 個具有代表性的檢索詞,對MySQL 數(shù)據(jù)表中的14 萬條問答記錄分別采用這兩種方法進(jìn)行搜索,比較其搜索效率和準(zhǔn)確度.實驗結(jié)果如表5 所示.
表5 基于Lucene 的檢索與模糊檢索結(jié)果對比
對比基于Lucene 的檢索和MySQL 數(shù)據(jù)庫表的模糊查詢,兩者在檢索效率和數(shù)量方面都存在差異.采用倒排索引技術(shù)的Lucene 檢索框架,檢索效率更高.在檢索結(jié)果數(shù)量方面,Lucene 匹配以詞元為單位,會進(jìn)行分詞,導(dǎo)致Lucene 檢索普遍比模糊查詢的結(jié)果數(shù)量多.例如,搜索“公益活動”,使用Lucene 檢索能夠切分出“公益”和“活動”兩個詞元,所以能夠匹配“公益活動”“公益”和“活動”等多條記錄,而MySQL 模糊查詢無法搜索出這些結(jié)果.
在傳統(tǒng)的應(yīng)用軟件中,對數(shù)據(jù)的搜索大多采用關(guān)系數(shù)據(jù)表的模糊查詢方式,每次查詢請求,需要遍歷數(shù)據(jù)表中的全部記錄.本文將開源Lucene 搜索架構(gòu)運用到校園中文問答采集平臺,能夠快速檢索到數(shù)據(jù),對數(shù)據(jù)進(jìn)行相關(guān)度排序,并提供突出顯示,讓用戶體驗得到提升,為數(shù)據(jù)檢索提供了一種實踐思路.