陳 欣,楊小兵,姚雨虹
(中國計量大學 信息工程學院,浙江 杭州 310018)
隨著社交網絡和電子商務的快速發(fā)展,微博、Twitter、微信、QQ、Face-book、淘寶、京東等社交網絡和購物平臺給人們的生活帶來了很大的影響,越來越多的用戶喜歡在社交媒體上發(fā)表自己的看法,而不只是瀏覽和接收信息[1]。在國內,微博已經成為許多年輕人分享和獲取信息的核心平臺。在這些信息中包含著喜、怒、哀、樂等個人情緒,對這些信息中的情緒進行分析可以獲得用戶的內心活動、分析用戶的性格特點。分析人們對于公眾事件和社會現象的態(tài)度可以更好的檢測和控制事件進展。因此,對微博等社交媒體中的文本進行情緒分析有重要的意義[2]。
情緒分析主要包含兩個任務:情緒識別和情緒分類[3]。情緒識別就是判斷目標文本是否包含情緒,情緒分類是在情緒識別的基礎上,從人類的心理學角度出發(fā),多維度地描述人的情緒狀況。本文選用的NLPCC2013和NLPCC2014數據集中包含有情緒和無情緒(None)兩大類[4],其中有情緒的文本包含七種基本情緒:喜愛(Like)、快樂(Happiness)、憤怒(Anger)、悲傷(Sadness)、恐懼(Fear)、驚訝(Surprise)、厭惡(Disgust)。
目前,網絡上文本數據的情緒分析常用的研究方法主要分為三類:基于詞典和規(guī)則[5]的方法、基于傳統機器學習[6]的方法、基于深度學習[7-8]的方法?;谠~典和規(guī)則的情緒分類方法能夠體現文本的非結構化特征,解釋性強,運算速度快。但是由于網絡詞匯比較復雜,高質量的情緒詞典難以構建,維護比較復雜且不易擴展。傳統的機器學習方法主要通過對數據集進行特征提取,訓練分類模型,然后對測試數據進行預測。但是該方法依賴于提取的特征,而且需要構建復雜的特征工程,并結合依存關系分析?;谏疃葘W習的方法利用神經網絡自主學習提取文本特征,神經網絡的多層非線性結構可以捕捉文本的深層次特征,實現對文本的深層理解。常用的深度學習模型包括:循環(huán)神經網絡(Recurrent neural network,RNN)[7]、卷積神經網絡(Convolutional neural network,CNN)[8]等。
隨著深度學習在圖像視覺等領域取得優(yōu)異的成果[9],一些研究者開始將深度神經網絡應用于情感分析任務中。李等人[10]提出一種多通道雙向長短期記憶網絡模型,將現有情感資源和語言知識與BLSTM相結合,獲取到更充分的情感信息。趙等人[11]將LSTM和CNN相結合,然后添加注意力機制,實現對文本隱式情感的分析。近年來,注意力(Attention)機制成為自然語言處理領域的研究熱點,并且取得不錯的結果。Bahdanau等[12]最早將Attention應用于機器翻譯任務中。Vaswani等人[13]使用Attention的方法做自然語言處理任務,文中提出了一種Self-attention方法,使得每個詞語都能夠獲取全局語義信息。Li等人[14]將Self-attention和雙向LSTM相結合應用于情感分類任務中,在準確率上有很大提升。
基于詞典和規(guī)則的傳統情感分析方法過度依賴詞典的作用,忽略了文本整體的語義關系,現有的深度學習方法直接對文本整體進行編碼,沒有重視現有知識庫的作用。因此本文將情感語義信息和注意力機制的深度學習模型融合,并添加樣本平衡模塊,構造了一種新的情緒分析模型(Attention convolution model combining fine-grained sentiment dictionary and sample balance,DB-AC)。
本文的主要貢獻如下:
1) 收集現有的情感資料,分別對情緒詞、情感詞以及詞匯的詞性進行整合,構建了一個包含情感信息、情緒信息、詞性信息的細粒度情感詞典,并將詞匯的情感信息融合到詞向量中。
2) 提出了一種基于注意力機制和卷積神經網絡的情緒分析方法,并將細粒度情感詞典和樣本平衡模塊融入模型中,通過設計相關實驗驗證了該模型在情緒分析任務和情感分類任務中的有效性。
3) 通過設計實驗,驗證了在深度學習模型中引入細粒度情感詞典和樣本平衡模塊對情緒分析任務的提升作用。實驗證明,本文模型的性能超越了傳統的深度學習模型。
傳統的融合情感詞典的模型,只把正面情感詞、負面情感詞、程度副詞、否定詞作為特征,融合在文本轉化的詞向量中。本文對現有的情感詞典進行整理,構建了細粒度微博情感詞典。其中,程度副詞、否定詞、主張詞主要基于董振東構建的知網《Hownet》情感詞典進行構建;正面情感詞、負面情感詞是根據《Hownet》情感詞典和大連理工大學的《情感本體庫》[15]進行匯總;情緒分類和詞性種類以《情感本體庫》為依據;并構建了否定詞詞典。如表1所示。
本文提出的DB-AC模型首先對中文微博文本進行預處理,將微博文本轉化為包含細粒度情感信息的詞向量,然后添加平衡樣本模塊,將處理后的詞向量輸入到Attention模型中,再經過卷積層進行特征提取,池化層選擇局部最優(yōu)特征,輸入到一個多層感知器(MLP),最后對輸出的向量使用Softmax分類器進行計算。根據功能的不同,本文將模型分為三個層次,詞向量輸入層、語義獲取層、情緒分類輸出層。整體架構如圖1所示。
圖1 DB-AC模型結構圖Figure 1 DB-AC model diagram
詞向量輸入層為整個模型的輸入,主要包括三部分:文本預處理、詞向量表示、平衡樣本。
微博文本的預處理分為數據清洗和中文分詞兩個步驟。數據清洗是刪除和情緒分析無關的信息,如微博文本中的鏈接、@用戶、一些標點符號等。目前常用的中文分詞工具有結巴分詞、哈工大LTP分詞、中科院計算所設計的NLPIR分詞等,本文使用結巴分詞作為分詞工具。
詞向量由四部分組成:文本向量VT、詞性向量VP、情感向量VE、情緒向量VM。其中,文本向量的獲取可以看作查詞典的過程。詞典中單個向量的維度為d,詞語個數為N,詞典Vd×N通過大規(guī)模語料采用詞向量訓練模型得到。本文采用的是北京師范大學中文信息處理研究所與中國人民大學DBIIR實驗室[16-17]開源的中文微博詞向量。對于一個文本序列T={t1,t2,…,tn},將文本中詞語的詞向量拼接起來,就可以得到整個文本序列的詞向量表示,拼接方式如式(1)所示:
VT=V1⊕V2⊕…⊕Vn
(1)
其中:Vi∈Vd×n表示ti對應于詞典中的元素,⊕表示行向量拼接操作。訓練模型得到的詞向量能夠很好地表示詞語的語義信息,但是忽略了詞語的情感信息、詞性信息,因此本文加入了詞性向量、情感向量和情緒向量。根據《情感詞匯本體庫》的分類標準,詞性分為7類,分別是名詞(Noun)、動詞(Verb)、形容詞(Adj)、副詞(Adv)、網絡詞語(Nw)、成語(Idiom)、介詞短語(Prep)。情緒也分為7類:樂(Happiness)、好(Like)、怒(Anger)、哀(Sadness)、懼(Fear)、惡(Disgust)、驚(Surprise)。詞性信息和情緒信息采用類似One-hot編碼方式分別表示為7維向量VP和VM。情感分為6類,分別是正面情緒詞、負面情緒詞、程度副詞、主張詞、否定詞、中性詞,表示為6維向量VE。為了降低稀疏性,VP、VM和VE都初始化為[-0.1,0.1]之間的隨機值。最后將文本向量和情緒信息融合在一起構造出詞向量X作為輸入,如公式(2)所示:
X=VT⊕VP⊕VE⊕VM
(2)
由于樣本類別嚴重不均衡,所以在語義獲取之前添加一步樣本平衡操作。本文采用的樣本平衡技術是將欠采樣和過采樣有效結合。具體過程如下:樣本數設定為m條,首先使用隨機欠采樣方法對大于m條的數據執(zhí)行m次欠采樣,然后對于低于m條的數據執(zhí)行m次過采樣。最后,得到w組平衡樣本,然后將w組平衡樣本合并到訓練集樣本中進行訓練,如圖2所示。
圖2 樣本平衡模塊示意圖Figure 2 Sample balance module diagram
在文本情緒分析的過程中,為了提高模型效果,除了需要考慮詞語之間的語義依賴關系,還要考慮各詞語對于情緒分類的影響程度,影響較大的詞語需要賦予更高的權重。因此需要添加注意力機制,從輸入數據中找到顯著相關信息。CNN方便并行,而且容易捕捉到一些全局的結構信息。因此,本文采用CNN和注意力機制對微博文本的語義信息進行分析。
2.2.1 Attention層
本文將詞向量輸入到注意力機制中,注意力機制對微博文本和情緒詞合成的詞向量進行處理,確定顯著信息。Attention函數的本質可以被描述為一個查詢(Query)到一系列鍵值(Key-Value)對的映射,如圖3所示:
圖3 Attention函數示意圖Figure 3 Attention function diagram
Attention計算主要分為三步:第一步是計算Query和每個Key的相似度,獲取權重,常用的相似度函數有點積、拼接、感知機等;第二步是使用Softmax函數對這些權重進行歸一化;最后將權重和相應的鍵值Value加權求和得到結果。目前在NLP研究中,Key和Value通常用同一值表示,即Key=Value。其函數如公式(3)所示:
(3)
其中Q∈Rn×dk,K∈Rm×dk,V∈Rm×dk。Attention層作用是將n×dk的序列Q編碼成了一個新的n×dv的序列。本文采用Self-Attention結構,即Attention(X,X,X),X表示輸入序列。
2.2.2 卷積層
卷積層可以通過不同的卷積核對輸入的序列進行局部特征提取。長度為h的卷積核可以把序列分為{X0:h-1,X1:h,…,Xi:i+h-1,…,Xn-h+1:n},對每一個分量做卷積操作得到卷積特征如下:
C=(c1,c2,…,cn-h+1)
(4)
其中,ci是對分量Xi:i+h-1進行卷積操作后提取的特征。每次滑動窗口得到的ci計算如下:
ci=relu(W·Xi:i+h-1+b)
(5)
W為卷積核權重,b為偏置。
2.2.3 池化層
池化層就是對卷積后得到的特征矩陣C執(zhí)行下采樣操作,從中選取局部最優(yōu)特征,本文采用的是最大池化進行采樣,得到的特征表示為:
li=max(c1,c2,…,cn-h+1)
(6)
之后將得到的特征組合得到向量L:
L=(l1,l2,…,ln)
(7)
最后,將前一層輸入到一個多層感知器(MLP),得到更高層的特征表示。本文的模型選擇不含任何隱含層的MLP,對其輸出向量進行非線性函數f變換,得到情緒標簽的得分向量:
Score(S)=f(WhL+bh)
(8)
其中:Score(S)∈R|M|為情緒標簽的得分向量;M表示情緒標簽集合;Wh和bh分別為MLP的參數矩陣和偏置量,本文采用RELU函數完成非線性變換。然后對情緒得分向量執(zhí)行Softmax運算:
(9)
本文采用NLPCC2013和NLPCC2014情感評測任務的兩個公開數據集組織實驗,每個數據集中均包含一個訓練集和一個測試集。數據集中的內容來自新浪微博,每條微博都有一個情感標簽,共有8種不同的情感標簽,即None、Happiness、Like、Sadness、Disgust、Anger、Fear和Surprise。兩個數據集的統計信息如表2所示。其中,2014年的訓練集(14 train)中有兩條微博的文本內容為空,將其移除,最終得到13 998條微博。
表2 各情緒數據統計表Table 2 Statistics of each emotion
由表2可以看出,8種標簽下的數據比例很不均衡,所以本文添加樣本平衡模塊先進行數據預處理。為了進一步驗證本文提出的模型性能,設計了情緒識別任務和正負情感分類任務。在正負情感分類任務中,將Happiness和Like作為正向標簽,Anger、Sadness、Fear、Disgust作為負向標簽。情緒識別任務中,將none作為客觀標簽,其他7項作為正向標簽。兩個實驗的數據集劃分如表3所示:
表3 情感二分類數據集Table 3 Sentiment binary classification dataset
參數設置會直接影響模型效果,通過不斷調參優(yōu)化,本文提出的DB-AC模型參數如表4所示。
表4 模型參數設置Table 4 Model parameter settings
MNB模型(Multinomial na?ve bays):MNB模型是傳統機器學習的代表,在很多情感分類任務中都取得了優(yōu)秀的效果。
CNN模型(Multichannel convolutional neural network):該模型采用多通道卷積神經網絡對文本進行情感分類,這是早期研究者采用卷積神經網絡做自然語言處理任務的模型之一。
ATT模型(Self-Attention):該模型直接使用自注意力模型訓練進行分類。
ATT-CNN模型(Attention convolutional neural network model):該模型通過多通道卷積神經網絡和自注意力模型進行融合實現情緒分析。
E-AC模型(Attention convolution model combining sentiment dictionary):該模型使用傳統的情感詞典與詞向量相融合,然后通過多通道卷積神經網絡和自注意力機制做訓練。
D-AC模型(Attention convolution model combining fine-grained sentiment dictionary):該模型在詞向量中融合細粒度情感信息,然后通過多通道卷積神經網絡和自注意力機制訓練模型。
DB-AC模型:該模型在詞向量中融合細粒度情感信息,然后添加樣本平衡模塊,最后通過多通道卷積神經網絡和自注意力機制進行訓練。
3.4.1 NLPCC情感測評任務
按照NLPCC的中文微博情感評測任務的相關要求和評價指標,本文分別對NLPCC2013和NLPCC2014數據集進行了實驗分析,結果如表5和表6所示:
表5 NLPCC2013實驗結果Table 5 NLPCC2013 experimental results
表6 NLPCC2014實驗結果Table 6 NLPCC2014 experimental results
從表5和表6可以看出,DB-AC模型在所有的指標上都取得最好的結果,與D-AC模型相比在2013年數據集上,F-measure提升了0.06%,微平均F1和宏平均F1分別提升了0.71%和0.41%,2014年數據集上,F-measure提升了0.04%,微平均F1和宏平均F1分別提升了1.96%和2.31%。此外,對于宏平均F1和微平均F1的效果有明顯提升。宏平均F1和微平均F1是對情緒進行識別,不同標簽數據量差別很大,比如2013年訓練集中“Like”有595條、“Fear”有49條,樣本量嚴重不均衡,所以樣本平衡模塊的添加對于宏平均和微平均的影響比較顯著。
D-AC模型的效果僅次于DB-AC模型,在兩個數據集上實驗總體排第2位。與傳統情感詞典的E-AC模型相比,在2013年數據集上,F-measure提高0.44%,微平均F1和宏平均F1分別提升0.24%和0.28%,2014年數據集上,分別提升0.86%、0.26%和0.63%。體現了細粒度情感詞典的分類效果要好于傳統的情感詞典。
本文提出的DB-AC模型在2014年數據集上的宏平均和微平均值明顯比2013年效果好,是因為2014年訓練集是13 988條而2013年訓練集只有4 000條,數據量提升后模型得到更充分的訓練。而2014年數據集的F-measure普遍低于2013年,說明2014年情緒識別任務的難度高于2013年,與文獻[18-20]的結論一致。
此外,D-AC模型和DB-AC模型的效果明顯優(yōu)于ATT-CNN模型,說明細粒度情感詞典的引入對情緒分析任務有很大幫助。
3.4.2 情緒識別任務
為了充分驗證細粒度情感詞典和樣本平衡模塊對于情緒識別任務性能的影響,本文將添加以下實驗進行比分析:以CNN、ATT(Self-Attention)、ATT-CNN模型為基準模型,分別添加情感詞典(傳統)、情感詞典(細粒度)、情感詞典(細粒度)+樣本平衡模塊進行實驗,使用NLPCC2013和NLPCC2014的數據集分別驗證,實驗結果采用F-measure作為指標進行評價,如圖4、圖5所示:
圖4 NLPCC2013情緒識別任務Figure 4 NLPCC2013 emotion recognition task
圖5 NLPCC2014情緒識別任務Figure 5 NLPCC2014 emotion recognition task
從圖4和圖5中可以看出,在主客觀分類實驗中ATT-CNN系列模型都取得了最好的結果,說明自注意力機制和卷積神經網絡的融合對于微博文本情緒識別任務有明顯的提升。添加情感詞典(細粒度)的模型效果都優(yōu)于情感詞典(傳統)的效果,表明了細粒度情感詞典相比較傳統的情感詞典可以更好地識別主客觀特征。對于所有的模型,添加情感詞典的效果都有明顯提升,說明情感特征對于情緒分析任務有很大的幫助。
此外,樣本平衡模塊的添加對于各組實驗F-measure的結果影響不太明顯,這是因為情緒識別任務判斷微博是否包含情緒,有無情緒的數據分別有7 247條和6 753條數據(2013數據集),9 804條和10 194條數據(2014數據集),樣本已經比較均衡,所以影響不是很大。
3.4.3 正負情感分類任務
正負情感分類任務同樣是二分類問題,其中2013年數據集中有3 596條正向情感文本、3 317條負向情感文本;在2014年數據集上正負情感文本分別有5 146條與4 134條。實驗結果如圖6、圖7所示。
圖6和圖7的結果表明,在正負情感分類任務中,融合細粒度情感詞典并添加樣本平衡模塊的ATT-CNN模型仍然取得了最好的結果。其中,各組實驗中,融合細粒度情感詞典的模型性能都高于傳統的情感詞典,這說明細粒度的情感詞典對于正負情感分類實驗同樣具有較大貢獻。其中2014年數據集上的結果明顯優(yōu)于2013年,是因為2014年的樣本數據量比2013年多,模型得到更充分的訓練。
圖6 NLPCC2013正負情感分類結果Figure 6 Positive and negative sentiment classification results from NLPCC2013
圖7 NLPCC2014正負情感分類結果Figure 7 positive and negative sentiment classification results from NLPCC2014
本文提出了一種基于CNN和注意力機制的微博情緒分析模型,利用現有的情感分析資源構建了一個包含情感語料、情緒語料、語義信息的細粒度情感詞典。將情感詞典和注意力機制相結合,有效地增強了模型對于微博文本情緒的分析能力。通過兩個數據集的實驗驗證,細粒度情感詞典能夠提高情緒分析的性能。同時,本模型添加的樣本平衡模塊,有效降低了樣本不均衡對于模型的影響。本文提出的模型在NLPCC2013和NLPCC2014中文微博情緒分析任務中表現出優(yōu)越的性能。下一步將對詞性信息對于情緒分析的影響做更詳細的分析。