機器學習實戰,使用樸素貝葉斯來作情感分析

前言

前段時間更新了一系列基礎的機器學習算法,感受有些無味,並且剛好那時買了了國內某公司的雲服務器,就打算部署一套文本處理的WEB API,順別應用一下以前學習到的機器學習算法。(文末放出地址)python

本文不會涉及過於複雜的數學原理,主要講述如何提取特徵與調用模型。git

實現了的api

  • 分詞
    訪問/cut?sentence=&method=,其中sentence參數指明須要分詞的句子,method參數指明分詞的方式。github

  • 統計詞頻
    訪問/count?sentence=&=method=,其中的參數說明和分詞的api一致。算法

  • 情感分析
    訪問/count?sentence=,由於目前是針對句子的,所以sentence的範圍限制了在1~200詞之間。segmentfault

本文重點講述情感分析的實現。後端

情感分析的實現

情感分析的應用是多種多樣的,往大了說,能夠用於國家對某個熱點進行輿情監控,選舉的選情分析,電商對產品的售後意向調查,往小了說還能夠寫一個腳本對你女神的微博進行關心,在女神不開心的時候及時送上關心。api

至於情感分析的實現,在學術論文上均有說起,大體過程均可以分爲提取情感極性詞,將語句轉化爲向量,扔進你訓練好的模型裏服務器

在這裏咱們針對實際狀況作出必定的修改,提取情感極性詞,必然是須要詞典來參考的,雖然各大語言機構都有公開的詞典,,但並不建議使用這些詞典。其中一個緣由是由於這些公開的詞典太過書面化,和「禮貌」,不太接近平常生活。所以這這裏我採用的是自定義詞典,另一點是,在提取關鍵詞部分不只僅是提取情感相關的詞語,同時也使用其餘平常用語,好比草泥馬,雖然不像開心,傷心這樣的情感極性詞,但草泥馬顯然具備明確的情感偏向。機器學習

值得說明的是,咱們既然在提取特徵詞的時候考慮到日常的詞語,一樣也就意味這一些亂七八糟的詞語會混進來,因此咱們在提取完特徵詞後,同時計算它們的詞頻,只取頻率排名的前20%,(固然這個數字能夠根據本身須要調整)。學習

挑選的出來的特徵詞就構成了[word1,word2,word3……],同時檢測訓練樣本,若樣本中出現了特徵詞,則該樣本的特徵向量對應位置置1,不然爲0。

構成特徵向量後,我選取的算法是樸素貝葉斯,關於其原理,能夠查看我支持的專欄機器學習從入門到放棄之樸素貝葉斯。至於爲何選取樸素貝葉斯,很大一個緣由是由於樸素貝葉斯在垃圾郵件分類上有不錯的效果,而肯定一個句子屬於那種情感,和判斷一封郵件是否爲垃圾郵件有殊途同歸之妙。

在sklearn中,只要添加以下代碼便可。

from sklearn.naive_bayes import GaussianNB
gnb = GaussianNB()
gnb = gnb.fit(feature, label)
result = gnb.predice(test)

上述api中涉及的分詞操做均是使用 結巴分詞 完成。

測試效果

下面測試用例又黃又暴力,未成年觀衆在家長的陪同下觀看。

圖片描述

圖片描述

圖片描述

開源代碼

dudulu

WEB API測試頁面

目前只有情感分析的api的測試頁面

dudulu
不得不說使用了必應的背景圖來作本身網站的背景圖效果至關不錯。

後話

但願你們多多調戲(目前語料只支持中文),後端的日誌會記錄下測試記錄(算是收集數據),我會週期性上去更新模型,效果理論上會越變越好。

相關文章
相關標籤/搜索