摘 要: 自動(dòng)問答是計(jì)算機(jī)與人類以自然語言的形式進(jìn)行交流的一種方式,是人工智能研究的一個(gè)分支。介紹了微信公眾平臺(tái)的特點(diǎn)及其開發(fā)接口,研究了Lucene全文檢索工具包和IK Analyzer中文分詞工具包,并最終實(shí)現(xiàn)了一個(gè)基于微信的自動(dòng)問答系統(tǒng),可為用戶提供自動(dòng)問答服務(wù)。測(cè)試結(jié)果表明,該系統(tǒng)具有一定的實(shí)用性。
關(guān)鍵詞: 自動(dòng)問答; 微信公眾平臺(tái); Lucene; IK Analyzer
中圖分類號(hào):TP391.1;TP18 文獻(xiàn)標(biāo)志碼:A 文章編號(hào):1006-8228(2014)09-09-03
Automatic question-answering system based on WeChat
Shi Kai, Chen Zhiqun
(School of computer science and technology, Hangzhou Dianzi University, Hangzhou, Zhejiang 310018, China)
Abstract: Automatic question-answering is a way that computers communicate with humans in the form of natural language. It is a branch of artificial intelligence research. The features and the interface of the public platform of WeChat are introduced. The Lucene full-text retrieval toolkit and the IK Analyzer Chinese participle toolkit are studied. An automatic question-answering system based on WeChat is realized. The system can provide users with a question-answering service. The test results show that the system has a certain practicality.
Key words: automatic question-answering; the public platform of WeChat; Lucene; IK Analyzer
0 引言
近年來,隨著互聯(lián)網(wǎng)的快速發(fā)展,網(wǎng)絡(luò)上的信息量呈現(xiàn)出爆炸式增長(zhǎng)的勢(shì)頭。用戶在互聯(lián)網(wǎng)上搜索問題時(shí),傳統(tǒng)搜索引擎暴露出兩個(gè)問題:①用戶常因關(guān)鍵字選擇不準(zhǔn)確而導(dǎo)致搜索失敗;②搜索結(jié)果是一大堆網(wǎng)頁鏈接,用戶仍需逐個(gè)打開查看。于是,自動(dòng)問答系統(tǒng)[1]成為了當(dāng)下研究的熱點(diǎn)。這是因?yàn)樽詣?dòng)問答系統(tǒng)允許用戶以一種自然語言的形式進(jìn)行提問,并且直接給出答案。目前,國(guó)外已經(jīng)有幾個(gè)比較成熟的問答系統(tǒng),如:Start、Webclopedia、AnswerBus等系統(tǒng)。但是相比之下,由于中文本身的語義、語法復(fù)雜性等多方面因素,中文問答系統(tǒng)的發(fā)展則相對(duì)遜色一點(diǎn)。本文主要討論如何借助微信公眾平臺(tái),利用Lucene和IK Analyzer兩個(gè)開源工具,構(gòu)建一個(gè)自動(dòng)問答系統(tǒng)。
1 微信公眾平臺(tái)
微信公眾平臺(tái)[2]是騰訊公司在微信基礎(chǔ)上新增的功能模塊,通過這個(gè)平臺(tái),個(gè)人和企業(yè)都能打造一個(gè)屬于自己的微信公眾賬號(hào),并且能夠?qū)崿F(xiàn)和特定群體之間文字、圖片及語音的溝通和互動(dòng)。
由于微信擁有其得天獨(dú)厚的優(yōu)勢(shì),它的用戶基數(shù)早已突破六億,所以,基于微信公眾平臺(tái)的開發(fā)也正如火如荼地發(fā)展起來。微信團(tuán)隊(duì)給開發(fā)者提供了一套標(biāo)準(zhǔn)的接口,為開發(fā)者的開發(fā)工作提供了很大的便利。我們從圖1中可以知道,開發(fā)者要做的就是兩件事:①如何正確使用微信開發(fā)的消息接口來收發(fā)消息;②服務(wù)器如何正確處理接收到的消息。其他的事情只要交給微信的服務(wù)器去做就行了。本系統(tǒng)正是利用微信公眾平臺(tái)開發(fā)的這些優(yōu)勢(shì),只專注于自動(dòng)問答系統(tǒng)的實(shí)現(xiàn)過程,大大減少了網(wǎng)絡(luò)通信的工作量,選擇它作為問答這一互動(dòng)過程的交流渠道也是基于這些考量。
對(duì)于開發(fā)人員而言,首先要做的是了解微信公眾平臺(tái)的消息接口。如圖2所示,雖然微信消息有很多種類,但其基礎(chǔ)接口總體上可以分為兩大類,按照微信公布的接口格式對(duì)其進(jìn)行封裝處理可以大大減少程序代碼的編寫量。
2 Lucene全文檢索工具包
Lucene[3]是一套用于全文檢索和搜索的開源工具包,由Apache軟件基金會(huì)支持和提供。但Lucene不是一個(gè)完整的全文索引應(yīng)用,而是一個(gè)用Java寫的全文索引引擎工具包,它可以方便地嵌入到各種應(yīng)用中以實(shí)現(xiàn)針對(duì)應(yīng)用的全文檢索功能。
Lucene最核心的兩個(gè)功能就是索引和檢索。它給開發(fā)人員提供了很多的API,其中IndexWriter類是創(chuàng)建索引的核心類,IndexSearcher類是搜索的核心類。本系統(tǒng)正是使用這兩個(gè)類來對(duì)數(shù)據(jù)源建立索引和全文檢索,以實(shí)現(xiàn)正確匹配用戶問題的功能。
3 IK Analyzer中文分詞工具包
IK Analyzer[4]是一個(gè)開源的,基于Java語言開發(fā)的輕量級(jí)的中文分詞工具包,采用的是“正向迭代最細(xì)粒度切分算法”。在最初,它是以開源項(xiàng)目Lucene為應(yīng)用主體,并且結(jié)合了詞典分詞和文法分析算法的中文分詞組件。
IK Analyzer一共支持兩種分詞模式:智能切分和細(xì)粒度切分。這兩種分詞模式各有自己的優(yōu)勢(shì)。對(duì)于同樣數(shù)量的文章,智能分詞得到的關(guān)鍵詞少,生成的索引文件小,用相同的關(guān)鍵詞進(jìn)行搜索檢索得到的結(jié)果少、匹配度高;而細(xì)粒度分詞因?yàn)榍蟹值酶?xì),所以得到的關(guān)鍵詞多,生成的索引文件大,用相同的關(guān)鍵詞進(jìn)行搜索檢索得到的結(jié)果更多。
4 系統(tǒng)設(shè)計(jì)和實(shí)現(xiàn)
系統(tǒng)工作流程如圖3所示。首先,系統(tǒng)按照微信開發(fā)的消息接口格式接收來自微信公眾平臺(tái)的消息。然后,系統(tǒng)會(huì)用IK Analyzer中文分詞工具對(duì)用戶的問題進(jìn)行分詞處理,再用Lucene工具在事先創(chuàng)建好的FAQ庫索引上進(jìn)行全文檢索。接下來,在檢索完之后的相關(guān)文檔中,選出得分最高的文檔去匹配該問題所對(duì)應(yīng)的答案。最后,系統(tǒng)再按照微信開發(fā)的消息接口格式,將要回復(fù)給用戶的消息封裝成相對(duì)應(yīng)的消息格式,并發(fā)送還微信的服務(wù)器,通過微信的服務(wù)器把用戶問題的答案發(fā)送給用戶。
4.1 FAQ庫設(shè)計(jì)模塊
FAQ(Frequently Asked Questions,常見疑問)庫[5]是事先準(zhǔn)備好的一些問題-答案對(duì),回復(fù)給用戶的答案都存在這個(gè)數(shù)據(jù)庫中。而Lucene正是根據(jù)FAQ庫的內(nèi)容建立的索引文件,這也是系統(tǒng)能正常工作的前提條件。
⑴ QA表存儲(chǔ)的是問題-答案對(duì),這是一個(gè)問題只對(duì)應(yīng)一個(gè)答案的情況。
⑵ QA_Sub表存儲(chǔ)的也是問題-答案對(duì),這是一個(gè)問題對(duì)應(yīng)多個(gè)答案的情況。換句話說,當(dāng)一個(gè)問題有多個(gè)答案時(shí),系統(tǒng)將不再?gòu)腝A表中獲取答案,而是從QA_Sub表中隨機(jī)地抽取一個(gè)該問題所對(duì)應(yīng)的答案。其中,pid作為外鍵,就是指QA表中的問題-答案對(duì)的編號(hào)(id字段)。
⑶ ChatHistory表存儲(chǔ)的是用戶與公眾號(hào)之間的聊天記錄。通過查看聊天記錄,我們可以針對(duì)系統(tǒng)不能回答或者回答得不好的問題進(jìn)行人工的補(bǔ)充和修改。通過定期地更新FAQ庫中的內(nèi)容,可以逐步地完善FAQ庫,使系統(tǒng)能回答越來越多的問題,保證FAQ庫的健壯性。
4.2 問題分析模塊
在這個(gè)模塊中,系統(tǒng)借用的是開源的IK Analyzer中文分詞工具包來實(shí)現(xiàn)。在智能切分模式下,IK Analyzer工具能對(duì)用戶發(fā)來的問題進(jìn)行很好的分詞處理。除此之外,IK Analyzer不僅可以對(duì)專業(yè)詞匯進(jìn)行擴(kuò)充,還可以針對(duì)某些特定的應(yīng)用場(chǎng)景使用停用詞典來提高分詞的準(zhǔn)確率。不過,由于系統(tǒng)主要是用于人們?nèi)粘I畹慕涣?,并不涉及到某些領(lǐng)域的專業(yè)詞匯,所以系統(tǒng)僅僅是簡(jiǎn)單地采用智能切分來處理用戶的問題,并沒有對(duì)專業(yè)詞匯進(jìn)行擴(kuò)充或使用停用詞典。
4.3 全文檢索模塊
在這個(gè)模塊中,系統(tǒng)借用的是開源的Lucene開源檢索工具包來實(shí)現(xiàn)。在對(duì)用戶的問題進(jìn)行分詞處理之后,系統(tǒng)要用分詞后的內(nèi)容在基于FAQ庫建立的索引文件之上使用開源的Lucene工具包進(jìn)行全文檢索。Lucene擁有強(qiáng)大的搜索功能,其中IndexSearcher就是其搜索的核心類,用于在指定的索引文件中進(jìn)行搜索。而Search()方法能夠幫助我們找到得分前n的相關(guān)文檔集合。
4.4 答案抽取模塊
答案抽取模塊是對(duì)全文檢索出來的相關(guān)文檔作進(jìn)一步的篩選。簡(jiǎn)單地,我們可以直接選取得分Top1的文檔來當(dāng)做最匹配的問題,然后再根據(jù)該問題的id去FAQ庫中選出答案返回給用戶。但是,Lucene有著自己的一套評(píng)分機(jī)制,我們也可以通過干預(yù)Lucene的評(píng)分公式來影響它的排序結(jié)果,從而可以針對(duì)不同的場(chǎng)合選取更合適的答案。
5 系統(tǒng)測(cè)試
本系統(tǒng)分別在裝有5.2.1版本微信客戶端的安卓和蘋果手機(jī)上進(jìn)行測(cè)試,測(cè)試顯示運(yùn)行效果良好,系統(tǒng)能正常地與用戶進(jìn)行日常交流。測(cè)試效果如圖4所示。
6 結(jié)束語
對(duì)自動(dòng)問答系統(tǒng)的研究已經(jīng)得到越來越多的重視,用戶可以通過這些研究成果或方法快速得到自己想要的答案。本文對(duì)微信公眾平臺(tái)進(jìn)行了簡(jiǎn)單的介紹,分析了系統(tǒng)的主要功能模塊,并實(shí)現(xiàn)了一個(gè)簡(jiǎn)單的自動(dòng)問答系統(tǒng)。測(cè)試結(jié)果表明,該系統(tǒng)達(dá)到了預(yù)期的效果。但是FAQ庫的內(nèi)容來源及其后期的維護(hù)和補(bǔ)充仍是一個(gè)龐大的工程,有大量的工作需要做。
參考文獻(xiàn):
[1] 毛先領(lǐng),李曉明.問答系統(tǒng)研究綜述[J].計(jì)算機(jī)科學(xué)與探索,2012.6(3):
193-207
[2] 張德申,秦紅亮.微信公眾平臺(tái)開發(fā)—訂閱號(hào)功能開發(fā)研究[J].電子
技術(shù)與軟件工程,2013.18:66-68
[3] 李永春,丁華福.Lucene的全文檢索的研究與應(yīng)用[J].計(jì)算機(jī)技術(shù)與
發(fā)展,2010.20(2):12-15
[4] 黃翼彪.開源中文分詞器的比較研究[D].鄭州大學(xué),2013.
[5] 強(qiáng)繼朋.FAQ問答系統(tǒng)中的問句相似度研究[D].合肥工業(yè)大學(xué),
2013.