如何使用python做中文情感分析

作為一門編程語言,Python的編寫簡單,支持庫強大,應用場景多,越來越多的人開始將它作為自己的編程入門語言。

Python一個比較重要的場景是做輿情分析,比如分析社交網路上群眾對某一話題的態度,分析股民的情緒作為投資參考等。其中最基礎的環節就是--分析一段話的情感傾向。

這裡搬出筆者曾經做過的一個例子:分析知乎論壇2017年,「清華大學」話題下的集體情緒變化。

下面就分理論和實踐兩個部分,講一講怎麼快速實現上面一幅圖。

1.中文情感分析方法和難點

在上文所講的例子中,我們希望得到的是人們對一件事情評價的情感傾向。比如支持還是反對一件事情,喜歡一件產品與否--結果可能是積極的,消極的或者中立的。比如

特別喜歡這種可愛的小狗n

這句話的情感傾向顯而易見是正面的。

情感標註的工作交給機器去做,可以有以下幾種實現方式:

1.1 詞性詞典和分詞

簡單的說,就是給每個詞語標註情感極性,比如好看是積極的,醜陋是消極的。擁有這樣一個詞典,機器就能對詞語情感做分類。 對於一句話,可以按先分詞,再統計每個詞語的情感極性的方法。中文分詞的方法可以參照筆者之前的文章: 如何繪製好看的中文雲詞圖。

這種方法看起來是很簡便,但是問題在於,漢語言博大精深,同一個詞在不同語境里有不同的意思,可能表達不同的情感態度。

比如「這個電影拍得太牛逼了」「你牛逼你上啊」,前一句表示電影拍的好,情感積極,而後一句則屬於反諷,情感負面。僅靠詞語標註是沒法準確反映一句話的情感傾向的。

另一個比較客觀的情況是目前也沒有比較好的開源中文情感詞典。

1.2 機器學習

傳統的機器學習方法如SVM,Naive Bayes等也可以用來做情感分類。這裡的關鍵是將文本轉換文本矩陣(比如常用的Bag of Words),交給訓練好的分類器進行情感識別和分類。

Python里有一個常用的中文文本處理庫SnowNLP,裡面就使用了Bayes的方法,通過已經標註好極性的語句進行訓練得到分類器。需要注意的是官方用於情感分析的訓練集來自買賣東西的評價,因此這個情感分析用於商品評價最為準確,其它領域最好自建訓練集。

下載SnowNLP使用以下命令即可:

pip install snownlpn

1.3 神經網路

神經網路在圖像識別上發揮了巨大的威力,同樣的方法也被用在了文本處理上。筆者認為現有比較簡單的方法是以字元為單位,訓練神經網路。這種方法不需要提前知道語法和語義的知識,但需要比較大的訓練集做訓練。在情感分析方面這種方法已經達到了比較好的效果。

圖片來自Yann LeCun團隊

這種方法由紐約大學Yann LeCun團隊提出,具體實現可以閱讀他們的論文。 arxiv.org/pdf/1509.0162

2.簡單實現文本的情感分析

上面提到了諸多實現中文文本情感分析的方法,讀者可以根據自己的興趣去實現。儘管有這麼多方法,但都是要花一些功夫去研究和實現的。針對某一領域相關的文本的情感分析可能需要不斷的去優化,才能達到比較好的效果。

這裡我給大家推薦一個現成的輪子,百度提供的情感傾向分析API(搜索「百度AI開放平台」即可)。文章開始的集體情感變化曲線就是用這個實現的。

使用的方法也很簡單,在官網註冊之後,可以得到每月免費使用的10W次許可權。python可以直接下載百度情感分析的調用模塊。 安裝方法:

pip install baidu-aipn

使用方法:

from aip import AipNlpnn""" 你的 APPID AK SK """nAPP_ID = 你的 App IDnAPI_KEY = 你的 Api KeynSECRET_KEY = 你的 Secret Keynnclient = AipNlp(APP_ID, API_KEY, SECRET_KEY)n

輸入待分析的文本(一段知乎的回答):

text="以前約過一個電子系妹子,之前和妹子關係都挺好的 n 約出去一切也很正常,直到不知怎麼問起GPA 我說我GPA不行,只有多少n 多少。(大概略高於平均吧) 她哦了一聲,說她有多少多少(反正比我高很多,n 她貌似是他們系前幾名) 從此以後她再也沒理過我。 "nresult=client.sentimentClassify(text)n

返回結果:

{ n items: [ {n confidence: 0.528202, //表示分類的置信度n negative_prob: 0.787691, //表示屬於消極類別的概率n positive_prob: 0.212309, //表示屬於積極類別的概率n sentiment: 0 //表示情感極性分類結果n } n ], n text: 以前約過一個電子系妹子...... n}n

解讀一下結果,這句話情緒比較負面,負面的概率是0.787691,置信度是0.528202。

不用自建訓練集,也不用自己調優,完全依賴百度的黑盒子,就可以實現簡單的情感分析。是不是很贊O(∩_∩)O~

關於我更多的實踐,請關注 "果果數據" 微信公眾號,未來也會推出更多數據相關的應用和技術分享!

往期文章:

小六六:使用Python做中文分詞和繪製詞雲zhuanlan.zhihu.com圖標小六六:使用Python爬取12306數據:如何搶到從北京回家的票zhuanlan.zhihu.com圖標小六六:東北在衰退嗎?以遼寧經濟為例的數據分析zhuanlan.zhihu.com圖標
推薦閱讀:

php創建的文件夾名里含有「黒」字時,「黒」字較大概率會重複出現,請問是何原因?
C 語言是學編程的基礎嗎?
看MIT的公開課,裡面的教授說圖靈認為用六條最基本指令就能實現必要的操作。這六條指令是什麼呢?
知乎用戶群分析--又雙叒叕一隻爬蟲爬了知乎20萬用戶
C++ 中,std::future 和 std::promise 名字的來歷?

TAG:Python | 中文情感分析 | 编程 |