基于词典的细粒度情感分析
? ? ? ? ? ?
1 細粒度情感分析
????????傳統的情感分析大多是針對句子級的,即某條評論或某句話為積極或消極的概率。而往往一句話中包含著多個描述點,即方面級的述評,這時用一個模糊的概率或數字去評價整段文字或整句話勢必是不準確和不公允的。如“我的男朋友性格很好,很專一,但有一些社恐”、“酒店很不錯,視野一絕,早餐很棒,但就有一些貴”等。基于此,需要對文本內容進行細粒度的情感分析,以達到更好的分析效果。
????????目前,能夠實現細粒度情感分析的途徑大致有以下幾種:
????????(1)SenticNet庫
????????(2)情感詞典
????????(3)實體命名識別+深度學習
????????第一種方式比較方便簡單,但畢竟是現成的庫,無法普適于每一個研究場景,所以推薦。第二種方式因為是基于詞語來進行數學運算,因此能夠精確地識別到自己想要的方面級情感(需要自己設好情感分類,可以通過既有的經典模型,或分類聚類算法實現),但缺點是詞典的設置耗費人工較大,程度詞的權重以及計算公式的設置有一定的主觀性(當然可以在同一計算標準下通過標準化來緩解)。第三種方式即通過灌入大量數據進行識別和訓練,不用多說,第三種方式是目前最火也是學術界很提倡的一種,但對計算機編程以及算法的要求更高。
? ? ? ? notes:這里需要注意的是:各種方式都存在優缺點,盡管是基于深度學習的情感分析也不能說是最好,而只能說是最火。情感分析是目的,至于我們用何種途徑去實現并沒有優劣之分,在學術界和企業實踐中對這些方法并沒有一錘定音的結論,比如在很多大型企業做顧客需求分析以及課題組的某個項目中都是具有自己的情感詞典的,和我們不同的是,他們是一個團隊,精細化效果背后的繁瑣被分攤到了團隊中的每一個人,而論文和平時課程作業只有自己...
2 基于詞典的細粒度情感分析
2.1 前期準備
? ? ? ? 在進行情感分析前需要做一些準備,具體包括數據的采集、清洗;情感詞的分類、程度詞和否定詞的尋找以及權重的設置,進而構建詞典;計算公式的設置。
2.2 數據展示與詞典設置
????????為了方便,我這里采用就用一句話來作為樣本吧:
????????“我的男朋友非常好,很專一,我喜歡極了,沒有不良嗜好,但有一些社恐”
? ? ? ? 黑色加粗的部分就是情感詞,紅色部分是前向程度詞,藍色部分是后向程度詞,綠色部分是否定詞。
sen_word_dict={'好':1,'專一':1,'喜歡':1,'不良嗜好':-1,'社恐':-1} before_degree_word_dict={'非常':2,'很':1.5,'一些':0.8} after_degree_word_dict={'極了':2} not_word_dict={'沒有':2}2.3 計算規則與代碼思路
????????計算規則即總得分=正向情感詞*程度詞+負向情感詞*程度詞
????????代碼比較繁瑣但比較簡單,基本上就是for 循環+if語句可以實現,需要完整代碼的可以在評論下方留下郵箱~重要的是厘清計算和遍歷邏輯。
????????這里需要說明的是,一般情況,前向程度詞可能會和否定詞組合,如“非常不好”、“沒那么好”等,即需要對情感詞前方兩個詞進行檢驗。而對于后向情感詞來說不太可能兩者進行組合,一般只有程度詞,如“好極了、棒極了”,即在后向程度詞檢驗時只需要延申一個索引。
?
?????????此外,因為是基于詞語的計算,因此分詞結果特別重要,比如“不好”、“非常不好”沒有被切分開,則在情感詞中基本詞是不帶程度詞的,這樣就會導致得分為0。因此需要進行處理:
? ? ? ? 針對單字的程度詞:jieba.suggest_freq(('很','好'), True)
? ? ? ? 針對非單字的程度詞:利用自定義詞典:jieba.load_userdict("外部詞典.txt")將詞頻設置的高一些,讓其被作為獨立單元被分割出來。
2.4 計算得分
最后男友得分=2*1+1.5*1+1*2+(-1)*(-1)+(0.8)*(-1)=5.7分
?
?
?
總結
以上是生活随笔為你收集整理的基于词典的细粒度情感分析的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: vue input 只允许输入整数、整数
- 下一篇: QQ VS 360 大战开始