曹衛東 潘紅坤
(中國民航大學計算機科學與技術學院 天津 300300)
隨著社交媒體的迅速發展,在線提供、搜索或共享意見已成為我們日常生活中的一項普遍活動。如此龐大的數據包含了對于內容提供商、社會機構和賣家等而言非常有價值的信息。例如,消費者在確定要預訂某家酒店之前,可以查看許多在線評論,從而做出合適的選擇。公司還可以直接從網絡收集大量的公開信息,而不用對其服務或產品進行民意調查。因此,從此類數據中提取意見至關重要,這將有助于更多地了解用戶的偏好或意圖。
情感分析作為一種提取觀點的技術,包含著許多相關任務,例如情感詞典構建[1]、文檔級情感分類[2]、方面級情感分類[3]和細粒度情感分析[4]。在這些任務中,細粒度情感分析是主要的和有價值的,因為它可以為許多下游任務提供感性短語的先驗知識,例如,“酒店的環境真的不錯,從室內的陳列到窗外的景色,以及酒店內花園都顯得華貴而清幽”是積極短句,“門面特別小而且差,很不起眼。到前臺辦手續又發現態度特別差,房間也很一般”是消極短句,因此,細粒度情感分析對于評價的分析以及情感態度的分類具有較高的研究價值。
細粒度情感分析在建設智能化城市中(如聊天機器人[5])起著至關重要的作用。然而計算機只能處理數字信息,要想完成情感分類的任務,首先需要將文本向量化。與傳統的one-hot表示法不同,低維分布式詞表示法(如Word2vec[6])能夠更好地捕獲自然語言詞的語義。鑒于漢字和漢字的內部結構豐富,每個中文字符通常比英文單詞傳達更多的語義信息,設計并學習中文單詞的表示方法是至關重要的。Chen等[7]提出了利用字符級別信息的方法來學習漢字嵌入。除了某些自定義的規則用于提取信息(偏旁部首[8]、組件[9]),還有基于像素學習字符的模型[10]。這些針對中文字符進行向量化的方法雖然比原始Word2vec效果好,但仍存在著字符語義信息提取不準確的問題。為更好地建模單詞的語義,Cao等[11]提出基于漢字筆畫的Cw2vec模型,此模型能夠自動獲取中文單詞間潛在的語義表示,為下游任務(情感分析)提供語義豐富的詞向量。
作為句子分類的典型子問題,情感分類不僅需要理解單個話語的句子,還需要從整個會話中獲取上下文信息。Pang等[12]運用這些機器學習的方法在對英文電影評論的情感分析中取得較好的效果。Tripathy等[13]在影評數據集上分別使用NB(Naive Bayesian)、SVM(Support Vector Machine)方法,實驗結果表明,SVM的效果好于NB。Srujan等[14]通過人工構造文本特性如詞性、情感,運用機器學習的方法來完成情感分析的任務,雖然取得了不錯的成績,但太多的人工標注文本特征,使得模型的實時性比較差。Kim[15]第一次將CNN卷積神經網絡用在處理英文短文本情感分析,實現了句子級的分類任務,驗證了深度學習網絡在情感分析中的可靠性。但CNN在文本處理過程中并沒有考慮上下文信息,針對一些具有時序信息的句子,效果不佳。Vania等[16]使用卷積神經網絡、長短期記憶網絡對文本進行分析,使用預訓練好的單詞級別詞向量和字符級別詞向量作為特征輸入,并證明字符級別詞向量能夠比詞級別詞向量學習到更好的特征。Zhang等[17]使用RNN對中文的微博語料進行情感分析,訓練帶有詞語信息和句子信息向量特征,最終證明計算句子向量的方式可以幫助學習句子的深層結構。Liang等[18]將長短期記憶神經網絡(LSTM)用于中文微博文本情感分析,解決了RNN梯度彌散問題。為了獲取更加全面的句子特征,Xiao等[19]提出雙向長短期記憶神經網絡(BiLSTM)的中文情感分析方法,把單向的LSTM網絡反方向擴展,能夠更好地利用文本前后的信息。無論是CNN還是RNN,對文本的特征提取都是不全面的,無法區分不同的詞,不同的句子對情感傾向的不同作用。基于此,通常會在這些網絡之上構建額外的注意力層[20],以便將更多的注意力放在最相關的單詞上,從而更好地理解句子。
傳統的注意力機制關注每個單詞與整個文本的聯系,單詞對全部序列具有依賴性,計算量較大。例如Transformer[21]中的Self-Attention包含兩次序列自身的矩陣乘法、計算量和顯存占用量都為(N2)級別的(N代表句子的長度)。如果處理的序列較長(N),就會浪費太多的時間和內存開銷(N2)。Huang等[22]提出一種交織稀疏自注意力機制,該機制的主要創新之處就是把緊密相似矩陣拆分成兩個稀疏相似矩陣的乘積,用這兩個連續的稀疏矩陣分別估算出一個相似的矩陣,第一個注意力機制用來估算長距離的相似性,第二個注意力機制用來估算短距離的相似性。類似于局部注意力機制,計算單詞的權重時分別考慮不同的長度,該機制雖然節省了大量的內存和計算,但對于一些特長距離依賴的句子,效果不是很理想。考慮到長距離的依賴性,Child等[23]提出一種跳躍式的注意力機制(StrideSelf-Attention),即每個單詞只考慮與它距離為倍數的單詞的關系,該方法雖然能大大縮短計算時間,降低內存消耗,但對一些近距離相關性較強的情感分類任務,準確率卻相比自注意力機制低了的許多。基于此,本文對稠密的自注意力機制進行分解得到Sparse Self-attention,使用Cw2vec預訓練好的詞向量作為輸入,BiLSTM+Sparse Self-Attention對文本進行特征提取。實驗證明Cw2vec+BiLSTM+SparseSelf-Attention的組合模型(CBSA)在情感分析的任務中,不僅準確率較高,而且占用更少的內存,大大減低了神經網絡模型的訓練時間,實現了語句的局部緊密和遠程相關的特性。本文的創新點主要有:
(1) 創新地使用Cw2vec訓練詞向量,獲取中文的語義信息。
(2) 使用BiLSTM提取語句的上下文信息,獲取全面的文本特征。
(3) 對稠密的Self-Attention進行分解,并發運行多個注意力機制,節省內存,降低模型收斂時間。
本文設計的CBSA模型結構如圖1所示,模型的整體計算流程為:
步驟1首先對評論數據集進行預處理,去除標點符號、無意義的高頻詞。
步驟2獲取基于Cw2vec的詞向量。
步驟3將得到的詞向量作為BiLSTM的輸入,獲取語句上下文相關特征。
步驟4SparseSelf-Attention對BiLSTM得到的特征重新進行權重分配。
步驟5最后由Softmax實現對情感極性的判斷。

