朱家麒 徐亞軍



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