張 妍,許云峰,張立全
(1.河北科技大學(xué)信息科學(xué)與工程學(xué)院,河北石家莊 050018;2.中國(guó)鐵通集團(tuán)有限公司河北分公司,河北石家莊 050000)
基于云計(jì)算的中文分詞研究
張 妍1,許云峰1,張立全2
(1.河北科技大學(xué)信息科學(xué)與工程學(xué)院,河北石家莊 050018;2.中國(guó)鐵通集團(tuán)有限公司河北分公司,河北石家莊 050000)
通過(guò)搭建Hadoop平臺(tái),將MapReduce編程思想應(yīng)用到中文分詞的處理過(guò)程中,使中文分詞技術(shù)在云計(jì)算環(huán)境中實(shí)現(xiàn)。研究可以在保證原來(lái)分詞準(zhǔn)確率的基礎(chǔ)上,顯著提高中文分詞的處理速度。
中文分詞;云計(jì)算;Hadoop;MapReduce
中文分詞就是將中文連續(xù)的字序列按照一定的規(guī)則重新組合成詞序列的過(guò)程。中文分詞是進(jìn)行中文信息檢索和數(shù)據(jù)挖掘的基礎(chǔ),已經(jīng)廣泛應(yīng)用到相關(guān)領(lǐng)域,如機(jī)器翻譯(MT)、語(yǔ)音合成、自動(dòng)分類、自動(dòng)摘要、自動(dòng)校對(duì)等?,F(xiàn)有的中文分詞算法可分為3大類:基于字符串匹配的分詞方法;基于理解的分詞方法和基于統(tǒng)計(jì)的分詞方法。目前已經(jīng)成熟的中文分詞項(xiàng)目有:SCWS,F(xiàn)udanNLP,ICTCLAS,HTTPCWS,CC-CEDICT,IKAnalyzer,Paoding,MMSEG4J等。其中ICTCLAS是中國(guó)最早開(kāi)發(fā)的中文分詞開(kāi)發(fā)包,IKAnalyzer,Paoding,MMSEG4J是用Java語(yǔ)言開(kāi)發(fā)的中文分詞開(kāi)發(fā)包。
采用IKAnalyzer中文分詞開(kāi)發(fā)包,通過(guò)搭建基于Hadoop的云計(jì)算平臺(tái),將MapReduce編程思想應(yīng)用到中文分詞的處理過(guò)程中,在保證原來(lái)分詞準(zhǔn)確率的基礎(chǔ)上,提高了中文分詞的處理速度。
筆者將系統(tǒng)架構(gòu)在2臺(tái)Dell R410服務(wù)器之上,每臺(tái)服務(wù)器分別部署Vmware vSphere Hypervisor,并安裝4個(gè)FreeBSD操作系統(tǒng),在每個(gè)FreeBSD系統(tǒng)上部署安裝Hadoop 0.2,在Hadoop平臺(tái)上實(shí)現(xiàn)中文分詞算法,單臺(tái)服務(wù)器系統(tǒng)架構(gòu)圖見(jiàn)圖1。
文中的分布式文件系統(tǒng)采用HDFS,HDFS的架構(gòu)建立在8個(gè)節(jié)點(diǎn)組成的集群上,每個(gè)節(jié)點(diǎn)上都運(yùn)行FreeBSD UNIX系統(tǒng),并且配置了Hadoop環(huán)境。HDFS采用了主從(Master/Slave)架構(gòu),一個(gè)集群有一個(gè)Master和多個(gè)Slave,前者稱為名字節(jié)點(diǎn)(NameNode),后者稱為數(shù)據(jù)節(jié)點(diǎn)(DataN-ode)[1]。一個(gè)文件被分割成若干Block存儲(chǔ)在一組Data-Node上。NameNode負(fù)責(zé)打開(kāi)、關(guān)閉和重命名文件及目錄,同時(shí)建立Block與DataNode之間的映射。DataNode負(fù)責(zé)響應(yīng)客戶的讀/寫需求,同時(shí)在NameNode的指揮下實(shí)現(xiàn)Block的建立、刪除以及復(fù)制。
圖1 系統(tǒng)架構(gòu)圖Fig.1 System deployment diagram
MapReduce是一種編程模型,用于大規(guī)模數(shù)據(jù)集的并行運(yùn)算[2]。將單機(jī)運(yùn)行的中文分詞算法應(yīng)用到這種MapReduce編程模型中。由于Hadoop環(huán)境主要支持Java程序運(yùn)行,因此選用IKAnaly-zer這個(gè)開(kāi)源的Java中文分詞工具包,將其分發(fā)到Hadoop的各個(gè)節(jié)點(diǎn)中去。IKAnalyzer是一個(gè)開(kāi)源的、基于Java語(yǔ)言開(kāi)發(fā)的輕量級(jí)的中文分詞工具包,從2006-12推出1.0版開(kāi)始,IKAnalyzer已經(jīng)推出了3個(gè)版本。最初它是以開(kāi)源項(xiàng)目Luence為應(yīng)用主體,結(jié)合詞典分詞和文法分析算法的中文分詞組件,新版本的IKAnalyzer 3.0則發(fā)展為面向Java的公用分詞組件。
中文分詞的MapReduce流程圖見(jiàn)圖2,具體步驟如下。
圖2 中文分詞的MapReduce流程圖Fig.2 MapReduce flow diagram for Chinese word segmentation
1)JobClient向Hadoop分布系統(tǒng)、文件系統(tǒng)HDFS依次上傳3個(gè)文件:job.jar,job.split和job.xml。job.jar里面包含了執(zhí)行此任務(wù)需要的各種類,包括Mapper,Reducer等實(shí)現(xiàn);job.split包括文件分塊的相關(guān)信息,比如數(shù)據(jù)分多少個(gè)塊,塊的大小(默認(rèn)64MB)等;job.xml是對(duì)作業(yè)配置的描述,包括Mapper,Combiner,Reducer的類型、輸入、輸出格式的類型等。這3個(gè)文件實(shí)際上是完成了向JobTracker提交中文分詞任務(wù),并且將用戶提交的大文件分成若干數(shù)據(jù)塊,數(shù)據(jù)塊大小由FileInputFormat的setMaxInputSplitSize和 setMinInputSplitSize來(lái)設(shè)置。
2)JobTracker負(fù)責(zé)向TaskTracker指派映射任務(wù)和規(guī)約任務(wù)。
3)被指派執(zhí)行映射任務(wù)的JobTracker創(chuàng)建Task實(shí)例來(lái)讀取要進(jìn)行中文分詞的分塊文件,處理成原始的〈Key,Value〉鍵值對(duì),其中Key為每一行文本相對(duì)于分塊文件頭的偏移,Value為分塊文件的每一行文本,然后定義一個(gè)IKTokenizer對(duì)象并實(shí)例化,再取出每個(gè)分詞作為Key,計(jì)數(shù)器變量one作為Value。
4)Map中生成的〈Key,Value〉數(shù)據(jù)序列被保存到對(duì)應(yīng)的TaskTracker所在節(jié)點(diǎn)的磁盤里,TaskTracker將這些數(shù)據(jù)序列的存放位置發(fā)送給JobTracker。JobTracker再將此信息發(fā)送給執(zhí)行規(guī)約任務(wù)的TaskTracker。
5)執(zhí)行規(guī)約任務(wù)的TaskTracker根據(jù)JobTracker發(fā)送來(lái)的數(shù)據(jù)序列位置信息從各個(gè)節(jié)點(diǎn)讀取數(shù)據(jù)序列,并執(zhí)行中文分詞匯總?cè)蝿?wù)。
6)執(zhí)行規(guī)約任務(wù)的TaskTracker最后將匯總結(jié)果寫入HDFS。
中文分詞MapReduce化的關(guān)鍵是中文分詞組件在云計(jì)算環(huán)境里的分發(fā)[3]。中文分詞組件的分發(fā),目前有4種方式。
1)將第三方j(luò)ar包放在集群中每個(gè)節(jié)點(diǎn)$HADOOP_HOME/lib目錄下或者JDK的ext目錄下,其中$HADOOP_HOME為Hadoop的根目錄。在FreeBSD下可以通過(guò)編寫shell腳本,用scp或者rcp命令來(lái)實(shí)現(xiàn),但是這種做法依賴操作系統(tǒng),可移植性不強(qiáng)。
2)將所有的jar包解壓縮,然后把它和源程序的類文件打包到一個(gè)jar包中。這種方法可以用Eclipse的Export功能輕松實(shí)現(xiàn),因此,筆者推薦用此方法。
3)用.(file,conf)或者.(archive,conf),其中路徑是HDFS上的一個(gè)路徑,不要用HDFS://等類似的路徑,而要用相對(duì)路徑。
4)將第三方j(luò)ar包和源程序類文件打包到一個(gè)jar包中,設(shè)置manifest.mf的classpath值為jar包所在的路徑,這個(gè)路徑必須是相對(duì)應(yīng)當(dāng)前jar包的路徑。該方法主要借鑒了在提交作業(yè)到Hadoop中時(shí),Hadoop尋找classpath的方式來(lái)解決。
筆者通過(guò)實(shí)驗(yàn)測(cè)試比較發(fā)現(xiàn),以上4種中文分詞組件的分發(fā)方法中,只有第2種方法所需的手工輸入較少。因此筆者采用第2種方式對(duì)IKAnalyzer組件進(jìn)行分發(fā)。
實(shí)驗(yàn)用硬件環(huán)境和操作系統(tǒng):Dell R410服務(wù)器2臺(tái),每臺(tái)分別部署Vmware vSphere Hypervisor。在每臺(tái)服務(wù)器上,分別安裝4個(gè)FreeBSD操作系統(tǒng)。在每個(gè)FreeBSD系統(tǒng)上面部署安裝Hadoop 0.2。Dell R410的硬件配置:CPU為Intel Xeon E5504 2GHz,主頻為4GB內(nèi)存。
文中分別用5,6,7,8個(gè)節(jié)點(diǎn)的云計(jì)算環(huán)境,對(duì)18 103個(gè)中文文本進(jìn)行中文分詞和詞頻統(tǒng)計(jì),時(shí)間依次為532,449,396,412s??梢?jiàn)隨著節(jié)點(diǎn)的增加,運(yùn)行相同應(yīng)用程序的時(shí)間線性減少。但是到8個(gè)節(jié)點(diǎn)的時(shí)候,運(yùn)行時(shí)間有所加長(zhǎng)。當(dāng)把這18 103個(gè)文件預(yù)處理成為一個(gè)69.4MB的文件后,在5,6,7,8個(gè)節(jié)點(diǎn)的云計(jì)算環(huán)境中,處理時(shí)間分別為115,112,110,108s。此時(shí)分詞處理速度在8個(gè)節(jié)點(diǎn)時(shí)為69.4/108=0.643 MB/s。節(jié)點(diǎn)和運(yùn)行時(shí)間的關(guān)系見(jiàn)圖3。根據(jù)IKAnalyzer開(kāi)發(fā)方的官方數(shù)據(jù),其單機(jī)的最快速度是83萬(wàn)字/s(1 600KB/s)。處理數(shù)量巨大的小文件并不是MapReduce的長(zhǎng)項(xiàng),因此將輸入的中文文件預(yù)處理成一個(gè)比64MB大的文件是相當(dāng)有必要的,而且文件越大,MapReduce越能發(fā)揮威力。因此將大文件加大到702.8 MB,此時(shí)在8個(gè)節(jié)點(diǎn)上的運(yùn)行時(shí)間為145s,分詞速度為702.8/145=4.265MB/s,那么本文的處理速度已經(jīng)是單機(jī)處理速度的4 265/1 600=2.67倍??梢?jiàn),基于Hadoop的云平臺(tái)可以大幅度提高中文分詞和詞頻統(tǒng)計(jì)的效率。
在云環(huán)境下實(shí)現(xiàn)中文分詞算法,可以大幅度提高中文分詞的處理速度,在2臺(tái)Dell R410服務(wù)器上搭建8節(jié)點(diǎn)的基于Hadoop云平臺(tái)上,可以將分詞速度提高到單機(jī)的2.67倍,并且隨著節(jié)點(diǎn)數(shù)的增加中文分詞處理速度呈線性增加。由此可見(jiàn),基于云計(jì)算技術(shù)的中文分詞算法可以加快中文信息處理的速度,并且可以突破各種中文信息處理應(yīng)用領(lǐng)域的瓶頸。
[1] 何忠育,王 勇,王 瑛,等.基于分布式計(jì)算的網(wǎng)絡(luò)輿情分析系統(tǒng)的設(shè)計(jì)[J].警察技術(shù)(Police Technology),2010(3):14-22.
[2] 李應(yīng)安.基于MapReduce的聚類算法的并行化研究[D].廣州:中山大學(xué),2010.
[3] 許云峰,張 研,趙鐵軍.基于云計(jì)算的商業(yè)情報(bào)采集系統(tǒng)[J].河北科技大學(xué)學(xué)報(bào)(Journal of Hebei University of Science and Technology),2012,33(2):161-165.
Research in to Chinese word segmentation based on cloud computing
ZHANG Yan1,XU Yun-feng1,ZHANG Li-quan2
(1.College of Information Science and Engineering,Hebei University of Science and Technology,Shijiazhuang Hebei 050018,China;2.Hebei Branch,China Tietong(Group)Company Limited,Shijiazhuang Hebei 050000,China)
In this paper,the MapReduce programming ideas are applied to Chinese word segmentation processing in Hadoop platform to apply Chinese word segmentation in the cloud computing environment.The research could effectively improve Chinese word segmentation processing speed on the basis of ensuring the accuracy of word segmentation.
Chinese word segmentation;cloud computing;Hadoop;MapReduce
TP391.1
A
1008-1542(2012)03-0266-04
2011-11-10;責(zé)任編輯:陳書(shū)欣
河北省科技支撐計(jì)劃項(xiàng)目(10213588)
張 妍(1980-),女,河北石家莊人,講師,碩士,主要從事網(wǎng)絡(luò)安全、神經(jīng)網(wǎng)絡(luò)和計(jì)算機(jī)應(yīng)用方面的研究。
圖3 節(jié)點(diǎn)和運(yùn)行時(shí)間的關(guān)系圖Fig.3 Node and run-time diagram