隨著互聯網的普及,越來越多的用戶已經習慣在網絡上發表評論。這些評論表達了用戶的情感傾向,無論對於公司還是個人,這樣的信息都具備很高的價值。
然而,面對海量的用戶評論數據時,想要通過純人工的方式進行情感分析,幾乎是不可能完成的任務。所以,我們需要使用NLP的技術來處理這個任務。
情感分析:對包含主觀信息的文本進行情感色彩(褒貶)判斷,以確定該文本的觀點、喜好、情感傾向。
情感分析主要有3個要素,如下圖所示:
- 觀點持有者:指發表評論的用戶,如:大眾點評的用戶
- 觀點/極性:正向和負向的評論,如:好吃、難看
- 評價對象:一般包括實體和屬性,如:KFC的就餐環境
其中,很多情感分析也會把“時間”這個維度考慮進去,按照不同的時間段分別進行分析,這樣可以更客觀地評估用戶的情感傾向,比如:使用Twitter的情感分析預測股市行情。
目前情感分析主要有兩種方法:
- 基於情感詞典,是指根據已構建的情感詞典,抽取待分析文本的情感詞,然後計算其情感傾向。
- 基於機器學習的情感分析,是指選取情感詞作為特徵詞,將待分析文本向量化,利用分類器(LR、SVM等)進行分類。
本文我們重點講講基於情感詞典的情感分析,因為其方法相對更簡單一些,更容易上手,不需要掌握機器學習的相關知識,也不需要大量帶標註的訓練數據,而其效果取決於情感詞典的完善性。
情感詞典
情感詞典一般主要包括:情感詞和程度詞。用戶用情感詞表達自己的態度,比如:喜歡、討厭等;而用戶用程度詞表達強弱程度,比如:非常,一般等。
網上會有一些開源的中文情感詞典可以直接使用,但質量一般參差不齊。如果想要高質量的、有針對性的中文情感詞典,那麼就需要自己動手進行生成,自然就離不開中文分詞技術,這裡安利大家一本掘金小冊《深入理解NLP的中文分詞:從原理到實踐》(點擊瞭解更多,查看詳情),讓你可以從零開始掌握中文分詞技術。
假設我們已經有了一份中文情感詞典,大概如下所示(情感詞:數值):
- 喜歡: 1
- 愛:2
- 缺點: -1
- 失望: -2
其中,數值為正的情感詞表達的是正向的,反之表達的是負向的。不同的情感詞所傳遞的程度也是不同的,比如:喜歡就是淡淡的愛,愛就是深深的喜歡。
而程度詞典則如下所示(程度詞:數值):
- 有一點:1
- 非常:2
- 極其:3
用戶會用形容詞來進一步傳遞自己的情感傾向,我們還可以引入一些符號來擴充程度詞,比如:感嘆號(!)。
現在,我們可以開始處理待分析的文本了,收集了一份關於旅店的用戶評價數據,羅列幾條如下:
- 前臺樓層服務員不錯,房間安靜、整潔,唯一衛生間地漏設計不好,導致少量積水。
- 位置不錯市中心,房間一如既往乾淨。
- 半夜沒暖氣住 ! ! ! ! ! ! ! ! ! !
其中,像“不”和“沒”都是一些反轉詞,我們把這樣的詞設置成-1,可以改變原有的情感詞取值符號。
我們先對這些句子進行分詞,會得到如下的結果:
1. 前臺 樓層 服務員 很 不錯 房間 安靜 整潔 唯一 衛生間 地漏 設計 不好 導致 少量 積水 2. 位置 不錯 市中心 房間 一如既往 乾淨 3. 半夜 沒 暖氣 住 ! ! ! ! ! ! ! ! ! !
根據情感詞典匹配分詞結果裡面的詞,而數值計算可以分成正向和負向,我們拿其中一個為例:
1. 前臺 樓層 服務員 不錯 房間 安靜 整潔 唯一 衛生間 地漏 設計 不好 導致 少量 積水 正向匹配結果: 很: 1 # 程度詞 不錯: 1 安靜: 1 整潔: 1 正向數值結果: 1 + 1 + 1 + 1 = 4 負向匹配結果: 不好: -1 積水: -1 負向數值結果:|-1| + |-1| = 2 最後情感傾向結果:(4, 2),綜合數值為 4 - 2 = 2
以上就是基於情感詞典的情感分析的方法,不難發現中文分詞對最後的結果影響很大。有了這樣的情感分析方法,我們就可以自動化,批量地對用戶評論進行分析,快速得到用戶真實的反饋信息,並據此調整產品邏輯或個人購買意願。
關於基於機器學習的情感分析,簡單介紹一下:
- 首先,需要人工標註好的情感分類數據,正向標註為1,負向標註為0,分成訓練數據和測試數據。
- 然後,選取文本中的“特徵詞”,比如商品的描述詞(簡約,時尚)等等,將詞轉化成向量,形成詞的矩陣。
- 最後,使用分類器模型(LR、SVM、NB)對訓練數據進行學習,得到模型後,用測試數據進行預測,選取效果最優的模型。
本文淺談了如何做情感分析,基本滿足了大家日常對情感分析的需求,如果想了解一些進階的方法,大家可以關注我的專欄,後面會再更新相關內容。大家如果對中文分詞感興趣,還請多多支持我的掘金小冊《深入理解NLP的中文分詞:從原理到實踐》(點擊瞭解更多,查看詳情),多謝多謝!