文|熊立波
在當(dāng)前信息爆炸式增長的時(shí)代,用戶對信息服務(wù)的需求已經(jīng)從信息匯聚為主的廣播式服務(wù)逐漸過渡到要求提供按需、定制化、定向的集成化信息服務(wù)。用戶要求能按照其特定的業(yè)務(wù)需求,對信息進(jìn)行預(yù)加工、過濾后,提供給他們精品化的“干貨”。這對我們通訊社的信息服務(wù)方式也提出了新的要求。在大數(shù)據(jù)時(shí)代,信息量呈幾何方式增長,同時(shí)我們也積累了大量的歷史資訊數(shù)據(jù),如果不能對信息進(jìn)行合理的分類,我們就不能按用戶的需求提供給他們需要的信息。但是,如果這些數(shù)據(jù)都按照傳統(tǒng)的人工方式,通過記者和編輯對所有信息進(jìn)行分類、加工,不僅成本巨大,而且信息加工的效率也不能滿足用戶對信息時(shí)效性的要求。當(dāng)前,信息智能分析處理技術(shù),特別是針對于中文的資訊智能處理技術(shù)已經(jīng)有了快速的發(fā)展。通過技術(shù)創(chuàng)新,構(gòu)建資訊自動(dòng)預(yù)處理系統(tǒng),減少人工成本,提高信息生產(chǎn)效率和服務(wù)能力是我們的必經(jīng)之路。
文本自動(dòng)分類技術(shù)(textcategorization)主要指的是依靠基于機(jī)器學(xué)習(xí)的文本分類算法,在預(yù)先給定的類別標(biāo)記(Label)集合下,根據(jù)文本內(nèi)容判定它所屬的類別。
目前應(yīng)用比較成熟的機(jī)器學(xué)習(xí)算法主要是基于統(tǒng)計(jì)學(xué)的機(jī)器學(xué)習(xí)和分類算法,統(tǒng)計(jì)學(xué)習(xí)方法的基本思想就是讓機(jī)器像人類一樣通過對大量已經(jīng)分類好的同類文檔的觀察來學(xué)習(xí)并總結(jié)經(jīng)驗(yàn),作為今后分類的依據(jù)。統(tǒng)計(jì)學(xué)習(xí)方法需要一批由人工預(yù)先進(jìn)行了準(zhǔn)確分類的文檔作為學(xué)習(xí)的材料,計(jì)算機(jī)從這些文檔中挖掘出一些能夠有效分類的規(guī)則,這個(gè)過程被形象的稱為“訓(xùn)練”。訓(xùn)練總結(jié)出的規(guī)則集合常常被稱為分類器。訓(xùn)練完成之后,需要對計(jì)算機(jī)使用這些訓(xùn)練出來的分類器對從來沒有見過的文檔進(jìn)行分類。目前應(yīng)用比較普遍的分類算法主要包括樸素貝葉斯(naive bayes),KNN算法和支持向量機(jī)(SVM, Support Vector Machine)等統(tǒng)計(jì)算法。本文主要采用的是樸素貝葉斯算法,主要原因是樸素貝葉斯算法相對簡單又有較好的準(zhǔn)確度,執(zhí)行效率高,便于實(shí)現(xiàn)對資訊文本進(jìn)行在線實(shí)時(shí)的分類。
全文檢索是指計(jì)算機(jī)索引程序通過掃描文章中的每一個(gè)詞,對每一個(gè)詞建立一個(gè)索引,指明該詞在文章中出現(xiàn)的次數(shù)和位置,當(dāng)用戶查詢時(shí),檢索程序就根據(jù)事先建立的索引進(jìn)行查找,并將查找的結(jié)果反饋給用戶的檢索方式。這個(gè)過程類似于通過字典中的檢索字表查字的過程。
全文檢索的方法主要分為按字檢索和按詞檢索兩種。按字檢索是指對于文章中的每一個(gè)字都建立索引,檢索時(shí)將詞分解為字的組合。對于各種不同的語言而言,字有不同的含義,比如英文中字與詞實(shí)際上是合一的,而中文中字與詞有很大分別。按詞檢索指對文章中的詞,即語義單位建立索引,檢索時(shí)按詞檢索,并且可以處理同義項(xiàng)等。英文等西方文字由于按照空白切分詞,因此實(shí)現(xiàn)上與按字處理類似,添加同義處理也很容易。中文等東方文字則需要切分字詞,以達(dá)到按詞索引的目的,所以分詞器的好壞和效率往往在很大程序上影響全文檢索的準(zhǔn)確性和效率,本文使用的IKanalyzer開源中文分詞器是目前使用比較普遍,效率也較高的開源中文分詞器。
Apache Mahout是Apache Software Foundation(ASF)旗下的一個(gè)開源項(xiàng)目,提供了一些可擴(kuò)展的機(jī)器學(xué)習(xí)領(lǐng)域經(jīng)典算法的實(shí)現(xiàn)。經(jīng)典算法包括聚類、分類、協(xié)同過濾、進(jìn)化編程等等。Mahout的中文意思是“大象的訓(xùn)練師”,而“大象”正是Hadoop的符號,正如Mahout名稱所表達(dá)的意思,Mahout可以構(gòu)架在Hadoop架構(gòu)上,從而實(shí)現(xiàn)對大數(shù)據(jù)進(jìn)行分布式,可擴(kuò)展的并行計(jì)算。Mahout提供的開源分類算法中包含了樸素貝葉斯算法的Java實(shí)現(xiàn)。
Apache Solr同樣也是Apache Software Foundation(ASF)旗下面向企業(yè)的開源搜索服務(wù)器,其核心構(gòu)架在Lucene框架之上,面向企業(yè)應(yīng)用,提供了基于HTTP Web接口的完整的全文檢索、高亮顯示、切片搜索(facet)等全文搜索功能。
系統(tǒng)的主要目標(biāo)是能在線實(shí)時(shí)的對新入庫的資訊文本數(shù)據(jù)進(jìn)行自動(dòng)的預(yù)分類和標(biāo)引,要能夠在線實(shí)時(shí)的被分類、標(biāo)引和全文索引入庫,使用戶能即時(shí)檢索到新入庫的資訊。
資訊分類的流程主要包括“學(xué)習(xí)分類”,“全文索引”和“檢索界面”三個(gè)部分?!皩W(xué)習(xí)分類”流程主要是機(jī)器對由人工預(yù)先分類好的資訊樣本數(shù)據(jù)進(jìn)行學(xué)習(xí),得到并生成分類器,這個(gè)流程由Mahout框架實(shí)現(xiàn);“全文索引”流程是對資訊文本數(shù)據(jù)進(jìn)行分詞和索引,并用學(xué)習(xí)分類流程生成的分類器對資訊的分類屬性進(jìn)行標(biāo)引,這部分功能由Solr框架實(shí)現(xiàn);“檢索界面”流程則是開發(fā)Web檢索界面,便于用戶進(jìn)行查詢和檢索,這部分功能由jQuery和Ajax-solr框架實(shí)現(xiàn)。
1、樣本數(shù)據(jù)
由于分類器是通過對樣本數(shù)據(jù)的學(xué)習(xí)和訓(xùn)練得到的,樣本數(shù)據(jù)所屬分類信息的準(zhǔn)確性對分類結(jié)果的準(zhǔn)確性有很大的影響。為了保證樣本的分類屬性盡量的準(zhǔn)確,本文的樣本數(shù)據(jù)是從互聯(lián)網(wǎng)專業(yè)網(wǎng)站上選取了11個(gè)行業(yè)資訊樣本,每個(gè)樣本有50篇的文本資訊,每篇文本資訊的字?jǐn)?shù)在500字左右。
圖2 樣本數(shù)據(jù)
2、樣本數(shù)據(jù)的學(xué)習(xí)
Mahout樸素貝葉斯分類器的訓(xùn)練學(xué)習(xí)過程主要分為五步:
1.使用mahout seqdirectory命令從訓(xùn)練樣本數(shù)據(jù)生成Seq文件(hadoop文件);
2.使用mahout seq2sparse命令生成向量文件;
3.使用mahout split命令拆分向量文件為“學(xué)習(xí)集”和“驗(yàn)證集”兩個(gè)集合;
4.使用mahout trainnb命令對“學(xué)習(xí)集”向量文件進(jìn)行學(xué)習(xí),生成分類器模型
5.使用mahout testnb命令用“驗(yàn)證集”對上一步生成得到的分類器模型的準(zhǔn)確度進(jìn)行測試和驗(yàn)證,對結(jié)果進(jìn)行分析,如果存在問題則調(diào)整訓(xùn)練樣本文件重新學(xué)習(xí)測試(大多數(shù)問題的原因是訓(xùn)練樣本存在分類二義性)
圖3和圖4分別是用“訓(xùn)練集”和“驗(yàn)證集”驗(yàn)證分類準(zhǔn)確性進(jìn)行驗(yàn)證的輸出結(jié)果,從訓(xùn)練結(jié)果看,用“訓(xùn)練集”驗(yàn)證分類器模型的分類準(zhǔn)確率是100%,用“驗(yàn)證集”驗(yàn)證分類器模型的準(zhǔn)確率是80.2775%,從圖4輸出的測試矩陣可以看出,錯(cuò)誤比較大的是“土地政策”有4篇文章被分類到了“房地產(chǎn)”中,“建筑行業(yè)”有5篇被分類到了“建材業(yè)”中,鋼鐵行業(yè)有7篇被分類到了“建材業(yè)”,但是從業(yè)務(wù)角度分析,這幾個(gè)行業(yè)的確有相似的地方,80.2775%分類的準(zhǔn)確性還是可以接受的。
本文使用的新聞數(shù)據(jù)是新華社多媒體數(shù)據(jù)庫中歷時(shí)半年的部分歷史資訊數(shù)據(jù),一共是58萬余條。本文使用了開源的pysolr接口,開發(fā)python程序把文本資訊寫入到solr索引庫中,然后使用Solr調(diào)用分類器對寫入的資訊數(shù)據(jù)進(jìn)行索引和分類,主要步驟是:
1.在solr的schema.xml文件中建立索引字段,由于新聞資訊數(shù)據(jù)都是中文,本文使用了IKanalyzer開源中文分詞器;
2.開發(fā)程序?qū)π侣剶?shù)據(jù)文件進(jìn)行解析,建立新聞數(shù)據(jù)字段與solr索引字段的映射關(guān)系,調(diào)用pysolr進(jìn)行資訊的逐條寫入;
3.配置solr的solrconfig.xml文件,使得solr可以調(diào)用外部的分類器對特定的字段(本文是對DOC_CONTENT字段)進(jìn)行分類并進(jìn)行標(biāo)引。
檢索界面為用戶提供全文檢索和分類檢索的功能,本文使用的是基于jQuery的ajax-solr開源框架,檢索界面把用戶輸入的檢索參數(shù)拼裝成http請求,訪問后臺(tái)的solr檢索引擎,獲得的結(jié)果再回寫入檢索界面展示給用戶。
從圖7可以看出,分類器對每篇資訊所屬的11個(gè)行業(yè)的可能性都進(jìn)行了打分,分值最大者是最有可能屬于的分類,分類器對《智慧城市建設(shè)助推新興產(chǎn)業(yè)“落地” 為地方經(jīng)濟(jì)轉(zhuǎn)型升級帶來契機(jī)》這篇文章的分類判定為“g”——汽車業(yè),通過打開正文分析,是因?yàn)槲闹刑岬搅恕爸悄芙煌ā?,所以這篇文章在需要判定的11個(gè)行業(yè)中,汽車業(yè)是最接近的(見圖8)。
本文對58萬條余文本數(shù)據(jù)進(jìn)行了在線的分類和索引,并對使用分類器和不使用分類器的資訊入庫性能進(jìn)行了對比。從圖9、10中可以看出,當(dāng)使用了分類器以后,較大的影響了文章索引的性能,58萬數(shù)據(jù)全部完成索引的時(shí)間是307分鐘,平均是31篇/秒,即1860篇/分鐘,比沒有分類器的索引時(shí)間多了1倍多。但是這個(gè)索引和分類速度已經(jīng)可以完全滿足目前新華社自有資訊業(yè)務(wù)的需求,同時(shí)由于本文的試驗(yàn)環(huán)境是PC虛擬機(jī),如部署到服務(wù)器上整體性能還會(huì)有進(jìn)一步提升。
本文創(chuàng)新性的把分類算法和全文檢索引擎結(jié)合到了一起,通過技術(shù)創(chuàng)新,提出并實(shí)現(xiàn)了對文本資訊的在線自動(dòng)分類和全文索引,同時(shí)實(shí)現(xiàn)了較好的分類準(zhǔn)確性和分類檢索效率。下一步將進(jìn)一步優(yōu)化分類算法和提高分類索引的效率,以期盡快應(yīng)用到新華社實(shí)際的采編業(yè)務(wù)流程中去。