基於LSTM的情感識別在鵝漫評論分析中的實踐與應用

深度學習(深度神經網絡)作爲機器學習的一個重要分支,持續推動了很多領域的研究和應用取得新的進展,其中包括文本處理領域的情感分類問題。由於可以對文本進行更有效的編碼及表達,基於深度學習的情感分類對比傳統的淺層機器學習和統計學方法,可以取得更高的分類準確率。當前,情感分析在互聯網業務中已經具有比較廣泛的應用場景,成爲了一個重要的業務支持能力。本文結合騰訊鵝漫U品業務在中文文本情感分類上的應用和實踐經驗,與讀者一起學習及探討。

一、 文本情感分析的發展與挑戰

1. 情感分析的發展

情感分析(Sentiment Analysis),也稱爲情感分類,屬於自然語言處理(Natural Language Processing,NLP)領域的一個分支任務,隨着互聯網的發展而興起。多數情況下該任務分析一個文本所呈現的信息是正面、負面或者中性,也有一些研究會區分得更細,例如在正負極性中再進行分級,區分不同情感強度。

在2000年之前,因爲互聯網相對今天沒有那麼發達,所積累的文本數據不多,因此,這個問題相對被研究得較少。2000年以後,隨着互聯網大潮的推進,文本信息快速積累,文本情感分析也開始快速增加,早期主要是針對英文,比較有代表性的,是Pang, Lee and Vaithyanathan (2002) ,第一次採用了Naive Bayes(樸素貝葉斯), Maximum Entropy(最大熵)和SVM(Support Vector Machine, 支持向量機)對電影評論進行了情感分類,將之分爲正面或者負面。2000-2010年期間,情感分析主要基於傳統的統計和淺層機器學習。由於這些方法不是本文闡述的重點,因此,本文就不再展開介紹。

2010年以後,隨着深度學習的崛起和發展,情感分析逐漸過渡到了採用基於深度學習的方法,並且證明其相對於傳統的機器學習方法能夠得到更好的識別準確率。

2. 中文文本情感分析的難點

由於漢語的博大精深,從傳統方法的角度來看,中文文本的情感分析有多個難點:
(1)分詞不準確:中文句子由單個漢字組成,通常第一個要解決的問題,就是如何“分詞”。但是,由於漢字組合的歧義性,分詞的準確率一直難以達到完美,而不準確的分詞結果會直接影響最終分析的結果。在本文後面章節,本文會適當展開介紹。

(2)缺乏標準完整的情感詞庫:與中文相比,英文目前有相對比較完整的情感詞庫,對每個詞語標註了比較全面的情感類型、情感強度等。但是,中文目前比較缺乏這樣的情感詞庫。同時考慮到語言的持續發展的特性,往往持續不斷地產生新的詞語和表達方式,例如,“陳獨秀,坐下”,“666”,它們原本都不是情感詞,在當今的互聯網環境下被賦予了情感極性,需要被情感詞庫收錄。

(3)否定詞問題:例如,“我不是很喜歡這個商品”和“我很喜歡這個商品”,如果基於情感詞的分析,它們的核心情感詞都是“喜歡”,但是整個句子卻表達了相反的情感。這種否定詞表達的組合非常豐富,即使我們將分詞和情感詞庫的問題徹底解決好,針對否定詞否定範圍的分析也會是一個難點。

(4)不同場景和領域的難題:部分中性的非情感詞在特定業務場景下可能具有情感傾向。例如,如下圖的一條評論“(手機)藍屏,充不了電”,藍屏是一箇中性名詞,但是,如果該詞在手機或者電腦的購買評價中如果,它其實表達了“負面”的情感,而在某些其他場景下還有可能呈現出正面的情感。因此,即使我們可以編撰一個完整的“中文情感詞典”,也無法解決此類場景和領域帶來的問題。

image

上述挑戰廣泛存在於傳統的機器學習乃至深度學習方法中。但是,在深度學習中,其中某些問題可以得到一定程度的改善。

3. 深度學習簡介