圖1 CBSA模型結構圖
現有的詞向量模型主要集中在英語、西班牙語和德語等歐洲語言上,這些語種在書寫系統中采用的拉丁文字,與中文字符結構完全不同。而單個中文字符都包含著豐富的語義信息,使用Word2vec預訓練中文詞向量往往不能夠全面地捕獲語義信息。基于此,本文采用Cw2vec預訓練詞向量。
Cw2vec是一種學習漢語單詞嵌入的新方法,通過使用筆畫N-gram設計了一種極簡方式來學習文本特征,該筆畫可以來獲取漢字的語義和層次信息。中文向量化的過程如下:
(1) 語句的切分。基于字符級別切分成單個中文漢字。例如:“位置”切分成“位”“置”。
(2) 字符筆畫信息的獲取。從每個字符獲取筆畫信息并把它們拼接起來。
位:撇、豎、點、橫、點、撇、橫。
置:豎、橫折、豎、豎、橫、橫、豎、豎、橫折、橫、橫、橫、橫。
位置:撇、豎、點、橫、點、撇、橫、豎、橫折、豎、豎、橫、橫、豎、豎、橫折、橫、橫、橫、橫。
(3) 筆畫序列數字化:為每個筆畫分配一個整數ID,分別為1到5,如表1所示。

表1 筆畫和ID的對應關系
(4) 設置滑動窗口大小為n,生成筆畫N-gram特征,如圖2所示。以“地理位置方便”為例,分詞結果為“地理”、“位置”和“方便”。中心詞為“位置”,上下文單詞為“地理”,“方便”。

圖2 N-gram特征圖
Cw2Vec模型考慮到單詞與上下文之間的相關性,相似性定義為:

(1)
損失函數為:
(2)
最后使用Softmax函數對給定w的c預測模型進行建模:
(3)

