于衛(wèi)紅
(大連海事大學(xué) 航運(yùn)經(jīng)濟(jì)與管理學(xué)院,遼寧 大連 116026)
文本分類是指對于一個特定的文檔,判斷其是否屬于某個類別。根據(jù)目標(biāo)類別的不同,通常將文本分類問題分為三種類型:
(1)二分類:表示分類任務(wù)中有兩個類別(0或者1),如垃圾郵件分類。
(2)多類別分類:表示分類任務(wù)中有多個類別,如客戶的評論情感可分為5個類別:非常滿意、滿意、一般、不滿意、非常不滿意。
(3)多標(biāo)簽分類:表示給每個樣本分配一個標(biāo)簽集。如,一個文本可能被同時認(rèn)為是與宗教、政治或教育都相關(guān)的話題,或全部無關(guān)。
在文本挖掘的實(shí)際應(yīng)用中,多類別分類問題更加常見,并且,多標(biāo)簽分類問題也可以轉(zhuǎn)化為多類別分類問題來加以解決。多類別分類問題較之二分類問題更加復(fù)雜,如何選擇合適的算法,構(gòu)建出性能較優(yōu)的多類別分類模型至關(guān)重要。
決策樹、隨機(jī)森林、樸素貝葉斯等算法都可用于多類別分類問題,但每個算法都是基于某些特定的假設(shè)的,都具有各自的優(yōu)缺點(diǎn),沒有任何一種分類算法可以在所有的問題解決中都有良好的表現(xiàn)。因此,只有比較了多種算法的性能才能為具體的問題選擇出較佳的模型。
如圖1所示,無論何種類型的文本分類問題,其處理過程大都包括文本預(yù)處理、文本特征表示、分類模型構(gòu)建、模型評估幾個步驟。其中,文本特征表示和分類模型的構(gòu)建是文本分類問題的核心。
圖1 文本分類的流程
1.2.1 詞袋模型
詞袋模型是一種基于詞頻的對文檔進(jìn)行特征提取的方法,即將文檔看作詞的集合,對文檔中出現(xiàn)的所有詞進(jìn)行詞頻統(tǒng)計(jì),用詞頻向量來表示文檔。詞袋模型忽略了文本的語法和語序等要素,只考慮詞在文檔中出現(xiàn)的次數(shù)。
1.2.2 TF-IDF模型
TF-IDF模型在考慮詞頻的基礎(chǔ)上考慮了詞對于一篇文章的重要性。TF(term frequency)指的是一個單詞在某個文檔中出現(xiàn)的頻率。通常,一個詞在一篇文檔中出現(xiàn)的頻率越高,這個詞對于該文檔越重要。IDF(inverse document frequency)指的是逆向文檔頻率,代表了詞對于文檔的區(qū)分度,如果一個詞在一篇文檔中多次出現(xiàn),但在其他文檔中很少出現(xiàn),則認(rèn)為這個詞對于該文檔的區(qū)分能力較強(qiáng)。一個詞的TF-IDF值的計(jì)算公式為:
TF-IDF=TF*IDF;
(1)
1.2.3 詞嵌入模型
基于詞嵌入的文本特征表示是一種文本深度表示模型,其主要思想是將文本轉(zhuǎn)換為較低維度空間的矢量表示。首先基于大量的語料庫訓(xùn)練出詞嵌入模型,即將每個詞映射成K
維實(shí)數(shù)向量(通常K
=50~200),并且使得這些向量能較好地表達(dá)不同詞之間的相似和類比關(guān)系,以引入一定的語義信息。常用的詞嵌入算法有Word2Vec和Glove。本研究使用Word2Vec算法,Word2Vec有兩種實(shí)現(xiàn)詞嵌入的方式,即CBOW(連續(xù)詞袋)和SKIP-GRAM(跳字模型)。CBOW方法以上下文單詞作為輸入,預(yù)測目標(biāo)單詞;而SKIP-GRAM方法以目標(biāo)單詞作為輸入,預(yù)測單詞周圍的上下文。最后,基于訓(xùn)練好的詞嵌入模型,使用Doc2Vec算法生成文本的向量表示模型,即將每個文本映射成K
維實(shí)數(shù)向量。構(gòu)建文本分類模型的算法有很多,如傳統(tǒng)算法:決策樹、多層感知器、樸素貝葉斯、邏輯回歸和SVM;集成學(xué)習(xí)算法:隨機(jī)森林、AdaBoost、lightGBM和xgBoost;以及深度學(xué)習(xí)算法:前饋神經(jīng)網(wǎng)絡(luò)和LSTM。對所有算法進(jìn)行比較,工作量巨大,本研究只比較常用的5種算法:決策樹、KNN、樸素貝葉斯、SVM和隨機(jī)森林。
1.3.1 決策樹
決策樹是一種以樹形結(jié)構(gòu)來展示決策規(guī)則和分類結(jié)果的模型,其思想是通過ID3、C4.5、CART等算法將看似無序、雜亂的訓(xùn)練數(shù)據(jù)轉(zhuǎn)化成可以預(yù)測未知實(shí)例的樹狀模型。決策樹中每一條從根節(jié)點(diǎn)(對最終分類結(jié)果貢獻(xiàn)最大的屬性)到葉子節(jié)點(diǎn)(最終分類結(jié)果)的路徑都代表一條決策規(guī)則。
1.3.2 KNN
KNN算法又稱K
鄰近算法、K
最近鄰算法,其核心思想是如果一個樣本在特征空間中的K
個最相鄰的樣本中的大多數(shù)屬于某一個類別,則該樣本也屬于這個類別,并具有這個類別上樣本的特性。1.3.3 樸素貝葉斯
樸素貝葉斯算法的核心思想非常樸素:對于給出的待分類項(xiàng),求解在此項(xiàng)出現(xiàn)的條件下各個類別出現(xiàn)的概率,哪個最大,就認(rèn)為此待分類項(xiàng)屬于哪個類別。
1.3.4 SVM
SVM即支持向量機(jī)算法,最初提出是為了解決二分類問題,核心思想是基于訓(xùn)練集在樣本空間中找到最優(yōu)的一條線(超平面),將不同類別的樣本分開。所謂的“支持向量”就是那些落在分離超平面邊緣的數(shù)據(jù)點(diǎn)形成的線。SVM算法也可以用于解決多類別分類問題,此時,支持向量機(jī)仍將問題視為二分類問題,但會引入多個支持向量機(jī)用來兩兩區(qū)分每一個類,直到所有的類之間都有區(qū)別。
1.3.5 隨機(jī)森林
隨機(jī)森林是一種集成學(xué)習(xí)算法,通過構(gòu)建并結(jié)合多個學(xué)習(xí)器來完成學(xué)習(xí)任務(wù)。隨機(jī)森林的出現(xiàn)主要是為了解決單一決策樹可能出現(xiàn)的很大誤差和過擬合的問題,其核心思想是將多個不同的決策樹進(jìn)行組合,利用這種組合降低單一決策樹有可能帶來的片面性和判斷不準(zhǔn)確性。隨機(jī)森林中的每一棵決策樹都是獨(dú)立、無關(guān)聯(lián)的,當(dāng)對一個新的樣本進(jìn)行判斷或預(yù)測時,讓森林中的每一棵決策樹分別進(jìn)行判斷,看看這個樣本應(yīng)該屬于哪一類,然后統(tǒng)計(jì)哪一類被選擇最多,就預(yù)測這個樣本為哪一類。
二分類問題常用準(zhǔn)確率、查準(zhǔn)率、召回率等指標(biāo)評估模型的優(yōu)劣,而對于多類別分類問題,有些二分類的評價指標(biāo)則不適用。
通常使用Kappa系數(shù)對多類別分類模型進(jìn)行評估。Kappa系數(shù)是統(tǒng)計(jì)學(xué)中用于評估一致性的一種方法,分類問題的一致性就是模型的預(yù)測結(jié)果與實(shí)際分類結(jié)果是否一致。Kappa系數(shù)的取值范圍是[-1,1],值越大,則表示模型的分類性能越好。
Kappa系數(shù)的計(jì)算公式為:
(2)
其中,p
是每一類正確分類的樣本數(shù)量之和除以總樣本數(shù),也就是總體分類精度。假設(shè)每一類的真實(shí)樣本個數(shù)分別為a
,a
,…,a
;而預(yù)測出來的每一類的樣本個數(shù)分別為b
,b
,…,b
;總樣本個數(shù)為n
,則有:(3)
本研究在比較對象上考慮了文本特征表示方法和分類算法兩個維度。其中,文本特征表示選取了TF-IDF、詞嵌入CBOW和詞嵌入SKIP-GRAM三種方法;分類算法包括5種:決策樹、SVM、KNN、樸素貝葉斯和隨機(jī)森林。對不同的文本特征表示方法和分類算法進(jìn)行組合,構(gòu)成15種分類模型,以這15種分類模型為比較對象。
在比較指標(biāo)上考慮了時間和分類效果。分類效果使用Kappa系數(shù)來衡量,時間方面包括:(1)文本特征表示的處理時間;(2)分類模型的構(gòu)建時間與測試樣本的預(yù)測時間之和。時間均以秒為單位。
在比較流程上考慮了數(shù)據(jù)規(guī)模與比較次數(shù)?;舅悸肥牵?/p>(1)在原始數(shù)據(jù)集中隨機(jī)采樣
N
條數(shù)據(jù);(2)分別使用TF-IDF、詞嵌入CBOW、詞嵌入SKIP-GRAM方法構(gòu)建這N
條數(shù)據(jù)的文本特征矩陣,將這N
條數(shù)據(jù)按照一定的比例(如8∶2)拆分成訓(xùn)練集和測試集;(3)分別使用SVM、KNN等不同的分類算法基于不同的文本特征表示構(gòu)建分類模型,并對測試集進(jìn)行預(yù)測,統(tǒng)計(jì)各模型的Kappa系數(shù)、運(yùn)行時間等指標(biāo);
(4)重復(fù)步驟(1)~(3)M
次(如M
=50)后,計(jì)算在數(shù)據(jù)規(guī)模為N
條數(shù)據(jù)時,M
次比較后各比較指標(biāo)的平均值;(5)增加數(shù)據(jù)規(guī)模后繼續(xù)執(zhí)行步驟(1)~步驟(4),如設(shè)定每次增加200條數(shù)據(jù),即N
=N
+200,得到新的數(shù)據(jù)規(guī)模下M
次比較后各比較指標(biāo)的平均值;(6)當(dāng)數(shù)據(jù)規(guī)模超過了原始數(shù)據(jù)集的條數(shù)后停止比較,綜合評估不同數(shù)據(jù)規(guī)模下不同模型的性能。
3.1.1 原始數(shù)據(jù)集
使用八爪魚采集器從好奇心日報、新浪網(wǎng)、網(wǎng)易等媒體閱讀網(wǎng)站爬取了3 000條不同類別的資訊文本,整理成研究所需要的原始數(shù)據(jù)集,保存到CSV格式的文件中。該數(shù)據(jù)集由分類、標(biāo)題、正文三個字段組成,如圖2所示。
圖2 原始數(shù)據(jù)集示例
其中,文本類別有6個:商業(yè)、娛樂、游戲、文化、智能和時尚,各類別文本的數(shù)據(jù)量在原始數(shù)據(jù)集中大致呈平均分布,數(shù)據(jù)集適合做多類別文本分類研究。
3.1.2 訓(xùn)練數(shù)據(jù)集與測試數(shù)據(jù)集
本實(shí)例只研究文本標(biāo)題的自動分類,因此訓(xùn)練集和測試集只涉及到類別和標(biāo)題兩個字段。如前文所述,在比較過程中,每次從原始數(shù)據(jù)集中采樣一定規(guī)模的數(shù)據(jù),將這些數(shù)據(jù)按照8∶2的比例拆分成訓(xùn)練集和測試集。采樣規(guī)模從400條逐漸遞增到3 000條,步長為200,并且,同一規(guī)模的訓(xùn)練集和測試集進(jìn)行50次建模比較。
3.1.3 原始數(shù)據(jù)集中“正文”字段的作用
原始數(shù)據(jù)集中每一條數(shù)據(jù)的正文都是一個長文本,正文總字?jǐn)?shù)達(dá)到了7 854 428,完全可以將正文內(nèi)容作為訓(xùn)練詞嵌入模型的語料庫。
3.2.1 TF-IDF文本特征表示
在R語言環(huán)境下使用quanteda包中的corpus()、tokens()、dfm()、dfm_tfidf等函數(shù)構(gòu)建標(biāo)題的TF-IDF文本特征表示模型,主要語法如下:
原始文件<-read.csv(文件名.csv)
標(biāo)題內(nèi)容<-corpus(原始文件$標(biāo)題)
分詞<-tokens(標(biāo)題內(nèi)容)
分詞<-tokens_remove(分詞, stopwords(language="zh",source="misc"))
文檔詞條矩陣<-dfm(分詞)
TF-IDF文本特征表示<-dfm_tfidf(文檔詞條矩陣)
以采樣400條數(shù)據(jù)為例,得到的標(biāo)題文本的TF-IDF文本特征矩陣如圖3所示。
圖3 標(biāo)題文本的TF-IDF表示矩陣示例
很顯然,使用TF-IDF進(jìn)行文本特征表示文檔詞條矩陣過于龐大并高度稀疏。
3.2.2 基于詞嵌入的文本特征表示
使用R語言的word2vec包構(gòu)建基于詞嵌入的文本表示,主要步驟如下:
步驟1:詞嵌入模型訓(xùn)練文本的分詞、去停用詞等處理。
如前文所述,本實(shí)例將原始數(shù)據(jù)集中“正文”字段的所有文本作為訓(xùn)練詞嵌入模型的語料庫。由于word2vec算法的輸入是詞語列表而不是整篇文章,因此首先需要對訓(xùn)練語料庫進(jìn)行分詞、去停用詞、去符號、去數(shù)字等處理,并將分詞后的語料文件保存成CSV格式文件以備后續(xù)訓(xùn)練詞嵌入模型使用。
步驟2:使用語料文件訓(xùn)練詞嵌入模型。
使用步驟1形成的語料文件和word2vec函數(shù)生成詞嵌入模型。主要語法如下:
詞嵌入語料<-read.csv(語料文件.csv)
CBOW詞嵌入模型<- word2vec(x=詞嵌入語料$語料庫詞條,type="cbow",dim=50,iter=20,split=" ")
將word2vec函數(shù)中的參數(shù)type設(shè)定為“skip-gram”則可以訓(xùn)練出SKIP-GRAM詞嵌入模型,即:
SKIPGRAM詞嵌入模型<- word2vec(x=詞嵌入語料$語料庫詞條, type="skip-gram",dim=50,iter=20,split=" ")
步驟3:使用詞嵌入模型對標(biāo)題文本進(jìn)行特征表示。
基于步驟2訓(xùn)練出的詞向量模型,使用doc2vec函數(shù)將分詞后的標(biāo)題內(nèi)容表示成向量模型,即將每個標(biāo)題內(nèi)容映射成50維實(shí)數(shù)向量。主要語法如下:
文檔ID<-seq(1:采樣條數(shù)))
數(shù)據(jù)框<- data.frame(doc_id=文檔ID,text=標(biāo)題文本分詞后的詞表, stringsAsFactors=FALSE)
基于CBOW詞嵌入的文本特征表示<-doc2vec(CBOW詞嵌入模型,數(shù)據(jù)框,type="embedding")
基于SKIP-GRAM詞嵌入的文本特征表示<-doc2vec(SKIPGRAM詞嵌入模型, 數(shù)據(jù)框, type="embedding")
通過上述過程,將每一個標(biāo)題文本映射成50維的實(shí)數(shù)向量。
對于本研究所涉及的SVM、KNN、決策樹、樸素貝葉斯、隨機(jī)森林五種分類算法,在R語言環(huán)境下,使用party、e1071、randomForest等包中提供的函數(shù)進(jìn)行文本分類模型的構(gòu)建。
以使用randomForest包中的隨機(jī)森林算法構(gòu)建基于不同特征表示的分類模型為例:
(1)基于TF-IDF的文本特征表示。
TFIDF分類模型<-randomForest(類別~.,TFIDF特征表示的訓(xùn)練數(shù)據(jù)集,ntree=30,na.action=na.roughfix)
TFIDF預(yù)測結(jié)果<-predict(TFIDF分類模型,TFIDF特征表示的測試數(shù)據(jù)集,proximity=TRUE)
(2)基于詞嵌入CBOW的文本特征表示。
CBOW分類模型<-randomForest(類別~.,CBOW特征表示的訓(xùn)練數(shù)據(jù)集,ntree=30,na.action=na.roughfix )
CBOW預(yù)測結(jié)果<- predict(CBOW分類模型,CBOW特征表示的測試數(shù)據(jù)集,proximity=TRUE)
(3)基于詞嵌入SKIP-GRAM的文本特征表示。
SKIP-GRAM分類模型<-randomForest(類別~.,SKIP-GRAM特征表示的訓(xùn)練數(shù)據(jù)集,ntree=30,na.action=na.roughfix )
SKIP-GRAM預(yù)測結(jié)果<- predict(SKIP-GRAM分類模型,SKIP-GRAM特征表示的測試數(shù)據(jù)集,proximity=TRUE)
在模型構(gòu)建及對測試數(shù)據(jù)集進(jìn)行預(yù)測的過程中統(tǒng)計(jì)運(yùn)行時間,并且在預(yù)測之后構(gòu)建預(yù)測值與真實(shí)值的混淆矩陣,使用VCD包中的Kappa函數(shù)基于混淆矩陣計(jì)算模型的Kappa系數(shù),衡量模型的分類效果。
3.4.1 文本特征表示處理時間的比較
在不同的數(shù)據(jù)規(guī)模下,使用TF-IDF、詞嵌入CBOW和詞嵌入SKIP-GRAM三種方法對文本進(jìn)行特征表示的處理時間變化如圖4所示。
圖4 不同數(shù)據(jù)規(guī)模下使用不同方法進(jìn)行 文本特征表示的處理時間
從圖4可以看出:
在相同的數(shù)據(jù)規(guī)模下,詞嵌入的文本特征表示處理時間都遠(yuǎn)遠(yuǎn)超過TF-IDF,這是因?yàn)樵~嵌入需要對大量的語料庫進(jìn)行訓(xùn)練,而在兩種詞嵌入方法中,SKIP-GRAM比CBOW的訓(xùn)練時間更長(大約是2.5倍)。
三種特征表示的處理時間與數(shù)據(jù)規(guī)模的相關(guān)系數(shù)如表1所示。
表1 文本表示處理時間與數(shù)據(jù)規(guī)模的相關(guān)性
從表1可以看出:
(1)TF-IDF文本特征表示的處理時間與數(shù)據(jù)規(guī)模高度正相關(guān),采樣數(shù)據(jù)越多,處理的詞條數(shù)越多,TF-IDF文本特征表示的處理時間越長;
(2)兩種詞嵌入特征表示的處理時間與所處理數(shù)據(jù)的數(shù)據(jù)規(guī)模之間的相關(guān)性不強(qiáng)。
3.4.2 模型構(gòu)建與預(yù)測時間比較
15種模型在不同數(shù)據(jù)規(guī)模下運(yùn)行時間的變化如圖5所示。由于使用TF-IDF進(jìn)行文本特征表示的模型與使用詞嵌入進(jìn)行文本特征表示的模型在運(yùn)行時間上數(shù)值范圍相差極大,所以在圖5中用上下兩幅圖來闡釋,上圖表示使用TF-IDF進(jìn)行文本特征表示的模型,下圖表示使用詞嵌入進(jìn)行文本特征表示的模型。
圖5 不同數(shù)據(jù)規(guī)模下不同模型的分類建模與預(yù)測時間
從圖5可以看出:
(1)15種模型的運(yùn)行時間均與數(shù)據(jù)規(guī)模高度正相關(guān),相關(guān)系數(shù)如表2所示。
表2 模型的運(yùn)行時間與數(shù)據(jù)規(guī)模的相關(guān)性
(2)在相同數(shù)據(jù)規(guī)模、相同的文本分類算法下,文本特征表示使用TF-IDF的模型運(yùn)行時間遠(yuǎn)遠(yuǎn)超過文本特征表示使用詞嵌入模型的運(yùn)行時間。
(3)綜合來看,在相同的數(shù)據(jù)規(guī)模下,隨機(jī)森林+CBOW模型的運(yùn)行時間最短;而決策樹+TF-IDF模型的運(yùn)行時間最長。最短時間與最長時間的線性擬合關(guān)系如圖6所示。
圖6 隨機(jī)森林+CBOW及決策樹+TF-IDF模型 運(yùn)行時間的線性擬合
3.4.3 模型的分類效果比較
文本多分類模型的分類效果使用Kappa系數(shù)來衡量,15種模型在不同數(shù)據(jù)規(guī)模下Kappa系數(shù)的變化如圖7所示。
圖7 不同數(shù)據(jù)規(guī)模下不同模型的分類效果
從圖7可以看出:
(1)在本研究的任何一種數(shù)據(jù)規(guī)模下,SVM+CBOW模型的分類效果都是最好的;而樸素貝葉斯+TF-IDF模型的分類效果則最差。
(2)在相同的數(shù)據(jù)規(guī)模、相同的分類算法下,文本表示使用TF-IDF方法的模型分類效果都是最差的;使用詞嵌入方法的分類模型的Kappa系數(shù)要比使用TF-IDF的模型的Kappa系數(shù)大很多;兩種詞嵌入模型的Kappa系數(shù)相差不大,總體來說,CBOW模型的分類效果略優(yōu)于SKIP-GRAM模型。
(3)隨機(jī)森林作為集成算法,容易給人造成的誤解是:其性能一定比單一算法要好。但比較結(jié)果發(fā)現(xiàn),在本研究中,當(dāng)使用詞嵌入進(jìn)行文本特征表示時,隨機(jī)森林的分類效果雖然比單一決策樹的分類效果要好,但卻比SVM、KNN、樸素貝葉斯的分類效果差;當(dāng)使用TF-IDF進(jìn)行文本特征表示時,隨機(jī)森林的分類效果最好,然后依次是決策樹、KNN、SVM和樸素貝葉斯。這說明:隨機(jī)森林在高維度、大規(guī)模數(shù)據(jù)集的分類處理上具有一定的優(yōu)勢,但對于少量和低維數(shù)據(jù)集的分類不一定可以得到很好的分類效果。
15種模型的分類效果與數(shù)據(jù)規(guī)模的相關(guān)性如表3所示。
表3 模型的分類效果與數(shù)據(jù)規(guī)模的相關(guān)性
從表3可以看出:
(1)KNN算法和隨機(jī)森林算法與高維的TF-IDF文本表示方法組合時,數(shù)據(jù)規(guī)模越大分類效果越好,說明這兩種算法適合對數(shù)據(jù)量大、高維的數(shù)據(jù)集進(jìn)行分類處理。
(2)決策樹算法與低維的詞嵌入文本表示方法組合時,分類數(shù)據(jù)量越大分類效果越好,說明決策樹方法適合對大量的低維數(shù)據(jù)進(jìn)行分類處理。
(3)樸素貝葉斯和SVM算法明顯不適合對高維數(shù)據(jù)進(jìn)行處理,當(dāng)使用TF-IDF進(jìn)行文本表示時,分類數(shù)據(jù)量越大,這兩種算法的分類效果越差。
本研究綜合考慮了數(shù)據(jù)規(guī)模、數(shù)據(jù)維度(文本表示方法)、分類算法三方面,設(shè)計(jì)了多類別文本分類方法比較方案,從時間和分類效果兩個維度評估分類模型的性能。綜合評估后認(rèn)為,對于多類別文本分類問題:
(1)文本特征表示不建議使用TF-IDF方法。使用TF-IDF方法,盡管在前期文本特征表示的處理時間上有一定的優(yōu)勢,但是由于文本特征矩陣過于稀疏和龐大,導(dǎo)致分類模型的運(yùn)行時間過長、分類效果亦極不理想。
(2)在兩種word2vec詞嵌入算法中,建議選擇CBOW方法,該方法不僅在文本特征表示階段具有明顯的時間優(yōu)勢,而且在建模階段,CBOW與樸素貝葉斯、SVM、KNN算法組合的模型分類效果均非常理想。
(3)在分類算法的選擇上,當(dāng)數(shù)據(jù)規(guī)模不是很大時,不建議選擇隨機(jī)森林等集成算法,隨機(jī)森林算法的優(yōu)勢體現(xiàn)在對高維數(shù)據(jù)的處理上,其與詞嵌入文本表示方法組合未必能達(dá)到非常理想的分類效果。