宋祖康,閻瑞霞
(上海工程技術(shù)大學 管理學院,上海 201620)
在自然語言處理領(lǐng)域,情感分析一直是一個比較熱門的研究方向,伴隨著互聯(lián)網(wǎng)的發(fā)展,大量的商業(yè)評論涌現(xiàn)在各個平臺上,商業(yè)評論大多夾雜著用戶對商品的個人意見,因此對于這些評論文本情感極性的判別研究,可以幫助企業(yè)更好地了解自己產(chǎn)品或服務(wù)的客戶滿意度[1]。傳統(tǒng)對文本的情感極性判別是從20世紀90年代開始的基于機器學習的方法。傳統(tǒng)機器學習的方法主要分為兩個步驟,首先人工構(gòu)造特征來獲取所需的文本信息。在這一步中,使用的傳統(tǒng)方法是詞袋模型(BOW)[2],將每個詞依據(jù)事先建立的詞典轉(zhuǎn)換為one-hot向量,這種方法存在的一個缺點就是得到的文本向量具有高維度、高稀疏的特點,因此出現(xiàn)了一些降維的方法,如TF-IDF、SVD模型等等。另外為了使向量能夠表現(xiàn)上下文的信息,還出現(xiàn)了LDA、詞嵌入(word embedding)[3]等模型,而詞嵌入模型則更是將深度學習算法映入到自然語言領(lǐng)域的一個重要研究成果。在獲取了所需的文本信息后,需要構(gòu)建分類器對文本的情感極性進行分類。經(jīng)典的機器學習方法基本都能夠使用在文本分類之中,如支持向量機、隨機森林、樸素貝葉斯等算法。
近年來,由于詞向量等特征學習方法持續(xù)獲得關(guān)注,深度學習在自然語言領(lǐng)域的發(fā)展也尤為迅速。深度學習模型可以自動從數(shù)據(jù)中提取特征,如Bengio等[4]利用深度學習思想構(gòu)建的神經(jīng)概率模型,將各種深層神經(jīng)網(wǎng)絡(luò)使用在大規(guī)模英文語料庫上學習,完成了命名實體識別以及句法分析等多個自然語言處理的任務(wù),CNN(convolutional netural network,卷積神經(jīng)網(wǎng)絡(luò))與RNN(recurrent neural network,循環(huán)神經(jīng)網(wǎng)絡(luò))也被證明是情感分類任務(wù)上的有效模型。在文本的情感分類方面,Yuan S[5]、Vieira J P A[6]、Zhao Y[7]、Zhang Y[8]、Vo Q H[9]等利用循環(huán)神經(jīng)網(wǎng)絡(luò)與卷積神經(jīng)網(wǎng)絡(luò)等模型對短文本進行情感分類,獲得了很好的效果,但是由于RNN模型的梯度爆炸問題,因此基于RNN模型的LSTM與GRU模型是目前比較常用的模型[10-14]。因此文中提出了基于CNN-BIGRU的中文文本情感分類模型,構(gòu)建CNN模型提取句子的局部特征,使用RNN模型中的雙向GRU模型提取句子的上下文長距離依賴特征,利用Keras開源庫中的Merge層將兩個模型融合。在譚松波的酒店評論語料上采用十折驗證法進行實驗驗證,實驗結(jié)果證明,該模型比傳統(tǒng)的RNN與CNN模型在準確率與F值上都有顯著提高。
最早的詞向量模型為one-hot詞袋模型,將所有模型構(gòu)成一個詞典D,用一個長向量來表示一個詞,這種詞向量容易造成維度災(zāi)難,并且不能很好地表示詞的上下文關(guān)系,例如“他打了我”和“我打了他”的詞向量是相同的,但是卻有完全不同的意思[9]。而在近幾年出現(xiàn)了一種分布表示詞向量的模型,基本思想是把所有的詞用固定長度的向量來表示,最近谷歌開源的word2vec詞向量模型就屬于這種分布式模型。在文中所構(gòu)建的模型中,借鑒了分布式表示詞向量的方法。
首先提取文章中所有的單詞,按其出現(xiàn)的次數(shù)降序排序,接著將每個編號賦予一個one-hot詞向量,然后使用skip-gram模型生成一個矩陣M。skip-gram模型是一個一到多的詞向量生成模型,在模型中,首先會隨機初始化矩陣M,然后使用神經(jīng)網(wǎng)絡(luò)來訓練矩陣M,標簽為附近詞對應(yīng)的one-hot編碼,通過這種方法可以生成固定長度的詞向量,模型結(jié)構(gòu)見圖1。
圖1 skip-gram模型
CNN模型最初常應(yīng)用在圖像處理領(lǐng)域,卷積神經(jīng)網(wǎng)絡(luò)模型與一般神經(jīng)網(wǎng)絡(luò)模型相似,它是由輸入層、隱藏層和輸出層組成,可以捕捉數(shù)據(jù)的局部特征,主要是通過反向傳播算法進行參數(shù)的優(yōu)化。
CNN網(wǎng)絡(luò)的輸入層是前文所述的詞向量矩陣,即分詞后的句子矩陣。假設(shè)一個句子在中文分詞后有M個詞,則這個詞向量矩陣的行數(shù)為M行,每個詞的詞向量維度是N維,矩陣為一個M*N的矩陣。CNN網(wǎng)絡(luò)的隱藏層包括有卷積層和池化層,卷積層是CNN網(wǎng)絡(luò)的核心層,通過不同大小的卷積核,可以對文本依次進行卷積運算,得到確定個數(shù)的卷積映射。池化層往往與卷積層交替出現(xiàn),主要是負責對特征的大小進行壓縮,以簡化網(wǎng)絡(luò)的計算開銷。池化層往往包括average pooling和max pooling,池化層通常是輸入卷積后的特征映射中的最大值,從這個角度上來講,可以解決句子長短不一的問題。CNN的輸出層一般連接著一個softmax層,輸出分類的概率以及最終的分類結(jié)果。
RNN模型與CNN模型相同,其主要架構(gòu)為輸入層、隱藏層和輸出層[15]。RNN模型中,從單一方向輸入一個詞向量矩陣,而輸出單元也將會是一個單一方向矩陣,大部分的工作將在隱藏單元中完成。由于RNN模型常常存在著梯度爆炸的問題,由此而衍生了來源于RNN模型的雙向LSTM模型。GRU模型是LSTM模型的一個變體,它將LSTM模型中的忘記門和輸入門合成了一個單一的更新門,并且還混合了細胞狀態(tài)和隱藏狀態(tài)以及一些其他的改動,最終輸出的模型要比標準的LSTM模型簡單,并且其效果基本一樣。但是GRU模型的狀態(tài)輸出要少一個,在編碼時使用GRU模型可以讓代碼變得簡單一些。因此文中使用GRU模型,GRU模型可以學習長期依賴信息[16-17]。它主要有兩個門,一個是更新門,一個是輸出門,在GRU模型中,當前單元的狀態(tài)是通過計算求和上一個單元狀態(tài)得到,也就是說,模型可以得到歷史信息和當前信息,這在語言處理中對于提取上文信息有很大的幫助。但是標準的無論LSTM還是GRU模型都是以時間順序處理時間序列,這樣的話就會忽略掉下文的信息,因此文中采用了雙向GRU模型。雙向GRU模型是在單層GRU的基礎(chǔ)上擴充了一層GRU模型,通過讓兩層以相反的方向流處理數(shù)據(jù)來獲得上文信息以及下文信息,這樣可以充分提取所有文本的信息,雙向GRU模型結(jié)構(gòu)見圖2。
圖2 雙向GRU模型
通過CNN模型來解決文本分類問題,雖然從一定程度上可以解決維度災(zāi)難問題以及中文文本長短不一的問題,但是CNN模型只能提取局部特征。例如,在“這家酒店的周圍環(huán)境雖然比較嘈雜,但總體還是不錯的”這樣一句話中,固定大小的卷積核,很可能只能提取到“環(huán)境-嘈雜”,而無法將“酒店-不錯”這樣帶有反轉(zhuǎn)色彩的評價提取出來,也就是說,CNN模型無法解決句子的長距離依賴問題,并且,CNN模型需要固定卷積核窗口的大小,對于卷積核的參數(shù)調(diào)節(jié)也比較麻煩。而RNN模型則可以很好地解決對序列的長距離依賴問題,因此文中提出一種新的文本分類模型CNN-BIGRU(CNN-bidirectional-RNN),使用CNN模型作為輔助分類模型,以充分提取句子的局部特征,結(jié)合雙向GRU模型以充分提取句子的長距離依賴特征,具體模型見圖3。
圖3 CNN-BIGRU模型
(1)對評論語料進行預(yù)處理,去除一些無用詞,并且使用python庫中的jieba分詞庫對中文文本進行分詞,輸入skip-gram中訓練得出詞向量。
(2)分別搭建了兩個卷積核步長為2和3的CNN卷積模型,以提取2個與3個詞間距內(nèi)文本信息,記為2-gram與3-gram,將預(yù)處理后的句子矩陣輸入CNN網(wǎng)絡(luò)的輸入層。文中所搭建CNN網(wǎng)絡(luò)的隱藏層包括卷積層和池化層,卷積層為雙層,對文本依次進行卷積運算,激活函數(shù)為relu函數(shù),得到確定個數(shù)的卷積映射后將數(shù)據(jù)輸入池化層,池化層為全局平均池化,以解決句子長短不一的問題。
(3)同時也搭建了一個雙向GRU模型以提取文本的長距離依賴信息,與CNN模型相同,將預(yù)處理后得到的詞向量矩陣按照順序輸入雙向GRU模型輸入層,假設(shè)每個詞的詞向量為xt,依據(jù)圖2可以得到,更新門的計算(σ為sigmoid函數(shù))如下。
rt=σ(Wr·[ht-1,xt])
(1)
輸出門的計算公式如下:
zt=σ(Wz·[ht-1,xt])
(2)
GRU單元狀態(tài)更新公式如下:
(3)
(4)
單元輸出層公式如下:
yt=σ(Wo·ht)
(5)
GRU網(wǎng)絡(luò)的計算使用了BPTT算法,將輸入層記為{x1,x2,…,xn},隱藏層的輸出記為{s1,s2,…,sm},BPTT算法主要是將原來的網(wǎng)絡(luò)折疊開,利用前面時間序列的影響對最后一個分類作判斷,對應(yīng)的每一層的計算方法如下:
ti=Whxxi+Whhhi-1+bh
(6)
hi=e(ti)
(7)
si=Wyhhi+by
(8)
yi=g(si)
(9)
其中:
(10)
(11)
與傳統(tǒng)神經(jīng)網(wǎng)絡(luò)不同的是,GRU的損失函數(shù)為交叉熵函數(shù)。
(4)通過Keras的Merge層將不同卷積核的CNN模型與雙向GRU模型融合為一層模型,并且接入全連接層以及一個sigmoid層,最后實現(xiàn)語料的情感分析。
實驗數(shù)據(jù)為譚松波博士的酒店評論語料,語料規(guī)模為10 000篇,全部是從攜程網(wǎng)上自動采集,語料被分成四個子集,分別是:(1)ChnSentiCorp-Htl-ba-2000:平衡語料,正負類各1 000篇;(2)ChnSentiCorp-Htl-ba-4000:平衡語料,正負類各2 000篇;(3)ChnSentiCorp-Htl-ba-6000平衡語料,正負類各3 000篇;(4)ChnSentiCorp-Htl-u nba-10000:非平衡語料,正類為7 000篇。選用其中的一個語料集ChnSentiCorp- Htl-ba-6000,該語料包含3 000篇積極傾向語料與3 000篇消極傾向語料,文中采用十折驗證法,將語料分成10份,其中9份為訓練集,1份為測試集,因此訓練集為5 400篇,測試集為600篇。數(shù)據(jù)樣例見表1。
表1 數(shù)據(jù)樣例
文中主要使用Keras深度學習接口,以Tensorflow作為后臺框架,實驗器材為聯(lián)想一體機,處理器為Inter Core(TM) i5-4590S CPU @ 3.00 GHz,安裝內(nèi)存為4.00 GB。
3.2.1 文本預(yù)處理
首先對文本進行數(shù)據(jù)清洗,構(gòu)建數(shù)據(jù)詞典,將一些停用詞以及無關(guān)詞去除,然后對數(shù)據(jù)進行分詞,并將數(shù)據(jù)集順序調(diào)整為一條積極評論一條消極評論,以便于使用十折驗證法時訓練集與驗證集的數(shù)據(jù)分布均衡。然后對所有語料編制詞典,賦予索引值,將索引矩陣輸入skip-gram詞向量訓練模型,文中所取句子長度為200個詞,語料超過200個詞部分會被刪去,不足兩百個詞部分對其進行補0操作。
3.2.2 搭建模型
CNN為兩層模型,卷積核分別選用2個、3個以及2個與3個結(jié)合三種步長,RNN為雙向GRU模型,之后使用Merge層將兩個模型做融合,添加Dense層,再添加Sigmoid層對文本進行分類。
卷積神經(jīng)網(wǎng)絡(luò)參數(shù)設(shè)置如表2所示。
經(jīng)過多次試驗,發(fā)現(xiàn)2-gram CNN-RNN、3-gram CNN-RNN與2-3-gramCNN-RNN的迭代論數(shù)設(shè)為20輪、10輪與6輪時,模型即可達到最優(yōu)。
表2 卷積神經(jīng)網(wǎng)絡(luò)參數(shù)設(shè)置
模型試驗結(jié)果對比見表3。
表3 各模型實驗結(jié)果對比
注:2-gram表示兩個詞間距,其余相同。
通過表3可以得出:
(1)相比較RNN模型,采用CNN-BIGRU模型的情感分類準確率在2-3-gram上提升了7.9%,F(xiàn)值提升了0.058,在2-gram與3-gram上準確率分別提高了6.4%與5.3%,F(xiàn)值分別提高了0.053與0.058。分析其原因是雙向GRU模型對上下文特征的提取使得模型對文本情感傾向的提取更加充分,而CNN模型作為輔助模型,使得模型對局部特征的關(guān)注也足夠充分,因此模型的信息提取也更加完善。
(2)相比較CNN模型,文中模型相比較2-gramCNN,準確率分別提高了24.6%、23.5%與26.1%,F(xiàn)值分別提高了0.237、0.242和0.242,相比較3-gramCNN,準確率分別提高了26.3%、25.2%和27.8%,F(xiàn)值分別提高了0.281/0.286和0.286。分析其原因是一方面文中語料雖然是短文本,但文本長度都不是很短,而CNN模型更多地會關(guān)注局部特征,這樣就使得CNN模型的表現(xiàn)很差,而文中模型在局部特征提取能力與長距離文本依賴信息抽取能力上的優(yōu)勢,使得它可以遠遠勝過傳統(tǒng)的CNN模型。
文本情感傾向的判別是自然語言領(lǐng)域如今比較熱門的一個方向,文中提出了一種結(jié)合傳統(tǒng)CNN、RNN模型的CNN-BIGRU模型。該模型不僅兼具了CNN模型的局部特征提取能力,也將雙向RNN模型的信息記憶能力融合進來。首先通過對語料的處理得到可以充分表示文本信息的矩陣向量;其次提出了改進后的RNN-BI-CNN模型,在詞向量矩陣輸入的基礎(chǔ)上針對傳統(tǒng)RNN、CNN與文中模型做了對比實驗。實驗結(jié)果表明,文中模型在情感傾向判別任務(wù)中有著更高的準確率與F值。
文中的創(chuàng)新點在于:采用詞級別的句子情感分析方法,使用雙向GRU模型兼具考慮了上下文關(guān)系,改善了機器學習等傳統(tǒng)統(tǒng)計方法以及基于規(guī)則的情感分類方法對于人工的依賴,并且采用CNN模型作為輔助模型,避免了雙向GRU模型過度關(guān)注長距離特征而忽視局部特征的缺點,利用深度學習的技術(shù)避免了人工構(gòu)建規(guī)則進行分類的繁冗方法,并且在成熟數(shù)據(jù)集上取得了良好的表現(xiàn)。該研究目前僅對小數(shù)據(jù)集進行了二分類,可以為同一文本的多情感問題以及長文本的情感分類問題提供一定的研究思路。