假設輸入文本用X表示,由L個單詞組成。使用Cw2vec進行訓練,得到詞嵌入表示特征{v1,v2,…,vL},其中vi為每個單詞的向量屬于Rk,k表示每個詞的維度,在本文中與訓練的詞向量維度為300。則一條評論的向量化為:
X={v1,v2,…,vL}
(4)
循環神經網絡在處理時序信息的問題上相比于卷積神經網絡具有很好的優勢。RNN利用激活函數序列輸入特征表示Xt和前一時段的隱藏層輸入值ht-1,并轉化為當前隱藏狀態的輸出值ht-1:
ht=f(ht-1,Xt)
(5)
LSTM則可以解決RNN梯度彌散問題。LSTM的優勢在于具有三種特殊的門函數,即輸入門、遺忘門、輸出門,如圖3所示[18]。

圖3 單個LSTM計算過程示意圖
遺忘門:
ft=σ(Wf·[ht-1,xt]+bf)
(6)
輸入門:
it=σ(Wi·[ht-1,xt]+bt)
(7)
(8)
(9)
輸出門:
ot=σ(Wo·[ht-1,xt]+bo)
(10)
ht=ot×tanh(Ct)
(11)

考慮到文本分析要用到上下文信息,本文模型選用雙向LSTM(BiLSTM)為基礎建模,雙向的長短期記憶網絡由正向和反向的LSTM組成,計算過程如下:
(12)
(13)
(14)

Google在2017年提出一種新的注意力機制——多頭自注意力[24]。相比于單一的注意力機制而言,多頭機制能夠從多方面捕獲序列的關鍵信息。每個頭通過向量點積進行相似度運算,得到Attention值,結構如圖4所示。

圖4 縮放點積運算(SDA)

(15)

多頭自注意力機制就是將(Q、K、V)通過線性轉換送入到SDA,再重復運算h次,最后拼接所有的Attention,縮小每個head的尺寸,其計算成本和具有全維度的單個Attention機制相當。結構示意圖如圖5所示。
headi=SDA(QWiQ,KWiK,VWiV)
(16)
Head=MultiHead(Q,K,V)=
Concat(head1,head2,…,headh)WO
(17)


圖5 Multi-head Attention結構
多頭注意力機制關注每個元素對短語的影響,圖6所示為xi與X序列中的每個單詞計算相關度,其計算量為O(n2),其中n為輸入短語的長度。

圖6 Self-Attention
可以看出Self-Attention無論是內存消耗量還是計算量上都是十分龐大的。為改善這一狀況,一個基本的思想就是減少語句相關性的計算,設定每個元素只跟短語中的一部分元素有關。常見的有Local Self-Attention,即放棄全局關聯,規定每個元素只與前后c個元素以及自身有關,相對距離超過c的注意力直接設為0,如圖7所示(其中c被設置為2的情況)。

圖7 Local Attention
局部注意力機制(Local Self-Attention)雖然節約了內存,縮短計算時間,但忽略了遠程的相關性。為獲取長程關聯性,本文提出新稀疏自注意力機制(Sparse Self-Attention),該注意力機制擁有p個獨立的注意力頭,每個獨立的注意力只關注于特定位置的元素。設想每個元素只與它局部相當距離不超過c的,且遠程距離為k,2k,3k,…的元素相關(c、k為提前設置好的參數),強行設置其他位置的元素注意力為0。如圖8所示(c、k分別被設置為2、5的情況)。

圖8 Sparse SelfAttention
稀疏自注意力機制(Sparse Self-Attention)將BiLSTM輸出的ht矩陣映射為輸出矩陣,并由全連接模式S={S1,S2,…,Sn}參數化,其中Si為第i個輸入向量參與其中的索引值,n為輸出序列的長度。
Attend(ht,S)=(a(hti,Si))i∈{1,…,n}
(18)
(19)
(20)
(21)
attention(ht)=Wp(attend(ht,A)(i))i∈{1,2,…,p}
(22)


(23)
為了防止過擬合,在Softmax之前添加了Dropout[24],隨機丟棄一些網絡節點,能夠顯著地提高模型的泛化能力。使用反向傳播算法,采用的交叉熵損失函數為:
(24)

本文實驗測試為64位Ubuntu操作系統,開發環境為Python3.7,Keras 2.3.1,后端為TensorFlow 2.0,開發工具為PyCharm。
本文實驗室數據集為中國科學院譚松波博士整理的中文酒店評論數據集,共有10 000條評論組成,包含著7 000條積極情感和3 000條消極情感。情感標簽分為兩類[0,1],消極情感為0,積極情感為1,為平衡數據集,實驗選取6 000條數據集,正負樣本各3 000條。本文使用sklearn中的train_test_split隨機抽取90%作為訓練集,10%作為測試集,進行多次實驗,選取平均值作為實驗的結果。實驗數據集如表2所示。

