情感分析系統?
求助萬能的知乎,請問現在有已經設計好的情感分析系統嗎?都應該包含哪些模塊吶?
感謝邀請。手機碼字,請見諒。
目前有一些nlp的平台會帶有情感分析(SA)的模塊,比如騰訊NLP、BosonNLP等,您可以看一下。但要是說把SA單獨做成一個系統的,國內的我不怎麼了解,國外倒是有,回頭有時間補上鏈接,大都是把時空信息融合進去。前段時間跟我師兄弄了一個模型,就是把社交信息和時空信息加進去。至於怎麼融入,方式很多,有個日本人寫了一本書,我記不清名字了,那本書偏工程一點,應該有你想要的內容。
情感分析的python包很多,nltk、snownlp、textblob等,java的斯坦福nlp也挺好的。但是這些都不能算是系統(吧?)
如果您只是希望應用SA,上面的那些工具隨意挑一個就行了,snownlp可以自己添加訓練語料,自己訓練;如果您想親自動手做一個,也不是很難。我們以做一個簡單的(中文)情感分析的流程為例說一下。
首先,數據獲取模塊。這個不是必須,現在非常多的開放數據。如果你需要做實時的SA,Online的輿情分析這種,那這個模塊就是需要的,不像做實驗那樣,用公共數據集是不太行的。
然後,數據清洗模塊。這也是最臟最累的活了。拿微博為例,去除鏈接、用戶信息、非中文符號等,至於去掉哪些內容,其實也和你將要使用的方法有關,比如,我要用到用戶信息、時間、地點,在獲取信息時就應得到這些,清洗時自然不能去掉。像表情符這種,也要根據實際情況看看是否刪除。然後,分詞、去停用詞,很多人都做過這一步,但是也有不去停用詞的,比如我很喜歡的SentiCircle,這個作者就做了一個SA的系統。他認為停用詞也攜帶情感,不應隨意去除。
再然後,文本表示,這個就和你的演算法很相關了,你是使用基於情感詞典、傳統機器學習、主題模型還是深度學習?可以選用詞袋錶示,或者詞向量,亦或是其他(SentiCircle採用二維的點表示每個詞)。
到此,數據獲取、處理基本完成,但如果你需要做更細的SA,比如aspect based SA,你可能還需要做aspect extraction,我喜歡直接用CRF把aspect當作命名實體來抽取。還有像淘寶評論那種,抽取用戶評論的關鍵部分,知乎上有個問題下面把淘寶評論抽取說的很清楚,題主可以搜一下。如果再細,可能還要分句等等。
總之,需求驅動+數據驅動影響著你的數據處理以及演算法選擇的方式。訓練模塊。前期的數據處理終於幹完了 ,該講到演算法了,其實上面也說過了。
基於情感詞典,這沒啥好說的,比誰詞典更好,中文的詞典都不怎麼完善,自己動手做一下,我是把Hownet、台大和清華等幾個我能找到的詞典都整合在一起,然後採用詞典擴充的方法,做了一個類似SentiStrength的帶有極性和強度的詞典,詞典構建的演算法不詳述了,文章很多。情感分類的話,要想做的好一點,可以把否定、轉折、遞進、程度副詞等都處理一下。
基於傳統機器學習的方法,NB、SVM、MaxEnt等等都可以做,這裡就不說改進的方式了,很多文章也都說了,但是我覺得並不是每個方法都能起到提升的效果,還是那句話,需求驅動、數據驅動。
深度學習現在這麼火,CNN、RNN、BiLSTM、Attention based LSTM,等等,都可以試試,我只試了CNN和Attention。
至於主題模型,都被玩壞了。但是我一直覺得,主題模型是門檻比較高的一種方法,主要原因是我比較弱吧,這塊內容比較多,從理論到實現花了比較長的時間。
還差一個預測模塊,這塊不用說了,把前面的都做一遍,出結果。
雖然說起來比較簡單,但是具體實施的時候,上面的每個模塊都夠寫一篇很長的文章。且不說改進了。
還是之前那句話,想用一種方式解決情感分析是不可能的,需求驅動+數據驅動,影響著整個流程的每一步。
最後,喜歡文本分類相關工作的知友我們可以多多交流哦。 請知友多多指教!推薦閱讀: