20行程式碼實現電影評論情感分析
背景
情感分析有很多的應用場景,比如做一個電商網站,賣家需要時刻關心使用者對於商品的評論是否是正面的。再比如做一個電影的宣傳和策劃,電影在鍵盤俠們中的口碑也至關重要。網際網路上關於任何一個事件或物品都有可能產生成千上萬的文字評論,如何定義每一個文字的情緒是正面或是負面的,是一個很有挑戰的事情。挑戰體現在以下幾個方面,區別於結構化資料,評論資料的長短不一,很難限定到固定的維度。另外很難通過某個詞判斷使用者的情緒,舉個極端的例子,fu*k通常被認為是貶義詞,但是如果一條評論是“傲海 is fu*kinghandsome”,那麼其實就是一個正向的意義。本文我要使用IMDB資料集,通過20行的Tensorflow程式碼實現一個電影評論預測模型,準確率可以超過百分之九十五,裡面涉及到一些詞袋模型以及embedding的概念,這些我等下一篇文章再講,這一次我們就講實踐。
資料
介紹下本文用到的訓練資料IMDB,完全開源的一個電影評價資料集,有好幾萬條真實的電影評論資料。
每一個資料都被儲存為txt檔案存放,其中pos資料夾就存放正面評論的資料,neg資料夾存放負面情緒的資料。這些資料可以通過一些簡單的程式碼提取出來,並且標記。資料集下載地址:http://ai.stanford.edu/~amaas/data/sentiment/
簡單來說,在資料預處理階段,需要把這些文字按照正向和負向打標,並且把文字向量化,比如“Aohai is fuc*inggentle”這種話要怎麼變成數值向量,下一篇文章會具體說明。
程式碼
程式碼其實不止20行,但是真正建模並訓練的就是隻有20行,簡單介紹下哈:
trainX = pad_sequences(trainX, maxlen=100, value=0.)
testX = pad_sequences(testX, maxlen=100, value=0.)
# Converting labels to binary vectors
trainY = to_categorical(trainY, nb_classes=2)
testY = to_categorical(testY, nb_classes=2)
# Network building
net = tflearn.input_data([None, 100])
net = tflearn.embedding(net, input_dim=vocabulary_size, output_dim=128)
net = tflearn.lstm(net, 128, dropout=0.8)
net = tflearn.fully_connected(net, 2, activation='softmax')
net = tflearn.regression(net, optimizer='adam', learning_rate=0.001,
loss='categorical_crossentropy')
# Training
model = tflearn.DNN(net, tensorboard_verbose=0)
model.fit(trainX, trainY,n_epoch=1, validation_set=(testX, testY), show_metric=True,
batch_size=32)
predictions = model.predict(trainX)
print(predictions)
前4行應該比較容易懂
- pad_sequences把輸入的詞向量轉成矩陣,不夠的用0補
- to_categorical:把目標列分成0和1,0是負樣本,1是正樣本
- 用的是Tensorflow的high level的庫tflearn去構建神經網路計算圖
- embedding下次講,大家可以理解為把每個詞表示成向量
- 用的是lstm模型,好處就是這種網路結構比較適合做上下文關聯的分析,適合NLP的場景
- full connect加regression,分類的標準組合
- 然後fit一下,開啟訓練,n_epoch是迭代的輪數,為了快速出結果我就寫的1
- 利用模型對訓練資料做一次predict,大家也可以換成自己的資料
執行結果
程式碼層級是這樣的:
執行檔案emotional.py和下載的IMDB資料放到同一級目錄,train資料夾下有pos和neg兩個資料夾,分別存放正向和負向的評論~
算了,大家直接clone我的專案,我放一些資料在裡面,直接執行:
python emotional.py就行
需要安裝Tensorflow和tflearn這兩個庫,當然也可以用阿里雲機器學習PAI的notebook,這樣就不用安裝了,下圖就是我用PAI跑出來的截圖。
執行結果:
epoch表示的是迭代次數,程式碼裡只設定了迭代一次。最下面的這一串矩陣一共有兩列,每一行對應一個需要預測的評論資料,每一行的第一列表示這個評論屬於負向的概率,每一行的第二列表示這個評論屬於正向的概率。
程式碼地址
我只放了一點點測試資料,完整的資料大家自己去IMDB下吧:https://github.com/jimenbian/sentiment-analysis
與網上的案例不同,其它案例都缺少自定義資料集的功能,限制在了IMDB,使用本文的code可以任意修改預測資料集
參考:http://blog.csdn.net/aliceyangxi1987/article/details/76176746
相關文章
- 使用者評論程式碼實現
- 實現基於內容的電影推薦系統—程式碼實現
- 用機器學習實現情感分析機器學習
- 深度學習(四)之電影評論分類深度學習
- 【程式碼視覺化實踐】程式碼變更影響分析視覺化
- Java實現評論回覆功能Java
- 京東商品評論資料介面,電商平臺評論介面,行業商品評論資料介面程式碼封裝教程行業封裝
- 淘寶商品評論資料介面,電商平臺評論介面,行業商品評論資料介面程式碼封裝教程行業封裝
- 【python資料探勘課程】二十六.基於SnowNLP的豆瓣評論情感分析Python
- 關於實現論壇的回覆評論
- 淘寶商品評論介面,商品評論內容,天貓商品評論介面程式碼展示
- 中國電影評論學會:2019年度電影市場報告 90後成電影市場觀影主力
- 可行的二級評論實現
- JavaScript評論敏感詞過濾程式碼JavaScript
- 體面編碼之程式碼註釋評論
- 藉助XPopup,用50行程式碼實現更好的抖音評論彈窗效果!行程
- 「擴充」實現評論 @ 多人通知功能
- 3 條 sql 是實現知乎評論,7 條 sql 實現點贊 + 評論,且可擴充套件SQL套件
- INTERSPEECH2020 語音情感分析論文之我見
- 文字情感分析
- 教你如何用 MongoDB 實現評論榜功能MongoDB
- PHP無限級評論回覆功能實現PHP
- Jquery實現微博分享評論表情特效jQuery特效
- 思否評論區 @ 人的功能實現
- Thread類實現買電影案例thread
- 使用PyLint分析評估程式碼質量
- 搶紅包案例分析以及程式碼實現
- 執行緒池的實現程式碼分析執行緒
- React實現的超高仿豆瓣電影React
- 搶紅包案例分析以及程式碼實現(三)
- 搶紅包案例分析以及程式碼實現(二)
- 搶紅包案例分析以及程式碼實現(四)
- 深度學習之電影二分類的情感問題深度學習
- 【NLP】文字情感分析
- 資料分析:AI智慧科技影響下,電話機器人實現落地AI機器人
- 從電影分析到遊戲分析遊戲
- LazadaAPI介面解析,實現獲得lazada商品評論列表API
- 文章評論功能前後端實現方案總結後端