20行代碼實現電影評論情感分析


背景

情感分析有很多的應用場景,比如做一個電商網站,賣家需要時刻關心用戶對於商品的評論是否是正面的。再比如做一個電影的宣傳和策划,電影在鍵盤俠們中的口碑也至關重要。互聯網上關於任何一個事件或物品都有可能產生成千上萬的文本評論,如何定義每一個文本的情緒是正面或是負面的,是一個很有挑戰的事情。挑戰體現在以下幾個方面,區別於結構化數據,評論數據的長短不一,很難限定到固定的維度。另外很難通過某個詞判斷用戶的情緒,舉個極端的例子,fu*k通常被認為是貶義詞,但是如果一條評論是“傲海 is fu*kinghandsome”,那么其實就是一個正向的意義。本文我要使用IMDB數據集,通過20行的Tensorflow代碼實現一個電影評論預測模型,准確率可以超過百分之九十五,里面涉及到一些詞袋模型以及embedding的概念,這些我等下一篇文章再講,這一次我們就講實踐。

艾伯特(http://www.aibbt.com/)國內第一家人工智能門戶

數據

介紹下本文用到的訓練數據IMDB,完全開源的一個電影評價數據集,有好幾萬條真實的電影評論數據。

20行代碼實現電影評論情感分析

每一個數據都被儲存為txt文件存放,其中pos文件夾就存放正面評論的數據,neg文件夾存放負面情緒的數據。這些數據可以通過一些簡單的代碼提取出來,並且標記。數據集下載地址:http://ai.stanford.edu/~amaas/data/sentiment/

簡單來說,在數據預處理階段,需要把這些文本按照正向和負向打標,並且把文本向量化,比如“Aohai is fuc*inggentle”這種話要怎么變成數值向量,下一篇文章會具體說明。

代碼

代碼其實不止20行,但是真正建模並訓練的就是只有20行,簡單介紹下哈:

20行代碼實現電影評論情感分析

  • pad_sequences把輸入的詞向量轉成矩陣,不夠的用0補

20行代碼實現電影評論情感分析

  • to_categorical:把目標列分成0和1,0是負樣本,1是正樣本
  • 用的是Tensorflow的high level的庫tflearn去構建神經網絡計算
  • embedding下次講,大家可以理解為把每個詞表示成向量
  • 用的是lstm模型,好處就是這種網絡結構比較適合做上下文關聯的分析,適合NLP的場景
  • full connect加regression,分類的標准組合
  • 然后fit一下,開啟訓練,n_epoch是迭代的輪數,為了快速出結果我就寫的1
  • 利用模型對訓練數據做一次predict,大家也可以換成自己的數據

 

運行結果

代碼層級是這樣的

20行代碼實現電影評論情感分析

執行文件emotional.py和下載的IMDB數據放到同一級目錄,train文件夾下有pos和neg兩個文件夾,分別存放正向和負向的評論~

算了,大家直接clone我的項目,我放一些數據在里面,直接運行:

python emotional.py就行

需要安裝Tensorflow和tflearn這兩個庫,當然也可以用阿里雲機器學習PAI的notebook,這樣就不用安裝了,下圖就是我用PAI跑出來的截圖。

運行結果:

20行代碼實現電影評論情感分析

epoch表示的是迭代次數,代碼里只設置了迭代一次。最下面的這一串矩陣一共有兩列,每一行對應一個需要預測的評論數據,每一行的第一列表示這個評論屬於負向的概率,每一行的第二列表示這個評論屬於正向的概率。

代碼地址,我只放了一點點測試數據,完整的數據大家自己去IMDB下吧:https://github.com/jimenbian/sentiment-analysis


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM