王衛(wèi)紅,金凌劍
(浙江工業(yè)大學(xué) 計(jì)算機(jī)科學(xué)與技術(shù)學(xué)院,浙江 杭州 310023)
情感分析是指在給定的評(píng)論中確定評(píng)論者的情緒傾向,一般分為正面情緒和負(fù)面情緒。廣泛使用的情感分析方法有以情感詞典為基礎(chǔ)的方法、以傳統(tǒng)機(jī)器學(xué)習(xí)為基礎(chǔ)的方法和以深度學(xué)習(xí)為基礎(chǔ)的方法。情感分析是從一句簡單的評(píng)論中得出評(píng)論者的情緒,是近年來自然語言處理的一個(gè)熱門。Spark是一個(gè)優(yōu)秀的大數(shù)據(jù)處理框架,相比較于Hadoop在速度、通用性、易用性、兼容性等方面都有更好的表現(xiàn),同時(shí)Spark提供了各種機(jī)器學(xué)習(xí)算法,可以更好地進(jìn)行數(shù)據(jù)分析[1]。隨著社會(huì)的發(fā)展,傳統(tǒng)的情感分析方法已經(jīng)不能滿足不斷增大的信息量和人們對(duì)于準(zhǔn)確性的要求。針對(duì)這兩點(diǎn),國內(nèi)外學(xué)者進(jìn)行了大量的研究[2]。Mogha等[3]基于Spark,比較了樸素貝葉斯、決策樹、隨機(jī)森林等算法的分類準(zhǔn)確性,結(jié)果顯示決策樹算法的結(jié)果最好。Baltas等[4]在Spark平臺(tái)下對(duì)Twitter數(shù)據(jù)進(jìn)行情感分析,得出樸素貝葉斯的分類效果最佳。Hai等[5]在Spark集群中研究樸素貝葉斯和隨機(jī)森林兩種算法的分類結(jié)果,發(fā)現(xiàn)兩種算法的準(zhǔn)確率都不錯(cuò)。上面的文章都是在Spark平臺(tái)上對(duì)不同算法進(jìn)行的比較,并沒有對(duì)算法的創(chuàng)新,更多的是在尋找最佳資源和最佳參數(shù)配置。Govindarajan等[6]基于樸素貝葉斯和遺傳算法提出了混合的分類算法,此方法在精度上要比單獨(dú)的樸素貝葉斯和遺傳算法更好。雖然對(duì)于單獨(dú)的樸素貝葉斯和遺傳算法來說,測(cè)試時(shí)間由于數(shù)據(jù)維度的減少而減少了,但對(duì)于集成算法來說效率還有待提升。Sharma等[7]提出基于Boosting的SVM情感分析模型,Boosting算法由Kearns等[8]提出,這種算法可以有效地提高SVM模型的效率,使準(zhǔn)確性顯著優(yōu)于單一支持向量機(jī),可是這樣一來算法的復(fù)雜度增加了,而且運(yùn)算效率也不如從前。Dong等[9]基于神經(jīng)網(wǎng)絡(luò),以自適應(yīng)和遞歸的方法提出了AdaRNN,該算法的分析中加入了對(duì)上下文以及句子語法的標(biāo)記,以自適應(yīng)的方式傳播,使情感分類具有關(guān)鍵詞依賴性,提高了準(zhǔn)確率,但同樣也增加了復(fù)雜度。這幾篇文章對(duì)算法作出了自己的改進(jìn),提高了分類的準(zhǔn)確性,但同時(shí)也降低了效率。
在上述的背景下,筆者提出了一種以Spark平臺(tái)為基礎(chǔ),結(jié)合多種算法的集成算法來進(jìn)行英文評(píng)論數(shù)據(jù)的情感分析。首先對(duì)評(píng)論數(shù)據(jù)進(jìn)行預(yù)處理,得出情感標(biāo)簽和評(píng)論內(nèi)容;然后對(duì)評(píng)論內(nèi)容進(jìn)行分詞處理,并去除停用詞、標(biāo)點(diǎn)符號(hào)和稀有詞;接著使用改進(jìn)后的TF-IDF算法獲得特征向量,以AdaBoost算法對(duì)決策樹和SVM進(jìn)行弱分類器訓(xùn)練,最后將兩種分類器的所有分類器根據(jù)權(quán)值集成為最終分類器,使用最終分類器得到最終分類結(jié)果。
圖1為文本數(shù)據(jù)處理流程圖。先輸入文本數(shù)據(jù),然后篩除非法詞,再篩除無影響詞,接著提取特征向量并輸出。
圖1 文本數(shù)據(jù)處理流程圖Fig.1 The flow chart of the text data processing
這里的特征向量提取使用了改進(jìn)后的TF-IDF算法,此算法通過修飾情感詞的副詞來決定情感詞的權(quán)重,關(guān)注了詞與詞之間的聯(lián)系,這種內(nèi)在聯(lián)系可以使后續(xù)的處理效果提升。
非法詞包括不是英文字母的字符、數(shù)字和單個(gè)字母。將評(píng)論數(shù)據(jù)以空格為分隔符進(jìn)行分詞,使用正則表達(dá)式去除非英文字母的字符和數(shù)字。將剩下的單詞進(jìn)行長度計(jì)算,篩除長度為一的單詞。
無影響詞包括停用詞和稀有詞。停用詞包括a、the、and、be、as等891 個(gè)與情感無關(guān)的詞,稀有詞指只出現(xiàn)過一次的詞。將篩除非法詞后的數(shù)據(jù)進(jìn)行進(jìn)一步的篩選,引入停用詞表,將數(shù)據(jù)中的停用詞刪除。統(tǒng)計(jì)所有詞匯出現(xiàn)的次數(shù),將出現(xiàn)次數(shù)為一的也刪除。
筆者使用的是改進(jìn)后的TF-IDF特征向量提取算法。詞頻-逆向文件頻率(TF-IDF)[10]是一種在文本挖掘和向量化中常用的加權(quán)技術(shù),它主要用來表現(xiàn)某個(gè)詞語在某篇文章中的重要程度。TF-IDF實(shí)際上是TF與IDF的乘積。TF詞頻,指的是某個(gè)詞語在某篇文章中出現(xiàn)的次數(shù)。IDF逆向文件頻率用來衡量一個(gè)詞語普遍重要性。任意一個(gè)特定詞語的IDF,都可以用總文件數(shù)目除以包含該詞語的文件的數(shù)目,再對(duì)上述結(jié)果取對(duì)數(shù)得到。某個(gè)詞語在某個(gè)文件中的較高頻率,以及該詞語在所有文件中的較低頻率,可以產(chǎn)生出高權(quán)重的TF-IDF。因此,TF-IDF傾向于過濾掉常見的詞語,保留重要的詞語。在TF-IDF的原理中,某個(gè)詞語在某篇文章中出現(xiàn)的頻率高,在其他文件中出現(xiàn)的頻率很低,那么這個(gè)詞語就具有很好的分類能力,適合用來分類。TF,IDF可表示為
(1)
(2)
TFi,j-IDFi=TFi,j×IDFi
(3)
傳統(tǒng)的TF-IDF算法存在明顯的不足之處。它簡單地認(rèn)為文本頻率小的單詞就重要,而文本頻率大的則沒什么用處。這使得它不能很好地反應(yīng)單詞的有用程度,對(duì)于分類問題來說,最重要的是單詞能夠反應(yīng)它所在的類,然而傳統(tǒng)的方法沒有考慮特征項(xiàng)在不同類別里的分布。同時(shí)傳統(tǒng)方法不能很好地辨別情感詞,也沒有關(guān)聯(lián)上下文的功能,程度副詞如“很”“非?!钡仍~在修飾情感詞時(shí)應(yīng)當(dāng)提高情感詞的得分。
根據(jù)上述的不足提出一種改進(jìn)的特征提取方法,修改TF特征值的權(quán)重為
(4)
(5)
計(jì)算單詞ti在各個(gè)分類中的平均詞頻為
(6)
則類間的離散度[11]用標(biāo)準(zhǔn)差與平均值之商表示為
(7)
當(dāng)特征項(xiàng)只在一個(gè)類別出現(xiàn)時(shí),離散度取值最大為1,當(dāng)特征值在所有類別都出現(xiàn)時(shí),離散度取值最小為0。綜上所述TF-IDF可以轉(zhuǎn)換為
(8)
最終對(duì)每一個(gè)特征項(xiàng)進(jìn)行評(píng)估時(shí)就不是簡單地將詞頻與逆文檔頻率相乘,而是考慮了情感詞與程度副詞的關(guān)系和特征項(xiàng)與類別的關(guān)系。
決策樹(Decision tree)[12-13],作為一種歸納學(xué)習(xí)算法,其重點(diǎn)是將看似無序、雜亂的已知實(shí)例,通過某種技術(shù)手段將它們轉(zhuǎn)化成可以預(yù)測(cè)未知實(shí)例的樹狀模型,每個(gè)內(nèi)部節(jié)點(diǎn)都是對(duì)某個(gè)屬性的一次測(cè)試,樹中的每一條路徑代表某個(gè)測(cè)試的輸出,每條路徑都有一個(gè)終點(diǎn),稱之為葉節(jié)點(diǎn),每個(gè)葉節(jié)點(diǎn)則代表不同的類別。決策樹算法的優(yōu)勢(shì)在于,它不僅簡單易于理解,而且高效實(shí)用,構(gòu)建一次,就可以多次使用,或者只對(duì)樹模型進(jìn)行簡單地維護(hù)就可以保持其分類的準(zhǔn)確性。支持向量機(jī)(Support vector machine)[14-15]是一類按監(jiān)督學(xué)習(xí)方式對(duì)數(shù)據(jù)進(jìn)行二元分類的廣義線性分類器,其決策邊界是對(duì)學(xué)習(xí)樣本求解的最大邊距超平面。SVM使用鉸鏈損失函數(shù)計(jì)算經(jīng)驗(yàn)風(fēng)險(xiǎn)并在求解系統(tǒng)中加入了正則化項(xiàng)以優(yōu)化結(jié)構(gòu)風(fēng)險(xiǎn),是一個(gè)具有稀疏性和穩(wěn)健性的分類器。因?yàn)樘荻忍嵘龥Q策樹算法(Gradient boosting decision tree)在各方面的優(yōu)越表現(xiàn)[16-17],讓筆者明白了決策樹算法的迭代能夠有效提高算法的準(zhǔn)確性。SVM基于結(jié)構(gòu)風(fēng)險(xiǎn)最小化的學(xué)習(xí)技術(shù),使它在很多數(shù)據(jù)集上都有優(yōu)秀的表現(xiàn),特別是在平衡的數(shù)據(jù)集上具有較好的分類性能和泛化能力,因?yàn)楣P者使用的是較平衡的數(shù)據(jù)且AdaBoost又是一個(gè)迭代的算法,所以選用它們兩個(gè)作為弱分類算法。
AdaBoost算法是一種提升方法,將多個(gè)弱分類器,組合成強(qiáng)分類器,由Yoav Freund和Robert E Schapire在1995年提出[18]。作為一種Boosting方法,AdaBoost在很多算法上都有著不俗的表現(xiàn)[19-22]。它主要是將前面一個(gè)弱分類器分錯(cuò)的樣本進(jìn)行權(quán)值加強(qiáng),然后使用權(quán)值更新后的樣本來訓(xùn)練下面一個(gè)新的弱分類器。在每輪訓(xùn)練中,用樣本總體訓(xùn)練新的弱分類器,產(chǎn)生新的樣本權(quán)值以及該弱分類器的話語權(quán),一直迭代直到達(dá)到預(yù)定的錯(cuò)誤率或達(dá)到指定的最大迭代次數(shù)。通過第一步和第二步的操作,分別得出決策樹算法和SVM算法的弱分類器,最后通過第三步將兩個(gè)算法的弱分類器集成為一個(gè)強(qiáng)分類器模型。步驟如下:
1) 訓(xùn)練數(shù)據(jù)(每個(gè)樣本)的權(quán)值賦予。設(shè)有N個(gè)樣本,則每一個(gè)訓(xùn)練的樣本點(diǎn)最開始時(shí)都給一個(gè)一樣的權(quán)值w,值為1/N,其權(quán)值表達(dá)式為
D1=(w11,w12,…,w1i,…,w1N)
(9)
式中:D1為第1次迭代每個(gè)樣本的權(quán)值;w1i為第1次迭代時(shí)的第i個(gè)樣本的權(quán)值;N為樣本總數(shù)。
2) 訓(xùn)練弱分類器。設(shè)進(jìn)行m次迭代,此時(shí)的權(quán)值為Dm,此時(shí)的基本分類器為Gm(x)。計(jì)算Gm(x)在訓(xùn)練數(shù)據(jù)集上的分類誤差率為
(10)
式中yi為訓(xùn)練數(shù)據(jù)中的類別標(biāo)簽??梢灾勒`差率就是被誤分類樣本的權(quán)值之和。根據(jù)誤差率可以計(jì)算各分類器的權(quán)值,也就是基本分類器在最終分類器中的權(quán)重為
(11)
然后更新訓(xùn)練數(shù)據(jù)的權(quán)值,在訓(xùn)練過程中,如果某個(gè)樣本的類別已經(jīng)確認(rèn),那么在下一次訓(xùn)練中,它的權(quán)重就被降低;相反,如果某個(gè)樣本的類別還沒有確認(rèn),那么它的權(quán)重Dm就得到提高,其計(jì)算式為
Dm+1=(wm+1,1,wm+1,2,…,wm+1,i,…,wm+1,N)
(12)
i=1,2,…,N
(13)
式中:Dm+1為下一次迭代時(shí)的樣本權(quán)值;wm+1,i為下一次迭代時(shí)第i個(gè)樣本的權(quán)值;Zm為歸一化因子,使得所有樣本對(duì)應(yīng)的權(quán)值之和為1,可表示為
(14)
3) 強(qiáng)分類器的構(gòu)建。每次訓(xùn)練結(jié)束都會(huì)得到一個(gè)弱分類器,通過計(jì)算它們的誤差率來確定它們?cè)谧罱K分類函數(shù)中的話語權(quán)。誤差率高的弱分類器話語權(quán)低,誤差率低的弱分類器話語權(quán)高。換言之,誤差率低的弱分類器在最終分類器中占的比例較大,反之較小。這里得到的弱分類器有兩種,分別是決策樹弱分類器和支持向量機(jī)弱分類器。因?yàn)閮煞N分類器的權(quán)值可能處于不同數(shù)量級(jí),所以將它們的權(quán)值分別進(jìn)行標(biāo)準(zhǔn)化操作,其計(jì)算式為
(15)
(16)
(17)
式中:G_DTm(x)為決策樹弱分類器;G_SVMm(x)為支持向量機(jī)弱分類器。得到最終分類器為
(18)
算法的實(shí)現(xiàn)流程如圖2所示。
圖2 集成算法的實(shí)現(xiàn)流程圖Fig.2 The implementation flow chart of the integration algorithm
本實(shí)驗(yàn)采用Hadoop和Spark分布式架構(gòu)來進(jìn)行實(shí)驗(yàn),實(shí)驗(yàn)中使用的軟件版本和環(huán)境配置如表1所示。
表1 實(shí)驗(yàn)環(huán)境Table 1 Experimental environment
筆者數(shù)據(jù)采用kaggle[23]網(wǎng)站中Amazon用戶的英文評(píng)論。選取了訓(xùn)練數(shù)據(jù)100 000 條,其中包含正面情緒數(shù)據(jù)和負(fù)面情緒數(shù)據(jù)各50 000 條;測(cè)試數(shù)據(jù)10 000 條,其中包含正面情緒數(shù)據(jù)和負(fù)面情緒數(shù)據(jù)各5 000 條。數(shù)據(jù)包含兩個(gè)部分,一個(gè)是區(qū)分正負(fù)面情緒的標(biāo)簽,_label_1表示負(fù)面情緒,_label_2表示正面情緒;另一個(gè)是評(píng)論的內(nèi)容。
根據(jù)1.3節(jié)中改進(jìn)的TF-IDF算法和2節(jié)中的集成分類模型,針對(duì)不同的分布式平臺(tái)進(jìn)行了實(shí)驗(yàn),如表2所示。
表2 不同平臺(tái)下不同算法的耗時(shí)
表2記錄了Hadoop平臺(tái)和Spark平臺(tái)對(duì)于不同算法在數(shù)據(jù)預(yù)處理和算法預(yù)測(cè)上的平均耗時(shí)。其中IDT和ISVM表示使用了改進(jìn)后的TF-IDF算法,I-集成算法不但使用了改進(jìn)后的TF-IDF算法還將決策樹和SVM集成,而集成算法僅僅集成了決策樹和SVM,使用的還是傳統(tǒng)的TF-IDF。從整體數(shù)據(jù)上看,Spark無論是在數(shù)據(jù)處理上的耗時(shí)還是算法預(yù)測(cè)上的耗時(shí)都少于Hadoop平臺(tái)。單個(gè)比較數(shù)據(jù)處理的耗時(shí)來看,Spark在數(shù)據(jù)處理上的速度是Hadoop的好幾倍;而從算法預(yù)測(cè)的耗時(shí)上看Spark的優(yōu)勢(shì)并不明顯。
此處還添加了名為AdaBoostSVM的集成算法[24],此算法采用基于SVM的AdaBoost算法。從實(shí)驗(yàn)數(shù)據(jù)上看:由于使用傳統(tǒng)的TF-IDF算法,且沒有集成其他算法,所以在數(shù)據(jù)處理上的耗時(shí)與SVM算法相差不大,與筆者的集成算法相比要少。而從算法預(yù)測(cè)耗時(shí)上看:無論是在Hadoop平臺(tái)還是Spark平臺(tái),此算法就比筆者的集成算法要多不少。
如圖3所示,筆者還實(shí)驗(yàn)了不同的節(jié)點(diǎn)數(shù)對(duì)于耗時(shí)的影響,這里主要使用的是集成算法在兩大平臺(tái)的耗時(shí)。對(duì)于兩大平臺(tái)來說,一開始的耗時(shí)是隨著節(jié)點(diǎn)數(shù)的增加,耗時(shí)也減少,到了一定節(jié)點(diǎn)數(shù)之后節(jié)點(diǎn)數(shù)對(duì)于耗時(shí)的影響就不大了。
圖3 不同節(jié)點(diǎn)數(shù)的耗時(shí)Fig.3 Time-consuming of different number of nodes
對(duì)于不同的算法,進(jìn)行了情感分析的分類實(shí)驗(yàn),圖4展示了不同算法的分類準(zhǔn)確率。其中DT和SVM算法都使用了原始的TF-IDF算法,而IDT和ISVM算法都使用了改進(jìn)后的TF-IDF算法。從圖4中可以看出:使用了改進(jìn)后的TF-IDF相比較傳統(tǒng)的TF-IDF來說,在SVM算法上的準(zhǔn)確率提高了8%,在決策樹算法上的準(zhǔn)確率提高了將近10%。集成算法使用的是傳統(tǒng)的TF-IDF在準(zhǔn)確率上相比較于使用了改進(jìn)后TF-IDF的IDT和ISVM算法來說提升并不明顯,而I-集成算法不但使用了改進(jìn)后的TF-IDF,還集成了兩個(gè)算法,在準(zhǔn)確率比集成算法高了近4%。由此可知改進(jìn)的TF-IDF算法對(duì)集成算法有加強(qiáng)的效果。對(duì)于AdaBoostSVM集成算法,在實(shí)驗(yàn)中可以看到它的準(zhǔn)確率與筆者的集成算法相差不大,甚至有所不如,而與I-集成算法相比較來說就低了不少。
1—DT;2—SVM;3—IDT;4—ISVM;5—AdaBoostSVM; 6—集成算法;7—I-集成算法。圖4 不同算法的分類準(zhǔn)確率Fig.4 Classification accuracy of different algorithms
對(duì)于上述的實(shí)驗(yàn),集成算法的迭代采用的都是20 次,同樣的迭代次數(shù)難免會(huì)對(duì)集成算法的最好結(jié)果會(huì)有影響,所以對(duì)于不同迭代次數(shù)下集成算法的準(zhǔn)確性也需要進(jìn)行研究。
如圖5所示,當(dāng)?shù)?~20 次時(shí),集成算法的準(zhǔn)確率隨迭代次數(shù)的增加而增加,而迭代超過20 次之后,集成算法的準(zhǔn)確率基本不再變化。同時(shí)在迭代達(dá)到30 次之后,所花費(fèi)的時(shí)間比30 次之前要長幾百甚至幾千倍。
圖5 不同迭代次數(shù)下集成算法的分類準(zhǔn)確率Fig.5 Classification accuracy of ensemble algorithm under different iterations
通過對(duì)大數(shù)據(jù)分類方法的研究,在Spark平臺(tái)的基礎(chǔ)上,提出了一種情感分析集成算法。該算法采用改進(jìn)后的TF-IDF算法提取特征向量,并使用類似AdaBoost算法的方式將決策樹算法和SVM算法集成。同時(shí)對(duì)于不同平臺(tái)的耗時(shí)和不同節(jié)點(diǎn)數(shù)的耗時(shí),還有不同算法的準(zhǔn)確率以及不同迭代次數(shù)對(duì)于集成算法準(zhǔn)確率的影響進(jìn)行了實(shí)驗(yàn)。從實(shí)驗(yàn)結(jié)果來看:Spark在數(shù)據(jù)處理上比Haoop快,但兩者在算法運(yùn)行速度上相差不大;兩個(gè)平臺(tái)對(duì)于節(jié)點(diǎn)數(shù)的增加耗時(shí)都會(huì)減少,但到達(dá)一定節(jié)點(diǎn)數(shù)之后耗時(shí)就基本不會(huì)減少;集成算法對(duì)于其他原生算法來說準(zhǔn)確率提高不少;迭代次數(shù)的增加會(huì)對(duì)集成算法的準(zhǔn)確率有所提高,但次數(shù)達(dá)到一定大小后準(zhǔn)確率也會(huì)趨于平穩(wěn),同時(shí)隨著迭代次數(shù)的增加,耗時(shí)也會(huì)不斷增加,到了后期耗費(fèi)的時(shí)間可能會(huì)成幾百上千倍地增加。從整體結(jié)果上看:集成算法雖然相比較基本算法準(zhǔn)確率有所提高,但從其他更高級(jí)算法的來看還遠(yuǎn)遠(yuǎn)不夠,下一步可以繼續(xù)改進(jìn)特征向量提取算法,集成更加優(yōu)秀的基本算法或者減少集成算法的耗時(shí)。