表2 實驗數據集
本文評估指標主要有這三個:準確率(Precision)、召回率(Recall)和F1-Score。
(25)
(26)
(27)
深度學習模型不同的參數設置會直接影響整個實驗的分類效果,對情感分析是特別重要的。本文實驗中,與Child[23]處理長文本序列設置的c=32,k=128的情況不相同,處理的文本信息長度絕大部分都在100個以內,所以c、k按照相同的倍數縮小設置為4、16。注意力頭數的設置選取最優的4個注意力頭,通過多次對比實驗,選取效果最好的參數,詳細設置如表3所示。

表3 模型參數設置
3.4.1中文詞向量的嵌入
本實驗使用Cw2vec對文本進行詞向量的訓練,往往能夠更好地獲得中文字符間聯系。如表4所示,分別以Cw2vec和Word2vec作比較。其中余弦相似度越大,單詞間關系越緊密,余弦相似度越小,單詞間相關性越小。

表4 詞向量余弦相似度比較
從表4中可以明顯看出基于筆畫預訓練Cw2vec向量更能獲取單詞之間的相關性,特別是對一些字符結構相似的,例如“霧霾”“雷雪”能夠更好地獲取字符特征,相比Word2vec預訓練詞向量的余弦相似度提高了2%。
實驗整體效果而言,分別使用Word2vec和Cw2vec預訓練的詞向量作為BiLSTM+Sparse Self-Attention組合模型的輸入。觀察表5可以發現,基于Cw2vec的詞嵌入比基于Word2vec的詞嵌入整體效果F1-Score大約提高0.3%,驗證了基于筆畫Cw2vec訓練詞向量作為輸入的可靠性。

表5 詞向量對整個實驗的影響(%)
3.4.2單一模型比較
為了驗證本文提出的模型的有效性,筆者選取以下幾種模型作為對照實驗,全部使用預訓練好的Cw2vec詞向量作為輸入,如表6所示。

表6 酒店數據分析結果(%)
觀察表6可以發現,在細粒度情感分類任務中,深度學習算法(CNN、LSTM和BiLSTM)明顯比傳統的機器學習算法SVM效果要好,這是因為深度神經網絡能夠深層次、多維度的自動提取文本特征,在細粒度情感分析任務中,深度學習算法(CNN、LSTM、BiLSTM)明顯比傳統的機器學習算法SVM效果要好,這是因為深度神經網絡能夠深層次、多維度地自動提取文本特征,有效地避免了機器學習方法中人工提取特征的缺陷。對比CNN、LSTM和BiLSTM可以發現,BiLSTM不僅可以捕獲長距離文本的依賴關系,而且還能夠獲取文本從后往前的信息。而添加注意機制的CBSA網絡模型則能夠更好地給不同的詞賦予不同的權重,克服了特征無差別提取的缺點,在準確率、召回率和F1-Score都有著明顯的提高。實驗結果表明,添加注意力機制后的效果大約提高5%,相比較其他模型在情感分析任務上更有優勢。
3.4.3分解多頭自注意力機制的影響
表7為分解自注意力機制的實驗結果對比,可以看出分解后的稀疏自注意力機制在F1值幾乎沒下降,并未影響實驗分類精度。觀察圖9和圖10可以發現本文的模型相比未分解的自注意力機制,占用更少的內存開銷,減少了大約200 MB,訓練時間降低了210 s,綜上可以驗證本文提出的稀疏自注意力機制不僅僅能夠得到較高的分類結果,而且占用更少的內存開銷、降低模型的訓練時間。

表7 分解自注意力機制的結果(%)

圖9 內存使用量

圖10 模型完成20輪迭代的訓練時間
3.4.4多頭自注意力機制參數的影響


表8 注意力頭數對實驗結果的影響

本文提出一種新的CBSA網絡模型來進行細粒度情感分析。一方面,使用基于Cw2vec預訓練的詞向量,能夠更好地獲取語義特征。另一方面,通過對自注意力機制進行分解,實現了局部緊密性、遠程稀疏性的特性。實驗表明,本文提出的模型能夠挖掘豐富的隱藏情感信息,占用更少的內存、時間開銷,更加準確地完成情感分析任務。
然而Cw2vec基于筆畫訓練詞向量,是一個固定的靜態編碼表示,例如:“大夫”和“丈夫”的筆畫是一樣的,這樣就會導致語義理解的偏差。未來的工作計劃準備采用大語料下預訓練的BERT模型,每個單詞的詞向量根據不同的上下文信息動態地表示,這樣才能消除Cw2vec一詞多義的問題。