朱家麒 徐亞軍
摘要:政府網(wǎng)站中的政府公文數(shù)目巨大,對政府公文進行快速有效的分類,可以提供更好的用戶體驗。本文提出基于spark分布式計算框架采用K-means算法對政府公文進行分類的方法。首先從政府網(wǎng)站爬取足量的政府公文數(shù)據(jù),對其進行數(shù)據(jù)預處理,再通過TF-IDF將處理后的政府文本信息轉(zhuǎn)換成二維矩陣,然后在spark計算框架中使用K-means算計進行聚類。最后分別在單機和使用spark框架的分布式計算環(huán)境下進行測試,三組實驗結果表明,使用spark分布式計算框架進行聚類有著更高的計算效率。
關鍵詞:Spark;公文聚類;TF-IDF;K-means
中圖分類號:TP311 文獻標識碼:A
文章編號:1009-3044(2020)01-0210-03
隨著大數(shù)據(jù)、云計算之類的信息技術的發(fā)展,面對大數(shù)據(jù)帶來的數(shù)據(jù)采集、數(shù)據(jù)融合、數(shù)據(jù)傳輸、數(shù)據(jù)處理、數(shù)據(jù)計算、數(shù)據(jù)存儲等一系列問題,許多新的大數(shù)據(jù)計算框架和模型值得我們開發(fā)應用。同時隨著大數(shù)據(jù)的深入應用,國家已發(fā)布多個文件要求強化數(shù)據(jù)資源規(guī)劃,強化數(shù)據(jù)資源管理,推進數(shù)據(jù)資源應用。要求在2020年底前,建成覆蓋全國的“互聯(lián)網(wǎng)+政務服務”技術和服務體系。在“互聯(lián)網(wǎng)+”的背景下,針對政府要業(yè)務數(shù)據(jù)等各類數(shù)據(jù)的管理需求,走向“數(shù)據(jù)治理”成為實現(xiàn)治理體系和治理能力現(xiàn)代化的必然要求。信息渠道的變革,數(shù)據(jù)匯集管理也需要吸收新的技術。政府公文作為政府數(shù)據(jù)的一部分,需要對其進行分類處理。正對著一部分本文考慮用spark計算框架下的聚類技術,實行大數(shù)據(jù)技術下政府公文的分類,提高政府公文的分類效率。
1相關理論以及技術
1.1Spark并行計算框架
Apache spark是一種快速的集群計算技術,專為快速計算而設計。它基于HadoopMapReduce,在MapReduce計算框架基礎上進一步實現(xiàn)了分布式計算,以有效地將其應用于更多類型的計算,包括交互式查詢和流處理。MapReduce是基于磁盤的運行模式,運算結果會暫存于磁盤上,增加內(nèi)存消耗和數(shù)據(jù)傳輸所占用的磁盤I/O的成本,極大的影響總體計算效率。而Spark將中間處理數(shù)據(jù)存儲在內(nèi)存中,數(shù)據(jù)在內(nèi)存中的處理速度至少是在磁盤中的10倍,通過這樣的方式減少對磁盤讀寫操作的數(shù)量,增加總體計算效率。
Spark是Hadoop在2009年加州大學伯克利分校的MateiZa-haria的AMPLab開發(fā)的子項目之一。它是在2010年根據(jù)BSD許可開放。
與Hadoop不同的是,Spark采用彈性分布數(shù)據(jù)集(ResilientDisTributedDataset,RDD)實現(xiàn)了以操作本地集合的方式來操作分布式數(shù)據(jù)集,對集群上并行處理數(shù)據(jù)在內(nèi)存上進行分布式抽象,并基于RDD迭代式計算。RDD是spark最核心的部分,RDD必須是可序列化的。RDD可以緩存到內(nèi)存中,迭代計算的結果都可以放到內(nèi)存中,下一個操作可以直接從緩存中輸入,省去了MapReduce大量的磁盤I/O操作這對于迭代運算比較常見的機器學習算法來說效率提升較大。Spark并行計算框架如圖1所示。
Spark的工作流程為:
(1)構建spark應用程序的運行環(huán)境(啟動Spark Context),SparkContext向Yarn資源管理器注冊并申請執(zhí)行器資源;
(2)資源管理器分配執(zhí)行器資源,執(zhí)行器運行情況將隨著心跳發(fā)送到資源管理器上;
(3)SparkContext構建成DAG圖,將DAG圖分解成階,并將任務發(fā)送給任務分時管理器。執(zhí)行器向Spark Context申請任務,任務分時管理器將任務發(fā)送給執(zhí)行器的同時Spark Context將應用代碼發(fā)送給執(zhí)行器;
(4)任務在執(zhí)行器上運行,運行完畢釋放資源。
1.2聚類算法
聚類算法是把距離作為特征,通過自下而上的迭代方式,快速的將一群樣本分成幾各類別的算法。聚類算法大致分為基于層次和基于劃分的兩種聚類,本文用到的K-means算法則是基于劃分的聚類算法。
K-means算法的步驟包括:
(1)數(shù)據(jù)集隨機選取k個數(shù)據(jù)作為初始的聚類質(zhì)心;
(2)計算剩余的樣本到聚類質(zhì)心的距離,并將其分配到距離最近的簇內(nèi);
(3)將每個簇的樣本平均值作為簇的新聚類質(zhì)心;
(4)判斷樣本的簇是否改變,若改變則返回(2)。
K-means算法的優(yōu)點有:
(1)算法快速簡單;
(2)對大數(shù)據(jù)集有著較高的效率并且可伸縮;
(3)時間復雜度呈線性,適合挖掘大規(guī)模數(shù)據(jù)集。
K-means算法的缺點有:
(1)在K-means算法中的K需要事先確定,K的確定非常難判斷,需要用不同的方法找出合適的K值;
(2)K的選取極大地影響了聚類結果,如果初始值選取的不好,可能無法得到有效的聚類結果。
1.3文本表示
文本是一種無結構的數(shù)據(jù),想要進行聚類,首先必須把文本表示成計算機能夠識別和處理的形式。本文采用最常用的向量空間模型(vSM),向量的每一維都由特征項及其權重組成,特征項的權重用TF-IDF的方法來計算。
其中tfik表示項tk在文本Di中出現(xiàn)的次數(shù),N表示全部訓練集的文本數(shù),nk表示訓練文本中出現(xiàn)tk。的文本頻率數(shù)。Z的取值要根據(jù)實際來確定,一般取0.01。
根據(jù)香農(nóng)信息學理論,如果項在文本中出現(xiàn)的頻率越高,則它包含的信息熵越少;如果項表現(xiàn)較為集中,只在少量文中中有著較高的出現(xiàn)頻率,那它則有著更高的信息熵。
考慮到文本長度也對權重有影響,還應該將權重公式做歸一化處理,將各權重規(guī)范到[0,1]之間:
TF-IDF公式雖然不是一個嚴謹?shù)挠嬎愎?,它只是根?jù)以往經(jīng)驗獲得的一個經(jīng)驗公式,但是其在文本聚類處理方面的有效性值得我們拿來應用。
2實驗及數(shù)據(jù)分析
2.1實驗環(huán)境
實驗平臺配置為4個服務器節(jié)點,每個節(jié)點均為雙核、4GB內(nèi)存的PC;其中一臺作為master,其他臺作為slaves;每個節(jié)點操作系統(tǒng)均為CentOs;Hadoop版本為3.2.0,Java開發(fā)包為JDK1.8.0版本,Hadoop程序使用java編寫;spark版本為2.4.4,scala版本為2.11.12,spark程序由scala編寫。
政府公文數(shù)據(jù)采集自北京市政府網(wǎng)站。實驗分別在單機和spark集群上分別測試。
2.2數(shù)據(jù)預處理
為了將待聚類文本成功輸入到spark的文本聚類程序,常規(guī)的去停用詞操作還不夠,還需要編寫格式處理程序,將待轉(zhuǎn)換的文本集合所有內(nèi)容寫入一個忪t文件,每一行存儲一篇公文的id,標題和正文內(nèi)容。其中正文內(nèi)容是經(jīng)過分詞和去停用詞的詞序列,詞和詞之間使用空格隔開。如圖2所示:
2.3基于Spark的數(shù)據(jù)處理
基于sDark的K-means聚類實現(xiàn)步驟有:
(1)提交聚類任務給Master節(jié)點;
(2)Master用手肘法確定合適的K值,用作初始的聚類質(zhì)心;
(3)Master計算數(shù)據(jù)節(jié)點到質(zhì)心的距離,將數(shù)據(jù)節(jié)點劃分到相應的質(zhì)心;
(4)Master根據(jù)聚類質(zhì)心個數(shù)將任務劃分,并分配到每個slave節(jié)點;
(5)Slave計算節(jié)點到聚類質(zhì)心的距離,將節(jié)點劃分到相應的質(zhì)心;
(6)Slave計算新質(zhì)心的平均值,更行聚類質(zhì)心;
(7)計算準則函數(shù);
(8)判斷聚類是否收斂,是則聚類成功,否則轉(zhuǎn)到(5)繼續(xù)執(zhí)行。
2.4實驗結果對比
本文爬取了三個政府網(wǎng)站的公文,并對這三組公文分別做了聚類實驗,可以發(fā)現(xiàn)單機環(huán)境下聚類的耗時都遠遠大于在spark平臺上聚類的耗時。由此可以看出spark平臺上處理相同數(shù)量的文本比單機效率有著顯著提高。
3結論
本文在spark平臺上,通過實驗驗證了基于spark平臺的K_means公文聚類,發(fā)現(xiàn)聚類算法在處理大量公文時效率相比單機有著較為顯著的提升。