文/張量 楊元峰 李金祥 金益 劉媛霞
情感分析(Sentiment Analysis)是自然語言處理任務中的重要組成部分,其概念最初在2003年由Nasukawa等人[1]首次提出,其標準定義為:情感分析是對文本中關于某個實體的觀點、情感、情緒及態度的計算研究[2]。它在評論篩選分類、意見挖掘、用戶分類聚類、網絡輿論預測等應用領域有著極其重要的意義。
基于文本(自然語言)的情感分析通常可分為基于情感詞典的方法、基于機器學習的方法和基于深度學習的方法的三類:
(1)基于詞典的情感分析方法是一種典型的無監督學習方法。它依靠情感詞典和規則,通過計算情感值作為文本的情感傾向依據。這類方法其對情感詞典的依賴成為其應用與發展的主要障礙。
(2)基于機器學習的方法由Pang等人[3]提出,它將文本情感分析看作分類問題。然而,傳統機器學習方法通常僅在某一特定領域表現優秀,泛化能力較差、擬合精度不高。
(3)基于深度學習的方法較好地避免了上述兩類方法的弱點。它最早被應用于機器視覺和語音識別中,并取得了巨大成功。近年來,在自然語言處理和情感分析問題的研究工作中也備受關注。代表性工作包括如:Text CNN[4],RNN[5]等。
長短期記憶模型(Long Short-Term Memory,LSTM)由 Hochreiter提出[6],作為一種特殊的循環神經網絡(RNN)模型,它能夠捕捉語句中的長期依賴關系,從而更好地從整體上理解文本的情感。其記憶單元結構如圖1所示。
記憶單元中設置了3種門結構:遺忘門ft、輸入門it和輸出門Ot,用于記錄和更新記憶單元的信息。其中各個門t時刻的狀態更新狀態如下:

其中:x表示輸入數據,h表示LSTM的單元輸出;C表示記憶單元值,σ表示sigmoid函數;Wf、Wi、Wo、bf、bi、bo分別表示3個門的權重以及偏置值。式(4)表示對記憶單元的更新,表示遺忘多少信息以及當前輸入信息哪些需要更新到當前的記憶單元中。式(5)產生當前的輸出結果,由輸出門決定最終哪些信息輸出。
Li等人的研究[7]表明LSTM模型在許多情感分析任務中的表現要優于標準的循環神經網絡(RNN)模型。在此基礎上,Graves等人[8]提出了雙向長短記憶網絡(Bidirectional Long Short-Term Memory,Bi-LSTM)。它使用兩個LSTM網絡從前后兩個方向共同訓練,并同時連接至同一輸出層,從而獲得了捕捉過去和將來信息的能力。它避免了傳統LSTM由于序列化處理而無法捕捉上下文的信息的缺點。
注意力模型能夠區分各目標單元的重要程度,從而更有利于模型發現重要特征。最早運用于圖像分類任務,隨后Bahdanau等人[9]將其應用于自然語言處理領域。傳統的自注意力機制可以用式(6)、(7)、(8)表示,其中:hi為輸入隱向量,tanh為激活函數,t為原語句序列長度。


圖1:LSTM記憶單元結構
本章將介紹使用Bi-LSTM+Attention模型實現對電影評論的情感傾向性進行分析。使用的深度學習框架是Keras,后端使用TensorFlow,編程語言為Python。
神經網絡中輸入的所有文本向量組需要有相同的維度,因此需要對文本進行切割。本文首先使用空格對單詞進行切割。經統計語料規模為239600,總單詞量為5742708,文本最大長度2450。從圖2可以看出,大部分文本長度在1000以內。為盡量保留文本信息的同時提高訓練效率,本文截取1000作為文本的長度,長度不足的用0補齊。
原始的文本數據中存在未處理的html標簽、換行符等無用字符。因此,需要對數據進行清洗。本文使用Python中的Beautiful Soup進行純文本數據搜集。

表1:在IMDB數據集上的實驗結果
由于計算機無法直接理解文本,故要將文本表示成詞向量的形式。主要方法有:詞袋、TF-IDF、Fasttext、Glove、Word2vec 等。前兩種方法無法結合上下文信息表征詞特征,Fasttext使用所有詞的詞向量平均來表示一個文本,這對于詞序敏感的情感分析而言并不合適。Glove通過對“詞-詞”共現矩陣分解得到詞表示,它能夠使用全局信息,因此對于詞序要求較高的情感分析任務而言較為適合。本文在使用Glove對文本進行詞向量表示。在得到詞向量后,即可將每一個文本通過文詞向量拼接進行表示。
由于循環神經網絡(RNN)在文本處理方面的優勢,本文使用其變種LSTM和GRU分別進行情感分析。為了克服LSTM的方向性缺點,采用了Bi-LSTM和Bi-GRU結構對模型進行了進一步優化。其中,Embedding層為詞向量層,輸入文本長度為1000,詞向量維度為100;Embedding層之后接入Bi-LSTM進行特征提取;模型中加入了Dropout以防止過擬合;加入Dense層將提取的特征進行整合,對提取的特征進行全連接。最后通過一個判別函數輸出所屬類別。經過測試,模型在第6次迭代時到最優,準確率為89.28%。
在此基礎上,本文增加了Attention機制。即在得到句子的向量表示時對評論文本中不同的詞賦予不同的權值,然后由這些不同權值的詞向量加權得到句子的向量表示。其模型網絡結構如圖2所示。
模型共進行了10次迭代,在第五次迭代之后在測試集上的準確率最高,為89.94%,相較于Bi-LSTM,準確率提升了0.66%。

圖2:Bi-LSTM+Attention網絡結構
本文使用所使用的數據集為IMDB影評數據集,共25000條數據,數據來源為:https://www.kaggle.com/c/word2vec-nlp-tutorial/data。模型中,文本長度為1000,詞向量維度為100;其中Bi-LSTM隱藏層有64個神經元,Adam的學習率為0.001,dropout為0.5;同時設置雙向LSTM的層數為128層。
實驗將Bi-LSTM模型與Bi-RNN(LSTM、GRU)、BiLSTM+Attention與Fasttext三種具體算法的精度和召回率進行了對比,如表1所示。在對比實驗中,我們發現Bi-GRU模型在第4個epoch得到了最高的準確率88.18%,但GRU的整體結果沒有LSTM好。使用Attention機制后,BIGRU與Bi-LSTM模型的精度均有提升,分別為0.98%和0.66%,Bi-LSTM+Attention模型達到了89.84%的最高的精度。