深度學習(Deep Learning)最早是由Hinton、Bengio等爲首的科學家們在2006年提出,是機器學習的重要分支,它一定程度上參考了人腦的“神經元”結構和交互方式。人的智能來源於人的大腦,大腦雖然複雜,但是組成大腦的基本細胞卻比較簡單,大腦皮層以及整個神經系統,都是由神經元細胞組成的。而一個神經元細胞,是由樹突和軸突組成,它們分別代表輸入和輸出。

image

樹突和軸突都有大量的分支,軸突的末端通常連接到其他神經元細胞的樹突上,連接點上是一個叫“突觸”的結構。一個神經元的輸出通過突觸傳遞給成千上萬個下游的神經元,神經元可以調整突觸的結合強度,有的突觸是促進下游細胞的興奮,有的則是抑制。下游神經元連接成千上萬個上游神經元,積累它們的輸入,產生輸出。

image

人腦有大約1000億個神經元,1000萬億個突觸,它們組成人腦中龐大的神經網絡,我們在深度學習中常常提到的“深度/多層神經網絡”的概念來源就是從這裏產生的。

雖然深度學習在2006年即被提出,但是在當時並沒有引起人們的廣泛關注,真正得到工業界重視其實到了2012年。當年在ImageNet圖片識別大賽中,深度學習算法將圖片分類識別準確率從傳統機器學習方法的74%提升到84%,獲得大幅領先的比賽成績。在隨後幾年,研究人員通過進一步對深度學習算法的優化,迅速將ImageNet圖片分類識別準確率提升到97.3%(2017年),超越了人類的識別水平(大約95%)。

下圖是ImageNet歷年的比賽成績,其中綠色的點是深度學習的成績,藍色的點代表傳統機器學習方法:

image

在圖片識別領域之外,深度學習在語音識別、翻譯等其他領域的成績比傳統機器學習算法也有較大幅度的提高,例如,Google在2017年12月發佈的端到端語音識別系統(State-of-the-art Speech Recognition With Sequence-to-Sequence Models),引入DeepCNN,從2013年到現在性能提升了20%,錯詞率降低至5.6%。由於深度學習在2012年ImageNet的比賽成績引起的廣泛關注,對深度學習的大規模投入隨之而來,以Google爲代表的美國科技巨頭們,較早期就在深度學習領域做出重大投入。2016年發生的標誌性事件“AlphaGo擊敗圍棋世界冠軍李世石”一石激起千層浪,使得深度學習和人工智能全面進入大衆視野,將其從單純的學術和工業界關注轉變爲全民關注,“人工智能”的概念也開始在資本界被炒得熱火朝天。

二、 中文分詞概述

一般情況下,中文文本的情感分類通常依賴於分析句子中詞語的表達和構成,因此需要先對句子進行分詞處理。不同於英文句子中天然存在空格,單詞之間存在明確的界限,中文詞語之間的界限並不明晰,良好的分詞結果往往是進行中文語言處理的先決條件。

image

中文分詞一般有兩個難點,其一是“歧義消解”,因爲中文博大精深的表達方式,中文的語句在不同的分詞方式下,可以表達截然不同的意思。有趣地是,正因如此,相當一部分學者持有一種觀點,認爲中文並不能算作一種邏輯表達嚴謹的語言。其二難點是“新詞識別”,由於語言的持續發展,新的詞彙被不斷創造出來,從而極大影響分詞結果,尤其是針對某個領域內的效果。下文從是否使用詞典的角度簡單介紹傳統的兩類中文分詞方法。

1. 基於詞典的分詞方法

基於詞典的分詞方法,需要先構建和維護一套中文詞典,然後通過詞典匹配的方式,完成句子的分詞,基於詞典的分詞方法有速度快、效率高、能更好地控制詞典和切分規則等特性,因此被工業界廣泛作爲基線工具採用。基於詞典的分詞方法包含多種算法。比較早被提出的有“正向最大匹配算法”(Forward Maximum Matching,MM),FMM算法從句子的左邊到右邊依次匹配,從而完成分詞任務。但是,人們在應用中發現FMM算法會產生大量分詞錯誤,後來又提出了“逆向最大匹配算法”(Reverse Maximum Matching,RMM),從句子右邊往左邊依次匹配詞典完成分詞任務。從應用的效果看,RMM的匹配算法表現,要略爲優於MM的匹配算法表現。

