本發(fā)明涉及文本挖掘技術(shù)領(lǐng)域,特別涉及一種基于mpi和adaboost.mh的中文文本分類方法。
背景技術(shù):
文本分類是在文本的類別體系已知的情況下,根據(jù)信息內(nèi)容將文本劃分到與其相關(guān)的類別中去的過程。隨著科學(xué)技術(shù)的進(jìn)步、社會的發(fā)展、計算機(jī)的普及和網(wǎng)絡(luò)時代的來臨,網(wǎng)絡(luò)文本的數(shù)量在急劇增長中,文本分類任務(wù)呈現(xiàn)了新的特點:一、每天都會產(chǎn)生大量的需要進(jìn)行分類的新文本,這些數(shù)據(jù)通常是tb級以上。二、文本的類別呈現(xiàn)出多樣性,即一個文本可以屬于多種類別,比如同一文本既可以屬于歷史,又可以屬于政治,還可以屬于科技等。
傳統(tǒng)的單標(biāo)簽分類方法如決策樹方法、k近鄰方法、神經(jīng)網(wǎng)絡(luò)方法、遺傳算法、貝葉斯分類、支持向量機(jī)等已經(jīng)不能滿足人們的需要。因此現(xiàn)今出現(xiàn)了許多多標(biāo)簽分類方法,主要有br、ecc、adaboost.mh、mlknn、cml、ml-dt、rank-svm等。
adaboost.mh算法是一種對單標(biāo)簽分類算法adaboost的改進(jìn)處理多標(biāo)簽的迭代算法,其核心思想是對同一個訓(xùn)練集訓(xùn)練不同的弱分類器,然后將這些弱分類器結(jié)合起來構(gòu)成一個強(qiáng)分類器。本文中adaboost.mh算法選擇的弱分類器是一級決策樹,該算法思想簡單、易于實現(xiàn)。但由于現(xiàn)在需要分類的文本數(shù)量太大,adaboost.mh算法為了保證分類效果需要進(jìn)行多次的迭代學(xué)習(xí),因此需要大量的訓(xùn)練時間。
為了提高adaboost.mh算法的效率,減少訓(xùn)練時間,現(xiàn)有的解決方法主要是對算法進(jìn)行并行實現(xiàn)。并行的方法主要有openmp、hadoop、spark、mpi。其中openmp可以在單機(jī)上對算法進(jìn)行多線程并行實現(xiàn),不能用于集群。但當(dāng)數(shù)據(jù)量過大時,對機(jī)器內(nèi)存的要求將過高,openmp將不適用。hadoop根據(jù)mapreduce框架通過集群對算法實現(xiàn)并行,但hadoop不擅長處理迭代算法。spark同樣可以使用集群來并行實現(xiàn)算法,但與mpi相比較,速度較慢。
技術(shù)實現(xiàn)要素:
針對海量數(shù)據(jù)構(gòu)建訓(xùn)練集時間較長和使用adaboost.mh算法進(jìn)行分類模型訓(xùn)練需要大量時間的問題,本發(fā)明利用mpi和adaboost.mh相結(jié)合,提出了一種基于mpi和adaboost.mh的并行文本分類方法。
本發(fā)明解決中文文本分類耗時問題的技術(shù)方案是:將預(yù)處理后的文本平均分成p份,每個進(jìn)程處理其中的一份,進(jìn)程依靠mpi實現(xiàn)進(jìn)程間相互通信作為輔助完成對訓(xùn)練集中文文本進(jìn)行特征選擇、構(gòu)建權(quán)值向量、訓(xùn)練分類模型、對待分類文本進(jìn)行分類等工作,從而實現(xiàn)了中文文本分類的并行化,能夠極大程度的提高中文文本分類的時間效率。
鑒于此,本發(fā)明采用的技術(shù)方案是:一種基于mpi和adaboost.mh的中文文本分類方法,包括以下步驟:
(1)文本預(yù)處理:搜集不同領(lǐng)域的中文文本文件,對搜集到的中文文本進(jìn)行中文分詞,然后將標(biāo)點符號及停用詞去除,將分詞后的詞條用空格符分隔保存到訓(xùn)練集數(shù)據(jù)中,作為初步特征。
(2)特征詞選擇:通過使用互信息方法對預(yù)處理文本的初步特征進(jìn)行選擇。
(3)構(gòu)建權(quán)值向量:對每個進(jìn)程的每一篇中文文本文件,掃描判斷挑選的特征詞是否在該中文文本文件中,如果文件中存在該特征詞,這該特征詞對應(yīng)的權(quán)值為1,否則該特征詞對應(yīng)的權(quán)值為0,構(gòu)建中文文本文件權(quán)值向量。
(4)構(gòu)建文本分類模型:利用adaboost.mh算法構(gòu)建分類模型。
(5)對待分類文本進(jìn)行分類:根據(jù)步驟(4)構(gòu)建的分類模型對待分類文本進(jìn)行分類。
進(jìn)一步,步驟(2)所述特征詞選擇的具體步驟為:
首先將訓(xùn)練集數(shù)據(jù)平均分為p份,每個進(jìn)程依次讀取其中的一份;然后分別統(tǒng)計各進(jìn)程的a、b、c、n值,a為在類別c中特征詞t出現(xiàn)的中文文本分?jǐn)?shù);b為在除了類別c的其他類別中特征詞t出現(xiàn)的中文文本分?jǐn)?shù);c為在類別c中特征詞t未出現(xiàn)的中文文本分?jǐn)?shù);n為所有類別中中文文本分?jǐn)?shù)的總和;接著所有進(jìn)程通過mpi中的mpi_reduce函數(shù)對a、b、c、n進(jìn)行歸約求和,結(jié)果保存到進(jìn)程0中,進(jìn)程0根據(jù)歸約求和的結(jié)果計算特征詞t和類別c之間的相似度i;最后通過快速排序算法對特征詞的相似度i進(jìn)行排序,將相似度i較大的n個特征詞保留,并將選擇的結(jié)果廣播給所有的進(jìn)程,所有進(jìn)程根據(jù)收到的廣播信息挑選特征詞。其中相似度i的計算公式為:
上述步驟(4)中分類模型的構(gòu)建過程如下:
步驟一、根據(jù)訓(xùn)練集數(shù)據(jù),每個進(jìn)程對自身所包含樣本標(biāo)簽賦予權(quán)值1/(mk),m為訓(xùn)練集樣本數(shù),即中文文本數(shù),k為樣本的類別總數(shù),即中文文本可能的所屬類別數(shù),類別如科技類、政治類等。
步驟二、每個進(jìn)程根據(jù)公式
步驟三、在進(jìn)程0中根據(jù)公式
步驟四、每一個進(jìn)程根據(jù)權(quán)值分布更新公式
步驟五、重復(fù)步驟二至四t次,第t次迭代時步驟四不操作,獲得t個一級決策樹分類器。對于待分類的中文文本文件,將其平均分成p份讀入p個進(jìn)程,每個進(jìn)程利用所有類別全部的特征詞對其進(jìn)行特征詞的掃描,根據(jù)特征詞是否在中文文本文件中出現(xiàn)對該特征詞賦予權(quán)值,從而得到待分類文本的權(quán)值向量,獲得測試集。然后將測試集平均分成p份,每個進(jìn)程讀取其中的一份,
所述對待分類文本進(jìn)行分類為:將待分類的中文文本文件進(jìn)行上述步驟(1)、(2)和(3)的處理后,獲得權(quán)值向量,即測試集。然后將測試集平均分成p份,每個進(jìn)程讀取其中的一份,根據(jù)t個一級決策樹分類器對各自所包含的樣本分類,最后根據(jù)公式
本發(fā)明具有益效果:本發(fā)明將mpi和adaboost.mh算法相結(jié)合,實現(xiàn)了并行的文本分類算法,解決了當(dāng)數(shù)據(jù)集過大,迭代次數(shù)過多引起的訓(xùn)練時間過長的問題,極大地縮短了中文文本分類的時間。
附圖說明
圖1表示基于mpi和adaboost.mh算法的中文文本分類方法的流程圖;
圖2表示特征詞選擇流程圖,假設(shè)進(jìn)程數(shù)p為4;
圖3表示分類器模型的訓(xùn)練流程圖,假設(shè)進(jìn)程數(shù)p為4。
具體實施方式
下面結(jié)合附圖對本發(fā)明做進(jìn)一步說明。
如圖1所示,本發(fā)明包括以下5個步驟。
1、文本預(yù)處理:通過網(wǎng)絡(luò)爬蟲和搜索網(wǎng)絡(luò)信息等方式搜集不同領(lǐng)域的中文文本文件,對搜集到的中文文本文件進(jìn)行分詞處理??墒褂胕k、ictclas等開源分詞包,對搜集到的文本進(jìn)行中文分詞,然后將標(biāo)點符號及停用詞去除,停用詞為出現(xiàn)頻率非常高但沒有實際意義的詞,如“了”、“的”、“與”等。將分詞后的詞條用空格符分割保存到本地的訓(xùn)練集數(shù)據(jù)中,作為初步特征。
2、特征選擇:通過使用互信息方法對初步特征進(jìn)行選擇。首先使用mpi_init函數(shù)啟動p個進(jìn)程,根據(jù)mpi_comm_rank獲得每個進(jìn)程的進(jìn)程號,利用mpi_comm_size函數(shù)獲得總的進(jìn)程數(shù)p,將所有的訓(xùn)練集數(shù)據(jù)平均分成p份,每個進(jìn)程依次讀取其中的一份,然后每個進(jìn)程分別統(tǒng)計各自的a、b、c、n,然后執(zhí)行mpi_barrier函數(shù)是進(jìn)程間同步,a為在類別c中特征詞t出現(xiàn)的文檔數(shù);b為在除了類別c的其他類別中特征詞t出現(xiàn)的文檔數(shù);c為在類別c中特征詞t未出現(xiàn)的文檔數(shù);n為所有類別中文檔數(shù)的總和。然后根據(jù)mpi_reduce函數(shù)對所有的進(jìn)程中a、b、c、n進(jìn)行歸約求和,獲得相對于整個訓(xùn)練集數(shù)據(jù)的a、b、c、n,結(jié)果存入進(jìn)程0中,進(jìn)程0根據(jù)公式
3、構(gòu)建權(quán)值向量:對選擇特征詞之后的中文文本進(jìn)行構(gòu)建權(quán)值向量,首先對于每個進(jìn)程的每一篇中文文本文件,掃描判斷挑選的特征詞是否在該文件中,如果文件中存在該特征詞,這該特征詞對應(yīng)的權(quán)值為1,否則該特征詞對應(yīng)的權(quán)值為0,例如:特征詞“政府”出現(xiàn)在一篇文章中,那么就將特征詞“政府”的權(quán)值設(shè)為1,否則設(shè)為0。從而構(gòu)建中文文本文件權(quán)值向量。將所有進(jìn)程的樣本權(quán)值向量依據(jù)進(jìn)程號依次保存到train.csv文件中,然后使用mpi_finalize函數(shù)結(jié)束所有進(jìn)程。
4、構(gòu)建文本分類模型:
步驟一、首先使用mpi_init函數(shù)啟動p個進(jìn)程,根據(jù)mpi_comm_rank獲得每個進(jìn)程的進(jìn)程號,利用mpi_comm_size函數(shù)獲得總的進(jìn)程數(shù)p,打開文件train.csv,根據(jù)開設(shè)的進(jìn)程數(shù)p將訓(xùn)練集train分成p塊,(按行分p塊),進(jìn)程讀取其中的r0、r1、r3.....rp-1行(r0表示進(jìn)程0讀入數(shù)據(jù)的行數(shù),每個進(jìn)程讀取的行數(shù)按平均分得到,至多相差1)。例如:14個元素分給4個進(jìn)程,每個進(jìn)程的元素數(shù)為3、4、3、4等。平均分的公式為:low=id×n÷p,low為每個進(jìn)程中的第一個位置,id表示進(jìn)程號,n表示所有的元素個數(shù),p表示進(jìn)程數(shù),high=(id+1)×n÷p-1,high為每個進(jìn)程中的最后一個位置,size=high-low+1,size為每個進(jìn)程中的元素數(shù)。然后,初始化權(quán)值分布,即每個進(jìn)程對所包含的樣本標(biāo)簽賦予權(quán)值1/(mk),其中m為總的樣本數(shù),k為特征數(shù)。
步驟二、每個進(jìn)程統(tǒng)計自身所包含樣本的所有特征詞的權(quán)值
步驟三、通過mpi_reduce函數(shù)對所有的進(jìn)程的
步驟四、所有進(jìn)程通過求得的zt,每一個訓(xùn)練樣本的每一個標(biāo)簽為1的置信度
步驟五、重復(fù)步驟二至四t次,第t次迭代時步驟四不操作,獲得t個一級決策樹分類器,由于每個進(jìn)程中保存的規(guī)則相同,所以將進(jìn)程0中保存的規(guī)則rule保存到rule.csv文件中,使用mpi_finalize函數(shù)來關(guān)閉所有進(jìn)程。
5、對待分類文本進(jìn)行分類
對于待分類的中文文本文件,將其平均分成p份讀入p個進(jìn)程,每個進(jìn)程利用所有類別全部的特征詞對其進(jìn)行特征詞的掃描,根據(jù)特征詞是否在中文文本文件中出現(xiàn)對該特征詞賦予權(quán)值,從而得到待分類文本的權(quán)值向量,接著每個進(jìn)程將獲得的權(quán)值向量依據(jù)進(jìn)程號的先后順序依次保存到test.csv文件中。
然后使用mpi_init函數(shù)啟動p個進(jìn)程,根據(jù)mpi_comm_rank獲得每個進(jìn)程的進(jìn)程號,利用mpi_comm_size函數(shù)獲得總得進(jìn)程數(shù)p,打開rule.csv文件,每個進(jìn)程都讀入rule.csv的所有信息。
接著打開test.csv文件,將待分類樣本平分為p份,每個進(jìn)程讀取其中的一份,然后每個進(jìn)程根據(jù)保存的弱分類器的分類規(guī)則rule和以下公式求得待分類文本的類別,最后使用mpi_finalize函數(shù)關(guān)閉所有進(jìn)程。