謝 鐵 鄭 嘯 張 雷 王修君
(安徽工業(yè)大學(xué)計算機科學(xué)與技術(shù)學(xué)院 安徽 馬鞍山 243002)
基于并行化遞歸神經(jīng)網(wǎng)絡(luò)的中文短文本情感分類
謝 鐵 鄭 嘯 張 雷 王修君
(安徽工業(yè)大學(xué)計算機科學(xué)與技術(shù)學(xué)院 安徽 馬鞍山 243002)
情感分析的一個重要應(yīng)用是判斷用戶對于產(chǎn)品評論的情感傾向,這些用戶評論一般都是字?jǐn)?shù)較少的短文本。傳統(tǒng)方法多利用詞袋模型獲取單詞的淺層特征來進行情感分析,利用這些簡單特征訓(xùn)練的模型在短文本,尤其是在復(fù)雜語法問題上效果并不理想。通過利用深度遞歸神經(jīng)網(wǎng)絡(luò)算法來捕獲句子語義信息,并引入中文“情感訓(xùn)練樹庫”作為訓(xùn)練數(shù)據(jù)來發(fā)現(xiàn)詞語情感信息,在短文本情感五分類的問題上取得了較高的準(zhǔn)確率。針對復(fù)雜模型在海量數(shù)據(jù)訓(xùn)練上的時間效率問題,通過在Spark并行框架下實現(xiàn)了模型的并行化處理,使得模型的可擴展性和時間效率得到提升。
深度學(xué)習(xí) 情感分析 文本分類 Spark
在自然語言中,除了反映客觀事實的信息之外,通常也包含著反映人類主觀感情色彩的信息。情感分析的目的就是讓計算機通過規(guī)則或統(tǒng)計學(xué)習(xí)等手段,來標(biāo)注出人類自然語言文本里表達的情感、觀點。
情感分析的對象最初是篇章級的文本。隨著移動互聯(lián)網(wǎng)的發(fā)展,互聯(lián)網(wǎng)上出現(xiàn)了更多的短文本數(shù)據(jù),情感分析的研究對象也開始轉(zhuǎn)為短文本。短文本相對于篇章級的長文本而言,其提供的信息量較少,且口語化嚴(yán)重,提升了分析和分類難度。在基于機器學(xué)習(xí)的情感分類算法中,傳統(tǒng)方法主要采用了詞袋模型,詞袋模型無法適應(yīng)短文本中更加復(fù)雜的語言環(huán)境,其容錯率大為降低。神經(jīng)概率語言模型出現(xiàn)以后,抽取詞語的特征并進行向量化表示的方法得到了較大認(rèn)可。于是在短文本的情感分類算法中,特征選取也開始從學(xué)習(xí)數(shù)據(jù)集的統(tǒng)計特征轉(zhuǎn)向每個詞語的語義特征。Socher[1]使用的遞歸自編碼模型正是利用詞向量自底向上結(jié)合的方式,來計算一個句子的特征向量。這種語義合成的方式在情感分類任務(wù)中取得了不錯的效果,但無法準(zhǔn)確地捕獲一個詞語對周圍詞語的影響。同時,隨著以微博、社交評論為代表的短文本的大量涌現(xiàn),當(dāng)前算法也面臨了短文本大數(shù)據(jù)帶來的計算性能下降的挑戰(zhàn)。
本文使用遞歸張量神經(jīng)網(wǎng)絡(luò)作為模型,該模型用一個張量參數(shù)捕獲詞語對其鄰近詞語的語義影響。為了使模型能夠運用于中文文本,本文建立了中文情感訓(xùn)練樹庫。為了更好滿足算法對大數(shù)據(jù)處理實時性的需求,本文對該模型在Spark框架下做了并行化處理的優(yōu)化。
情感分析目前主要有兩類方法:基于詞典的方法和基于機器學(xué)習(xí)的方法。前者需要構(gòu)建情感詞典,通過統(tǒng)計文本中情感詞的條目來計算情感傾向,其局限性在于無法解決未登錄詞問題。Pang[2]較早運用機器學(xué)習(xí)方法處理情感分類任務(wù),通過n元模型(n-gram)作為特征,再運用樸素貝葉斯、最大熵分類器、支持向量機進行分類,取得了較好的效果。隨后研究者開始嘗試各種方法進行情感分析任務(wù):Mulle[3]把傳統(tǒng)的特征與句法關(guān)系相結(jié)合。之后Kennedy[4]把上下文語境和情感傾向性轉(zhuǎn)移考慮到特征選擇中。但以上方法本質(zhì)上還是基于詞袋模型,詞袋模型其忽視語序的特點導(dǎo)致某些情形下的分類效果很差。比如,像這樣兩個句子:“這部電影優(yōu)點大于缺點”和“這部電影缺點大于優(yōu)點”,對于詞袋模型來說,這兩個句子具有相同的詞袋模型的向量表示,意味著在詞袋模型中,這兩個句子處理結(jié)果是一樣的。然而,事實上,這兩個句子表達的觀點截然相反。Nakagawa[5]運用加依存樹的條件隨機場模型(CRF)對詞袋模型進行改進,該模型可以適用于一些情感極性轉(zhuǎn)移的情況。但一方面該方法需要大量人工構(gòu)建的語料,另一方面以上方法在建模過程中使用的函數(shù)簡單,特征的選取也較為簡單,導(dǎo)致其對復(fù)雜語句的表達能力有限。
中文文本的情感分析基本沿用英文情感分析的方法。如Zhao[6]等人在CRF的基礎(chǔ)上加入“冗余特征”來進行情感分析。李壽山等人[7]認(rèn)為不同領(lǐng)域需要選擇不同的分類方法,因此他采用一種基于Stacking的組合分類方法用以組合不同的分類。謝麗星[8]等人使用了三種不同的方法,包括表情符號規(guī)則方法,情感詞典規(guī)則方法,基于SVM的層次結(jié)構(gòu)多策略方法,進行情感分析,并指出基于SVM的層次結(jié)構(gòu)多策略方法效果最好。目前針對中文的情感分析的研究進展相對英文的情感分析有所滯后,主要在于中文情感分析存在以下難題。(1) 中文需要分詞,分詞錯誤會對情感分析產(chǎn)生影響。(2) 由于中文一詞多義現(xiàn)象繁多,給中文情感詞典的構(gòu)建造成了難度。如“水分”,一般認(rèn)為是物理意義上的水,為中性詞。引申義為夾雜著不真實的成分,為貶義詞。(3) 中文環(huán)境下,尤其是語言較為隨意的網(wǎng)絡(luò)上,“反諷”的用法較多。這給情感分析造成很大困難。
上述方法多采用語言的淺層特征,如詞頻,這難以應(yīng)對短文本復(fù)雜的語法環(huán)境。因此情感分析任務(wù)開始從這些淺層特征,轉(zhuǎn)向更加抽象的高層特征,如語義。使用深度學(xué)習(xí)可以通過一種深層的非線性網(wǎng)絡(luò)結(jié)構(gòu)來實現(xiàn)復(fù)雜函數(shù)的逼近,從而捕獲數(shù)據(jù)的本質(zhì)特征。深度學(xué)習(xí)的網(wǎng)絡(luò)結(jié)構(gòu)本質(zhì)是一個多層神經(jīng)網(wǎng)絡(luò)[9]。Bengio[10]提出神經(jīng)概率語言模型,使用二元語言模型把單詞映射為一組向量,這種詞向量可以抽象出單詞的語義特征,這為后面深度學(xué)習(xí)算法在自然語言處理領(lǐng)域里的應(yīng)用奠定了基礎(chǔ)。此后,Socher[11]認(rèn)為,文本跟圖像一樣也具有類似的樹形遞歸結(jié)構(gòu),在進行單詞的組合時,往往不是按照單詞的順序組合,而是先組合語法或語義相近的單詞或者短語。這樣一個句子的每個單詞作為一個節(jié)點按照相應(yīng)的語法規(guī)則可以自底向上結(jié)合為一個樹形結(jié)構(gòu)。由于一個詞可以映射為一個詞向量,因此按照這種樹形結(jié)合以后,樹的根節(jié)點則代表著整個文本的向量。隨后,Socher[1]就利用該方法提出遞歸自編碼器模型RAE(RecursiveAutoEncoder) 應(yīng)用于情感分類任務(wù)。但是RAE模型無法完全捕捉復(fù)雜句子結(jié)構(gòu)下長短語的合成語義[12],于是在矩陣向量神經(jīng)網(wǎng)絡(luò)模型(Matrix-VectorRNN)[12]中,在沿用RAE模型中向量的同時為每個節(jié)點賦予一個矩陣。向量描述的是該詞語本身的含義,矩陣則用于描述該詞語是如何改變其相鄰詞語或短句的含義。但MV-RNN的問題在于,參數(shù)太多,而且參數(shù)規(guī)模依賴于詞表大小,這將會導(dǎo)致計算量非常大,學(xué)習(xí)也會不夠充分。遞歸張量神經(jīng)網(wǎng)絡(luò)RNTN(RecursiveNeuralTensorNetwork)[13]解決了這一問題,但該模型依賴于特殊的數(shù)據(jù)集——情感樹庫。如果要在中文文本分析中運用此模型,需要建立一套中文情感訓(xùn)練樹庫。
基于遞歸神經(jīng)網(wǎng)絡(luò)的情感分類模型的核心思想是通過葉子節(jié)點(單詞)自底向上計算父節(jié)點而得到的句子向量來進行情感分類。圖1展示了這一過程,當(dāng)輸入一個句子時,它把該句子解析為一棵二叉樹,每個葉子節(jié)點是一個詞,并以向量表示。接著自底向上計算每個葉子節(jié)點的父節(jié)點的向量。父節(jié)點同樣也將作為下次的輸入接著向上計算父節(jié)點的向量,直到計算到頂點為止。
圖1 節(jié)點利用f函數(shù)來自底向上的合成父節(jié)點向量,通過softmax函數(shù)來預(yù)測情感
圖1中每個單詞是一個d維的向量,并進行隨機初始化。所有的向量存于一個矩陣L。其中L∈Rd×|V|, |V|是數(shù)據(jù)集中所有詞語的個數(shù),即詞表的大小。
每個節(jié)點還包含一個softmax分類器:
ya=softmax(Wsa)
(1)
其中,WS∈Rk×d(k是情感標(biāo)簽的數(shù)量)。a表示節(jié)點的向量。
不同遞歸神經(jīng)網(wǎng)絡(luò)模型最大的區(qū)別在于模型的組合函數(shù)f可以根據(jù)應(yīng)用需求來定義。正如前面所說,遞歸張量神經(jīng)網(wǎng)絡(luò)模型(RNTN)既要捕獲單詞組合時的組合含義,又要保證參數(shù)的數(shù)目不能過多。因此,在遞歸張量神經(jīng)網(wǎng)絡(luò)模型中,使用張量來表示組合參數(shù),所有節(jié)點共用一套張量參數(shù)。這樣通過張量進行坐標(biāo)變換使得某些分量可以依照某些規(guī)則作線性變換,來降低整體的參數(shù)數(shù)量。因此組合函數(shù)為:
p=f([c1;c2]TV[1:d][c1;c2]+w[c1;c2])
(2)
其中,V[1:d]∈R2d×2d×d是張量參數(shù)。
實際上RNN模型可視為RNTN模型在張量V為0時的特例。在這種情況下V不會對輸入的詞向量造成任何影響。反過來,當(dāng)V不為0時,V顯然會改變詞向量的特征。在充分訓(xùn)練以后,可視為張量V捕獲了語義合成時的信息。
模型的任務(wù)是最大化正確預(yù)測情感標(biāo)簽的概率,也就是最小化每個節(jié)點的預(yù)測值yi∈Rc×1與目標(biāo)值ti∈Rc×1的交叉熵(C表示類別的數(shù)目)。
RNTN模型使用如下交叉熵函數(shù):
(3)
其中j表示第j個節(jié)點。θ表示RNTN模型參數(shù),θ=(V,W,WS,L)。
由于softmax分類中對權(quán)重WS求導(dǎo)具有一般性,僅僅是簡單地把各個節(jié)點的誤差相加而得到。因此定義xi作為節(jié)點的一個向量。忽略權(quán)重WS的微分表達式。每一個節(jié)點都是通過權(quán)重V,W遞歸反向傳導(dǎo)修正其誤差。定義δi,s∈Rd×1為節(jié)點i本身的softmax誤差:
δi,s=(WS(yi-ti))?f′(xi)
(4)
其中?是哈達姆算子。取tanh(),f′是其導(dǎo)數(shù)。某一節(jié)點的求導(dǎo)必須是通過樹的自頂向下的計算過程來完成。參數(shù)W,V的完整求導(dǎo)過程是各個非葉子節(jié)點導(dǎo)數(shù)的總和。下面舉例來說明這一問題。對于節(jié)點i,將這個節(jié)點反饋的誤差定義為δi,com。顯然,對于頂點p2來說,它只接收來自自己的softmax誤差。因此δp2,com=δp2,s。δp2,com可用于計算對V的求導(dǎo):
(5)
δp2,down=(WTδp2,com+S)?f′([a;p1])
(6)
其中定義:
(7)
上述中p1節(jié)點的反饋誤差等于該節(jié)點本身誤差加上p2節(jié)點向下傳給p1節(jié)點的誤差δp2,down。其中δp2,down分為兩個部分,δp2,down[1:d]和δp2,down[1+d:2d],前者傳給左孩子a,后者傳給右孩子p1,因此p1的誤差為:
δp2,com=δp1,s+δp2,down[1+d:2d]
(8)
V[k]完整的導(dǎo)數(shù)計算過程就是每個非葉子節(jié)點的導(dǎo)數(shù)相加,公式如下:
(9)
對W的求導(dǎo)方式也是類似的,不再贅述。
RNTN模型的訓(xùn)練是通過最小化交叉熵函數(shù)來實現(xiàn)的,通過對上述參數(shù)求導(dǎo)不難實現(xiàn)梯度下降算法尋找函數(shù)的最優(yōu)值。但傳統(tǒng)的隨機梯度下降(SGD)算法本質(zhì)上是順序性的,這種完全串行都得方式使得參數(shù)更新非常耗時,也因此模型的并行較為困難。
考慮到模型參數(shù)更新過程的獨立性,本文對RNTN模型做如下修改:(1) 將參數(shù)更新部分從RNTN模型中提出,單獨置于參數(shù)服務(wù)器上運行,參數(shù)服務(wù)器由一個或多個節(jié)點組成。(2) 將訓(xùn)練集劃分多個子集,并對每個子集運行一個單獨的RNTN模型。(3) 每個模型副本計算出參數(shù)的最優(yōu)值后,與參數(shù)服務(wù)器交換參數(shù),并獲得參數(shù)服務(wù)器提供的最新參數(shù)進行迭代更新,而參數(shù)服務(wù)器對不同的節(jié)點傳來的參數(shù)進行求平均以更新參數(shù)。
由于模型非常依賴于情感樹庫,語言之間的語法差異使得樹庫無法跨語言,因此這也給模型的跨語言問題上增加的難度。目前中文環(huán)境下并沒有標(biāo)注好的情感樹庫,因此本文為了使RNTN模型能夠適用于中文環(huán)境建立了一套情感訓(xùn)練樹庫。
本文利用python爬蟲在大眾點評網(wǎng)對某一餐飲業(yè)的評論數(shù)據(jù)進行爬取。共收集了11 256條數(shù)據(jù)。首先需要對這些數(shù)據(jù)去除HTML標(biāo)簽以及去除標(biāo)點符號,然后人工去除與評價內(nèi)容無關(guān)的評論數(shù)據(jù)。接下來使用分詞軟件進行分詞處理,本文采用了python下的開源分詞工具Jieba分詞。構(gòu)建語法樹的過程同樣基于上述的遞歸神經(jīng)網(wǎng)絡(luò)模型,但去掉softmax層。為了增加訓(xùn)練結(jié)果中樹結(jié)構(gòu)的可靠性,可以在一個更大規(guī)模的語料中進行訓(xùn)練。在得到語法分析樹后,利用本文建立的標(biāo)注系統(tǒng)對樹的每個節(jié)點人工進行情感標(biāo)注,這樣生成一套含有11 256棵標(biāo)注好情感的語法樹庫,即情感訓(xùn)練樹庫。
考慮到普通兩類(褒貶義)或者三類(褒貶意加中性)情感劃分無法準(zhǔn)確把握句子情感,比如“喜歡”和“非常喜歡”的區(qū)別,或“不是特別滿意”和“特別不滿意”的區(qū)別。此外由于非常極端的情感出現(xiàn)率很低,一般情況下五類足以覆蓋用戶的情感觀點,過多的情感分類也會提升模型訓(xùn)練的難度。綜合以上,本文選擇五類情感劃分——分別為非常消極、消極、中性、積極、非常積極五類。
RNTN模型一方面需要靠情感訓(xùn)練樹庫來決定節(jié)點合成順序,另一方面,通過節(jié)點標(biāo)簽的變化來捕獲句子情感極性的轉(zhuǎn)移。如圖2所示,模型的輸入值是一棵每個節(jié)點都被標(biāo)記了情感標(biāo)簽的句法分析樹。
圖2 “味道很好”這個句子組成的一棵情感訓(xùn)練樹
模型首先會通過一個映射層把每個單詞賦予一個向量,向量通過softmax層,自底向上地根據(jù)語法樹的合成順序來計算出情感極性。在圖2中,注意到“好”字被標(biāo)記為積極類情感,在與“很”字結(jié)合以后,它們的父節(jié)點被標(biāo)記為非常積極類的情感。通過這種極性的變化,來對向量和張量的值進行調(diào)優(yōu),使其捕獲到這種類型的語義變化。
RNTN模型涉及到大量迭代操作,因此本文選擇基于內(nèi)存計算的Spark云計算平臺進行并行化處理。如第2節(jié)所述,算法訓(xùn)練的迭代過程主要集中在梯度下降算法更新參數(shù)部分,通過對這種串行方式的改進,并行化的基本操作主要是將數(shù)據(jù)集劃分為若干分片,并在每個分片上運行一個單獨的模型副本,模型副本之間的通信均需要通過參數(shù)服務(wù)器,該服務(wù)器用于維護各模型副本的參數(shù)狀態(tài)。但是,傳統(tǒng)的并行方式通常是同步模式,比如Spark的Mllib庫以及Mahout。這一做法的缺點在于參數(shù)服務(wù)器總要等待所有節(jié)點提交完參數(shù)誤差以后,再統(tǒng)一進行參數(shù)的更新。由于不同節(jié)點上的處理時間不同,這樣會導(dǎo)致已經(jīng)計算完畢的節(jié)點需要等待其他未完成本輪計算的節(jié)點。而本模型由于計算過程相對獨立,計算結(jié)果并不依賴于其他模型副本的計算結(jié)果,因此最佳方式是異步模式,即:在參數(shù)服務(wù)器上一旦有節(jié)點提交參數(shù),立即更新本地參數(shù),并分配新的參數(shù)給該節(jié)點,無需等待其他節(jié)點計算完畢。在這個過程中一個模型副本產(chǎn)生的最新結(jié)果不會立刻體現(xiàn)在其他模型副本中,直到他們進行下次參數(shù)交換。參數(shù)服務(wù)器也可以是由多個節(jié)點組成,這時每個參數(shù)服務(wù)器只與和自己通信的計算節(jié)點交換參數(shù)。如圖3所示。
圖3 異步模式的并行方式
由于異步模式的一個特點是計算節(jié)點與參數(shù)服務(wù)器交換完參數(shù)需要進行下一輪迭代,因此必須把數(shù)據(jù)集切分成若干子集,一方面如果參數(shù)服務(wù)器是由多臺計算機組成的,可以分配給不同的參數(shù)服務(wù)器,另一方面把大數(shù)據(jù)集切分成多個小批量的數(shù)據(jù)集以便在計算節(jié)點完成計算后多次迭代。需要指出的是,這里和Spark的parallelize函數(shù)進行數(shù)據(jù)切分的目的不同。如果直接使用parallelize函數(shù)把數(shù)據(jù)切分為計算節(jié)點數(shù)量對應(yīng)的份數(shù)并分配給計算節(jié)點,這樣整個模型計算完成仍然需要等待最后一個計算節(jié)點完成計算,就談不上異步模式了。因此異步模式的一個前提就是需要把數(shù)據(jù)切分為非常多個小的子集,然后進行多次迭代實現(xiàn)。
在Spark環(huán)境下進行異步模式的另外一個難點在于,Spark提供的函數(shù)是基于同步并行模式的,那么參數(shù)服務(wù)器在迭代過程中,必須等待計算節(jié)點計算完成才會進行下一輪迭代。所以為了實現(xiàn)異步模式,需要一些改進。例如:在通常做法中,Spark通過mappatations方法把某個計算過程廣播到計算節(jié)點,然后對分配給節(jié)點的數(shù)據(jù)進行一系列的計算,得到結(jié)果后進行下一輪迭代,這和同步模式無異。因此,如果進行異步模式,不能直接廣播計算過程。本文對其修改如下:mappatations傳給計算節(jié)點的函數(shù)作用是用于向參數(shù)服務(wù)器發(fā)出url請求,當(dāng)參數(shù)服務(wù)器接收到請求會返回給該節(jié)點一個模型的副本。計算節(jié)點拿到模型副本完成計算后再向參數(shù)服務(wù)器post出自己的計算結(jié)果。這樣,只要mappatations能夠成功把該函數(shù)分配給某一計算節(jié)點就完成此次迭代,而無需等待計算節(jié)點反饋結(jié)果。
由上分析可知,對RNTN模型并行化的一般步驟如下:首先在參數(shù)服務(wù)器上需要對數(shù)據(jù)切分成若干子集。每次迭代分配給計算節(jié)點一個子集。同時,參數(shù)服務(wù)器上定義gradient函數(shù)和descent函數(shù)。前者用于運行模型的梯度下降過程,該函數(shù)會在計算節(jié)點請求模型副本時發(fā)送給計算節(jié)點執(zhí)行。后者運行于參數(shù)服務(wù)器用于在計算節(jié)點返回梯度時更新參數(shù)。在計算節(jié)點處理每個分片之前,都會向參數(shù)服務(wù)器請求最新的模型副本(包含最新參數(shù)的模型副本),在計算節(jié)點收到模型副本后會執(zhí)行descent函數(shù),運行梯度下降過程。該過程執(zhí)行完畢會向參數(shù)服務(wù)器發(fā)送梯度,此時參數(shù)服務(wù)器更新參數(shù),等待計算節(jié)點發(fā)出下一輪請求。
下面的算法偽代碼中,getModel()的作用是向參數(shù)服務(wù)器請求一個模型的副本。sendGradient()的作用是把誤差返回給參數(shù)服務(wù)器。decent()是在參數(shù)服務(wù)器上更新參數(shù)。gradent()主要是在計算節(jié)點運行模型副本,更新參數(shù)。SparkRNTN()是并行化RNTN的主函數(shù)。
算法1getModel,向服務(wù)器請求最新的模型副本
input:ParamServerIP
//參數(shù)服務(wù)器的IP地址
output:model
//model為包含了最新參數(shù)的RNTN模型副本
getModel(ParamserverIP)
model = getModelFormParamserver(ParamserverIP)
return model
算法2 計算節(jié)點向參數(shù)服務(wù)器返回參數(shù)誤差
input: ParamserverIP,update
//update為參數(shù)誤差
sendGradient(update.ParamserverIP)
sendGradientToParamserver(update,ParamserverIP)
算法3 descent,更新參數(shù)服務(wù)器上的參數(shù)
input:model,update
descent(model,update)
model.paramater += update*α
算法4 在計算節(jié)點訓(xùn)練模型
input:model,data
output:update
gradient(model,data)
update = model.train(data)
return update
算法5 程序的主函數(shù)
input:trees
//輸入數(shù)據(jù)為情感語法樹的括號表示形式
SparkRNTN (trees)
sc = SparkContext()
for i=0 to 數(shù)據(jù)集總和 step = minibatch
data = sc.parallelize(trees[i:i+minibatch])
//把sendGradient、gradient、getModel發(fā)送到計算節(jié)點執(zhí)行
rdd.mapPartitions(sendGradient(gradient(getModel(ParamserverIP), data),ParamserverIP )).collect()
while true:
if 有節(jié)點發(fā)出更新參數(shù)的請求:
update = 獲取計算節(jié)點post來的參數(shù)誤差
descent (model,update)
//在本地更新模型參數(shù)
if 有節(jié)點請求模型:
將最新的model發(fā)送給計算節(jié)點
return model
本文設(shè)計兩套不同的實驗。第一個實驗是驗證模型在中文數(shù)據(jù)下的準(zhǔn)確性。第二個實驗主要是驗證并行RNTN模型的性能。在實驗1中,所用數(shù)據(jù)為11 256條美團網(wǎng)上用戶對新石器燒烤店的評論數(shù)據(jù)。實驗2在Spark云平臺環(huán)境中進行,所用環(huán)境配置為:4臺CPU2.8 GHz、8 GB內(nèi)存的臺式機作為計算節(jié)點,1臺CPU2.2 GHz,內(nèi)存8 GB的臺式機作為參數(shù)服務(wù)器,Spark版本為2.4.1,python版本2.7.3。
5.1 RNTN模型在中文語言環(huán)境下的應(yīng)用
首先對每條數(shù)據(jù)經(jīng)過如下處理:去重,去標(biāo)點,分詞,構(gòu)建語法樹。其中語法樹結(jié)構(gòu)用樹的括號形式表示,并對每個節(jié)點從非常消極到非常積極用1到5之間的數(shù)字進行標(biāo)記。整理后的數(shù)據(jù)如表1所示。
表1 情感樹的括號表示形式
為驗證RNTN模型在中文環(huán)境各類復(fù)雜句式下的情感分類準(zhǔn)確率,本文針對轉(zhuǎn)折句式、否定句式和一般句式幾種不同句式分別做了實驗。其中采用的典型轉(zhuǎn)折句式251條,否定句式198條,一般句式11 256條。
從表2可以看出:首先,單純的word2vec模型能夠捕獲語義信息但無法捕獲情感信息,因此在三類測試中的準(zhǔn)確率均較低。其次,由于詞袋模型忽略語序,無法分辨哪個情感詞在轉(zhuǎn)折之前哪個之后,也就無法區(qū)分情感往哪一方偏移,在否定句式中也只是記錄否定詞出現(xiàn)的次數(shù),因此誤差也較大。RAE在使用語義做特征的基礎(chǔ)上捕獲情感信息,相對其他模型有一定的優(yōu)勢。而RNTN模型由于加入情感樹庫作為訓(xùn)練集,節(jié)點上的標(biāo)簽?zāi)軌蚍浅G宄刂甘厩楦修D(zhuǎn)移或否定現(xiàn)象,加之張量對某些修飾詞語的捕獲,因此獲得了最高的準(zhǔn)確率。同時也驗證了引入了中文情感樹庫的RNTN模型能夠很好地應(yīng)用于中文語言環(huán)境。
表2 情感5分類的準(zhǔn)確率
5.2 RNTN模型在Spark云平臺的并行效果
為了衡量RNTN模型在并行優(yōu)化后的性能,使用如下指標(biāo)[17]:
(1) Scaleup:度量不同處理器規(guī)模下,處理不同規(guī)模數(shù)據(jù)的性能。該指標(biāo)計算式為:
(10)
其中runTime(n×Data,m)表示模型在m個計算節(jié)點上處理n份數(shù)據(jù)的時間,下同。
(2)Sizeup:度量了在平臺固定的情況下,依次增加數(shù)據(jù)量時算法的性能。該指標(biāo)計算式為:
(11)
(3)Speedup:度量了在數(shù)據(jù)規(guī)模相同下,并行計算比串行計算運算速度加快的程度。該指標(biāo)計算式為:
(12)
首先是Scaleup,分別在1臺至4臺機器上處理一份完整的數(shù)據(jù),所得到的Scaleup性能如4圖所示。
圖4 Scaleup的性能展示
從圖4中可以看出,隨著節(jié)點的規(guī)模增大,所得到的Scaleup曲線趨于穩(wěn)定,顯示出了很好的擴展性。此外數(shù)據(jù)量規(guī)模變大,節(jié)點擴展性變高,這是因為數(shù)據(jù)量越大越能較好利用節(jié)點的計算能力。
為驗證Sizeup的性能,本文分別考慮1至4臺計算節(jié)點分別在10倍、20倍和40倍的原始數(shù)據(jù)集上運行的結(jié)果。
從圖5可以看出,除了增加節(jié)點性能會得到提升外。數(shù)據(jù)規(guī)模的增大,也會導(dǎo)致性能的明顯增大,這是因為隨著數(shù)據(jù)規(guī)模增大,節(jié)點通信的時間在整個算法的運行時間的比例會減小。因此獲得了較好的Sizeup性能。
圖5 Sizeup的性能展示
在驗證Speedup性能的實驗中,使用與驗證Sizeup性能一樣的實驗環(huán)境。如圖6所示。
圖6 Speedup的性能展示
可以發(fā)現(xiàn)圖6中隨著節(jié)點數(shù)目變多,線性加速比下降。原因在于節(jié)點數(shù)增加會增加節(jié)點的通信時間。另外在規(guī)模越大的數(shù)據(jù)集上,模型的線性加速比效果越好。因此并行算法可以有效地應(yīng)對大數(shù)據(jù)集。
本文主要工作一是通過構(gòu)建一套中文情感訓(xùn)練樹庫并引入遞歸張量神經(jīng)網(wǎng)絡(luò)模型進行了中文環(huán)境下的5分類短文本情感識別,取得了較好的效果。二是對遞歸張量神經(jīng)網(wǎng)絡(luò)模型實現(xiàn)了并行化處理,通過實驗證明,該并行化的模型有良好的并行性能。
但是并行化的RNTN模型依然有很多問題需要解決。主要在:(1) 在較長文本中,句子的樹形結(jié)構(gòu)會非常壯大,導(dǎo)致性能下降,而且節(jié)點越多,實際上干擾信息也就越多。因此下一步工作解決句子節(jié)點過多對模型產(chǎn)生的負(fù)影響。(2) 在并行化過程中,本文對Spark異步模式改進只是通過建立一個Web服務(wù)器在計算節(jié)點完成任務(wù)之后以Http通信方式來代替Spark內(nèi)部的通信,更好的方式顯然是針對Spark的內(nèi)部通信機制加以改進,未來將會在這方面進行研究。
[1]SocherR,PenningtonJ,HuangEH,etal.Semi-SupervisedRecursiveAutoencodersforPredictingSentimentDistributions[C]//ProceedingsoftheConferenceonEmpiricalMethodsinNaturalLanguageProcessing.AssociationforComputationalLinguistics,2011:151-161.
[2]PangB,LeeL,VaithyanathanS.Thumbsup?SentimentClassificationusingMachineLearningTechniques[C]//ProceedingsofEMNLP-2002,2002:79-86.
[3]Mullen,Tony,NigelCollier.Sentimentanalysisusingsupportvectormachineswithdiverseinformationsources[C]//ProceedingsofEMNLP-2004,2004:412-418.
[4]Kennedy,Alistair,DianaInkpen.Sentimentclassificationofmoviereviewsusingcontextualvalenceshifters[J].ComputationalIntelligence,2006,22(2):110-125.
[5]NakagawaT,InuiK,KurohashiS.DependencyTree-basedSentimentClassificationusingCRFswithHiddenVariables[C]//HumanLanguageTechnologies:The2010AnnualConferenceoftheNorthAmericanChapteroftheAssociationforComputationalLinguistics.AssociationforComputationalLinguistics,2010:786-794.
[6]ZhaoJun,LiuKang,WangGen.AddingRedundantFeaturesforCRFs-basedSentenceSentimentClasification[C]//ProceedingsofEMNLP-2008,2008:117-126.
[7] 李壽山,黃居仁.基于Stacking組合分類方法的中文情感分類研究[J].中文信息學(xué)報,2010,24(5):56-61.
[8] 謝麗星,周明,孫茂松.基于層次結(jié)構(gòu)的多策略中文微博情感分析和特征抽取[J].中文信息學(xué)報,2012,26(1):73-83.
[9]HintonGE,OsinderoS,YwT.Afastlearningalgorithmfordeepbeliefnets[J].NeuralComputation,2006,18(7):1527-54.
[10]BengioY,SchwenkH,SenécalJS,etal.Aneuralprobabilisticlanguagemodel[J].JournalofMachineLearningResearch,2003,3(6):1137-1155.
[11]SocherR,LinCY,NgAY,etal.ParsingNaturalScenesandNaturalLanguagewithRecursiveNeuralNetworks[C]//ICML.2011:129-136.
[12]SocherR,HuvalB,ManningCD,etal.Semanticcompositionalitythroughrecursivematrix-vectorspaces[C]//Proceedingsofthe2012JointConferenceonEmpiricalMethodsinNaturalLanguageProcessingandComputationalNaturalLanguageLearning.AssociationforComputationalLinguistics,2012:1201-1211.
[13]SocherR,PerelyginA,WuJY,etal.Recursivedeepmodelsforsemanticcompositionalityoverasentimenttreebank[C]//ProceedingsoftheConferenceonEmpiricalMethodsinNaturalLanguageProcessing(EMNLP),2013:1631-1642.
[14] 梁軍,柴玉梅,原慧斌,等.基于深度學(xué)習(xí)的微博情感分析[J].中文信息學(xué)報,2014,28(5):155-161.
[15] 李寧,羅文娟,莊福振,等.基于MapReduce的并行PLSA算法及在文本挖掘中的應(yīng)用[J].中文信息學(xué)報,2015,29(2):79-86.
[16]DeanJ,CorradoGS,MongaR,etal.LargeScaleDistributedDeepNetworks[J].AdvancesinNeuralInformationProcessingSystems,2012:1232-1240.
[17]XuX,J?gerJ,KriegelHP.AFastParallelClusteringAlgorithmforLargeSpatialDatabases[J].DataMining&KnowledgeDiscovery,1999,3(3):263-290.
[18] 孫志軍,薛磊,許陽明,等.深度學(xué)習(xí)研究綜述[J].計算機應(yīng)用研究,2012,29(8):2806-2810.
[19] 陳釗,徐睿峰,桂林,等.結(jié)合卷積神經(jīng)網(wǎng)絡(luò)和詞語情感序列特征的中文情感分析[J].中文信息學(xué)報,2015,29(6):172-178.
SENTIMENT CLASSIFICATION OF CHINESE SHORT TEXT BASED ONPARALLELIZED RECURSIVE NEURAL NETWORK
Xie Tie Zheng Xiao Zhang Lei Wang Xiujun
(SchoolofComputerScienceandTechnology,AnhuiUniversityofTechnology,Maanshan243002,Anhui,China)
A significant application of sentiment analysis is to determine the user’s semantic orientation in product reviews which are generally short texts. Traditional methods often acquire the shallow characteristics of words for sentiment analysis through bag-of-words model. However, the model trained through these simple characteristics doesn’t have a good performance in short text, especially complex syntax context. Through using deep recursive neural network to capture the semantic information and introducing a Chinese sentiment training treebank as the training set to find the sentiment information, a relatively higher accuracy on five-class short text sentiment analysis is achieved. Aiming at the problem of training time efficiency in large scale data, the parallelization is implemented through Spark, which can enhance the scalability and time efficiency of the model.
Deep learning Sentiment analysis Text classification Spark
2016-03-28。國家自然科學(xué)
61402008,61402009);安徽省科技重大專項(16030901060);安徽高校省級自然科學(xué)研究重大項目(KJ2014ZD 05);安徽省高校優(yōu)秀青年人才支持計劃。謝鐵,碩士生,主研領(lǐng)域:自然語言處理。鄭嘯,教授。張雷,教授。王修君,講師。
TP3
A
10.3969/j.issn.1000-386x.2017.03.037