一個典型的分詞案例“結婚的和尚未結婚的”:

FMM:結婚/的/和尚/未/結婚/的 (分詞有誤的)

RMM:結婚/的/和/尚未/結婚/的 (分詞正確的)

爲了進一步提升分詞匹配的準確率,研究者後來又提出了出了同時兼顧FMM和RMM分詞結果的“雙向最大匹配算法” (Bi-directctional Matching,BM ),以及兼顧了詞的出現頻率的“最佳匹配法”(Optimum Matching,OM)。

2. 基於統計的分詞方法

基於統計的分詞方法,往往又被稱作“無詞典分詞”法。因爲中文文本由漢字組成,詞一般是幾個漢字的穩定組合,因此在一定的上下文環境下,相鄰的幾個字出現的次數越多,它就越有可能成爲“詞”。基於這個規則可以通過算法構建出隱式的“詞典”(模型),從而基於它完成分詞操作。該類型的方法包括基於互信息或條件熵爲基礎的無監督學習方法,以及N 元文法(N-gram)、隱馬爾可夫模型(Hiden Markov Model,HMM)、最大熵模型(Maximum Entropy,ME)、條件隨機場模型(Conditional Random Fields,CRF)等基於監督學習的模型。這些模型往往作用於單個漢字,需要一定規模的語料支持模型的訓練,其中監督學習的方法通過薛念文在2003年第一屆SIGHAN Bakeoff上發表的論文所展現出的結果開始持續引起業內關注。效果上,這些模型往往很善於發現未登錄詞,可以通過對大量漢字之間關係的建模有效“學習”到新的詞語,是對基於詞典方法的有益補充。然而它在實際的工業應用中也存在一定的問題,例如分詞效率,切分結果一致性差等。

三、 基於多層LSTM的中文情感分類模型原理

在前述分詞過程完成後,就可以進行情感分類了。我們的情感分類模型是一個基於深度學習(多層LSTM)的有監督學習分類任務,輸入是一段已經分好詞的中文文本,輸出是這段文本是正面和負面的概率分佈。整個項目的流程,分爲數據準備、模型搭建、模型訓練和結果校驗四個步驟,在下文中一一展開。由於本文模型依賴於已切分的中文文本,對於想要動手實現代碼的讀者,如果沒有分詞工具,我們建議讀者使用網上開源的工具。

1. 數據準備

我們基於40多萬條真實的鵝漫用戶評論數據建立了語料庫,爲了讓正面和負面的學習樣本儘可能均衡,我們實際抽樣了其中的7萬條評論數據作爲學習樣本。一般情況下,對於機器學習的分類任務,我們建議將學習樣本比例按照分類規劃爲1:1,以此更好地訓練無偏差的模型。

模型的輸入是一段已經分詞的中文文本,但它無法被模型直接識別,因此,我們要將它轉換成一種能被模型識別的數學表達。最直接的方式是將這些文本中的詞語用“One-Hot Key”進行編碼。One-Hot Key是一種比較簡單的編碼方式,假設我們一共只有5個詞,則可以簡單地編碼爲如下圖所示:

image

在一般的深度學習任務中,非連續數值型特徵基本採用了上述編碼方式。但是,One-HotKey的編碼方式通常會造成內存佔用過大的問題。我們基於40多萬條用戶評論分詞後獲得超過38000個不同的詞,使用One-Hot Key方式會造成極大的內存開銷。下圖是對40多萬條評論分詞後的部分結果:

image

