NLP情感分析|流程概述(一)
大家好,我是廈門大學數學科學學院的15級本科生@暴烈的謝兔子 ,在這個新開的系列中,我將和大家分享一下文本情感分析(Sentiment Analysis)的相關文章。剛入坑不久,如果文章中有出現錯誤或者遺漏之處,還望各位不吝賜教!
一、情感分析名詞概述
『What』
情感分析是文本分類的一個分支,是對帶有情感色彩(褒義貶義/正向負向)的主觀性文本進行分析,以確定該文本的觀點、喜好、情感傾向。
例如說,文本"這是書讀來愛不釋手"歸為正向,"這本書很難看"歸為負向。當然也有層次更多的分類。
『Why』
被研究的主觀性文本包括顧客對某個產品的評論,大眾對某個新聞熱點事件的觀點等。通過這些文本,商家可以為消費者提供決策參考,相關機構也可以了解輿情,但人工分析耗費大量成本。
『How』
目前有基於情感詞典的情感分析和基於機器學習的情感分析這兩種主流方法。
【基於情感詞典】是指根據已構建的情感詞典,對待分析文本進行文本處理抽取情感詞,計算該文本的情感傾向。最終分類效果取決於情感詞典的完善性。
【基於機器學習】是指選取情感詞作為特徵詞,將文本矩陣化,利用logisticnRegression, 樸素貝葉斯(Naive Bayes),支持向量機(SVM)等方法進行分類。最終分類效果取決於訓練文本的選擇以及正確的情感標註。
(覺得有點抽象的後文有例解)
當然,特定情況下研究某些文本時也可以將兩種方法結合起來。
比如說某些領域的文本沒有標註,該領域的情感詞典也不夠完善,而人工標註需要耗費大量成本,數據的採集相對於人工成本小很多時;可以選取部分文本,利用基本情感詞典的方法粗略地計算這些文本的情感得分值,選取分值偏高或偏低的文本作為已標註的訓練文本 。再結合機器學習的方法進行分析。
(二)、情感分析流程例解
在本篇文章中,我試圖用最簡潔的語言和圖例展現這兩種分類方式。
(1)基於情感詞典的情感分析
以下是我一條貓眼上選取的《西遊伏妖篇》影評:
Review1 =「周星馳+徐克,把觀眾期待度放到很大,看後小失望。特效場景、人物服飾、經典創新這些方面都很值得欣賞,可惜硬傷是一眾主演演技尷尬,劇情超級無聊,走神好多次。」
我們現在有以下詞典:
情感詞:設定positive的詞+1,negative的詞-1;
程度詞:比如出現"小失望"就 -1*1,出現"非常失望"就-1*3
那麼這句話的情感總分值就是 1*3-1*1+1*3-1-1*3 = 1
其中正向得分:1*3+1*3-1*3 = 3,負向得分 |-1*1-1|=2
可輸出[review1 : 1 ] or [review1: (3,2)].
——————————————分界線—————————————————
中文分詞可利用jieba, THULAC,ICTCLAS
該方法的重點在於『構建適合的情感詞典』,不在此贅述,會在後續文中填上。
(2)基於機器學習的情感分析
若以下是一些政治方面的新聞文本
- 首先人工標註好其情感分類。正向為1,負向為0。
- 我們要選取這些文本中的【特徵詞】,比如說做情感分類時的特徵詞要選取情感詞,做商品分類時要選取商品名、商品特別的描述詞等,構造詞袋(bags of words)模型。即統計各詞詞頻,形成如下詞矩陣:
其中A,B,C,D… 代表各情感詞,每一行代表一個文本,每個數代表在該文本中該特徵詞詞頻。
用numpy的數據類型將該數據儲存起來
【生成詞向量的方法英文處理可考慮庫gensim, 並且Multiangles Notepad 這篇博客有詳細介紹「利用gensim和sklearn搭建一般文本分類器方法」】
- 將數據集分為n份,其中n-1份為訓練集,1份測試集,從庫sklearn中載入svm,n logisticRegression, NB等分類演算法。
train_set = data[1:i,:] #i-1個數據作為訓練集ntest_set = data[i:,:] #剩餘的數據作為測試集,訓練集要遠多於測試集nnnntrain = train_set[:,1:]ntag = train_set[:, 0] #第一列是類標籤n
import sklearnnfrom sklearn import svmnfrom sklearn.linear_model import LogisticRegressionnfrom sklearn.naive_bayes import GaussianNBnnnclf_svm = svm.LinearSVC() nclf_svm_res = clf_svm.fit(train,tag)ntrain_pred = clf_svm_res.predict(train)ntest_pred = clf_svm_res.predict(test_set)nnclf_lr = LogisticRegression()n...nnclf_nb = GaussianNB()n...n
- 測試集輪換重複n次,使用交叉驗證測試分類器的準確度。在此另n=10.比較不同分類器的準確率,比較選出最優的。
from sklearn import cross_validationnnkfold = cross_validation.KFold(len(x1), n_folds=10)nnsvc_accuracy = cross_validation.cross_val_score(clf_svm, train, tag, cv=kfold)nnnprint SVM average accuary: %f %svc_accuracy.mean()nn...n
————————分界線——————————
這種方法的重點在於特徵選取。
三、結語
本篇只是概述,具體的實現原理和代碼實現方式都將在後文呈現。
下一篇文章將詳細介紹中文文本的預處理和情感詞典的構建。
非商業轉載註明作者即可,商業轉載請聯繫作者授權並支付稿費。本專欄已授權「維權騎士」網站(http://rightknights.com)對我在知乎發布文章的版權侵權行為進行追究與維權。
作者:@暴烈的謝兔子
來源:知乎著作權歸作者所有。商業轉載請聯繫作者獲得授權,非商業轉載請註明出處。項目聯繫方式:
- 項目郵箱(@iGuo 的郵箱):zhangguocpp@163.com
- 項目網站:http://www.xmucpp.com/(修復中)
- 項目GitHub:Chinas Prices Project at Xiamen Univerisity (CPP@XMU)
- 項目專欄:Chinas Prices Project - 知乎專欄
- 項目知乎賬戶:@CPP
- 項目公眾號:xmucpp2016(XMUCPP)
參考資料:
基於情感詞典與語義規則的微博情感分析_陳國蘭.pdf使用gensim和sklearn搭建一個文本分類器
文本分類技術 - Jaspers Java Jacal - BlogJava
推薦閱讀:
TAG:文本情感分析 |