因此,我們的模型引入了詞向量(word embeddings)來解決這個問題,每一個詞以多維向量方式編碼。我們在模型中將詞向量編碼維度配置爲128維,對比One-Hot Key編碼的38000多維,無論是在內存佔用還是計算開銷都更節省機器資源。作爲對比,One-Hot key可以粗略地被理解爲用一條線表示1個詞,線上只有一個位置是1,其它點都是0,而詞向量則是用多個維度表示1個詞。(這裏給大家安利一個很好的資源,由騰訊AI Lab去年10月發佈的大規模中文詞向量https://ai.tencent.com/ailab/nlp/embedding.html,可以對超過800萬詞進行高質量的詞向量映射,從而有效提升後續任務的性能。)

假設我們將詞向量設置爲2維,它的表達則可以用二維平面圖畫出來,如下圖所示:

image

2. 模型搭建

本項目的代碼採用了Keras實現,底層框架是Google開源的TensorFlow。整個模型包含6層,核心層包括Embedding輸入層、中間層(LSTM)、輸出層(Softmax)。模型中的Flatten和Dense層用於做數據維度變換,將上一層輸出數據變換爲相應的輸出格式,最終的輸出是一個二維數組,用於表達輸入文本是正面或者負面的概率分佈,格式形如[0.8, 0.2]。

Keras的模型核心代碼和參數如下:

EMBEDDING_SIZE = 128HIDDEN_LAYER_SIZE = 64 

model = Sequential()
model.add(layers.embeddings.Embedding(words_num, EMBEDDING_SIZE, input_length=input_data_X_size))
model.add(layers.LSTM(HIDDEN_LAYER_SIZE, dropout=0.1, return_sequences=True))
model.add(layers.LSTM(64, return_sequences=True))
#model.add(layers.Dropout(0.1))
model.add(layers.Flatten())
model.add(layers.Dense(2)) 
#[0, 1] or [1, 0]
model.add(layers.Activation('softmax'))
model.compile(loss='categorical_crossentropy', optimizer='adam',metrics=['accuracy'])
model.summary()
model.fit(X, Y, epochs=1, batch_size=64, validation_split=0.05, verbose=2)

模型架構如下圖:

image

該模型的核心層採用LSTM (Long short-term memory,長短記憶模型),LSTM是RNN(Recurrent neural network,循環神經網絡)的一種實現形式,具有“記憶時序”的特點,可以學習到數據上下文之間的關聯關係。例如,在含有前置否定詞的句子“我喜歡”和“我不是很喜歡”中,雖然“喜歡”這個詞表達了正面的情感含義,但是句子前面出現的否定詞卻更重要,否定詞會使語句表達的情感截然相反。LSTM可以通過上下文學習到這種組合規律,從而提高分類準確率。

image

模型其他幾個層的含義本文也簡單列出:

Flatten(壓平層),在本模型中負責將2階張量壓縮爲1階級張量(20*64 = 1280):

image

Dense(全連接層),通常用於做維度變換,在本模型中將1280維變爲2維。

image

Activation(激活函數),本模型採用Softmax,它負責將數值約束到0-1之間,並且以概率分佈的方式輸出。

3. 模型訓練

由於我們的模型架構比較簡單,模型的訓練耗時不高,在一臺8核8G內存的CPU機器上完成一輪7萬多個評論樣本的訓練只需3分鐘左右。訓練得到的模型在測試集上可以獲得大約96%的情感分類準確率,而基於傳統機器學習方法的準確率通常只有75-90%。值得注意的是,本模型並不是一個可以識別任意文本的通用模型,因爲我們構建的學習樣本基本上只覆蓋鵝漫用戶評論語料範圍內的詞,超出語料範圍的分類準確率可能會顯著降低。

測試集情感分類的部分結果(數值代表該評論是正面情感的概率):

image

文本表述中含有否定詞的識別場景:

image

關於部分“中性詞”在某些業務情景下擁有情感傾向的問題,利用本文的模型可以較好地處理,因爲本文的模型可以通過學習得到所有詞(包括情感詞和一般詞)的情感傾向。

例如,下圖中的“坑爹”一詞,在模型中已經被明顯地識別爲“負面”情感詞(0.002表示該詞屬於正面情感的概率僅有千分之二),而“666”則被識別爲正面情感詞(概率係數大於0.5則屬於正面情感)。

image

四、 業務應用場景與擴展展望

1. 業務應用場景

在鵝漫U品業務場景中,用戶完成商品購買後通常會對商品進行評論,一般情況下,我們的客服和商家會對差評評論進行一定處理和回覆。但是,真實的用戶評論數據中存在一種特殊的好評,我們稱之爲“假好評”,用戶評論表述的內容是差評,可能由於頁面點擊失誤或者其他原因卻在評論分類上選擇了“好評”,從而導致這種評論沒有被正確歸類,因此,客服和商家同學沒辦法處理到這類評論。從鵝漫的評論數據看,這類“假好評”的比例大概佔據全部評論數據的3%。考慮到鵝漫業務每天產生巨量評論,如果依靠人工甄別的處理方式將非常費時費力,通過自動情感分類的則可以有效解決該問題。

image

鵝漫另外一個業務場景是自動提取“深度好評”:我們直接通過全量數據掃描獲取正面情感係數高,並且評論字數較多的評論文本,將它們作爲商品的“深度好評”。這類評論通常對產品的體驗和描述較爲詳盡,適合放在商品頁面更顯眼的位置,能有效提升瀏覽用戶對商品的瞭解。同時,自動提取評論也能一定程度上減輕商品運營人員撰寫運營文案的工作量,尤其是在商品數量較多的情況下。反之亦如此,如果我們提取負面情感係數較高且字數較多的評論,則可以獲得“深度差評”,它可以作爲商品運營人員瞭解用戶負面反饋的一種有效渠道。

例如下圖的“彈幕”評論,就是我們自動提取的“好評”:

image

值得提出的是,目前,鵝漫也在使用騰訊AILab提供的通用版情感分類接口,它的模型不依賴於分詞,直接以字爲單元進行建模和訓練,情感分類的準確率非常高,適用範圍更廣。我們通過聯合使用兩個不同模型的分類結果完成更高質量的情感分析。

2. 未來擴展方向

我們從海量的文本評論中,歸類出了正面和負面情感的文本數據,在此基礎上如果再通過針對商品不同方面(aspect)的評論的建模乃至句法依存分析(dependency parsing),進一步提煉文本的關鍵信息,就可以獲得用戶的關鍵表達意見。從中我們可以獲得比較全面的商品評價信息,提煉出商品被大量用戶正面評價和負面評價的主要觀點,最終可以爲運營人員和商家提供商品改進意見和運營決策指導。實現真正意義上的基於商品的輿情分析(opinion summary),提煉出用戶的真實反饋和觀點。

下圖以“我們一直喜歡美麗的手辦”爲例,通過詞法依存分析,獲得了詞與詞之間的關係,進而分析出用戶在評論中傾訴情緒的核心對象。在下圖的評論中,用戶對“手辦”表達了正面的情感。

image

詞法關係的含義:

SBV,主謂關係

ADV,修飾(狀語)

HED,核心

ATT,修飾(定語)

RAD,右附加關係

VOB,直接賓語

結語:在互聯網海量信息和數據面前,人的力量非常有限並且是成本高昂的,例如,鵝漫U品評論情感分類和提取的兩項業務需求,就是面向海量文本信息處理的典型任務,如果通過人工完成,執行效率極爲低下。深度學習模型使我們良好地滿足了業務訴求。雖然深度學習並非完美,但是,它所提供的執行效率和幫助是顯著的,並在一定的業務場景下成爲輔助解決業務問題的新選擇和新工具。

五、 參考

Google開源的TensorFlow: https://tensorflow.google.cn/

對TensorFlow的二次封裝框架Keras: https://keras.io/

作者簡介:徐漢彬,騰訊信息流商業化數據算法團隊Leader,前鵝漫前臺研發團隊 Leader,T3-3 級工程師,負責鵝漫U品和 AMS 平臺(高峯期 PV 超過 13 億)的研發工作,在 Web 研發、活動運營服務領域有豐富的經驗和積累。

指導作者:宋彥博士,騰訊AI Lab骨幹科學家,T4專家研究員。前微軟小冰創始團隊成員。發表AI領域頂級會議和期刊論文50餘篇,多次擔任NLP頂級會議(ACL、NAACL、EACL、EMNLP、COLING等)程序委員會委員。主導了騰訊2018智能春聯及AI Lab大規模中文詞向量的構建工作。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章