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
相關文章
- 使用者評論程式碼實現
- mongodb+express+vue程式碼實現掘金最熱文章收藏評論分析MongoDBExpressVue
- 用機器學習實現情感分析機器學習
- Python 爬蟲實戰(1):分析豆瓣中最新電影的影評Python爬蟲
- 現實程式猿與電影中程式猿
- 實現基於內容的電影推薦系統—程式碼實現
- 深度學習(四)之電影評論分類深度學習
- 藉助XPopup,用50行程式碼實現更好的抖音評論彈窗效果!行程
- 那些出現在電影中的程式程式碼
- 現代情感分析方法
- 執行緒池的實現程式碼分析執行緒
- 用70行程式碼實現日誌分析程式行程
- CNNIC:贊或評論 引起的那些情感變動CNN
- INTERSPEECH2020 語音情感分析論文之我見
- 淘寶商品評論介面,商品評論內容,天貓商品評論介面程式碼展示
- 【程式碼視覺化實踐】程式碼變更影響分析視覺化
- 程式碼之道:媒體評論
- Java實現評論回覆功能Java
- 【分析方法論】屬性對行為的影響分析
- 淘寶商品評論資料介面,電商平臺評論介面,行業商品評論資料介面程式碼封裝教程行業封裝
- 關於實現論壇的回覆評論
- 京東商品評論資料介面,電商平臺評論介面,行業商品評論資料介面程式碼封裝教程行業封裝
- 可行的二級評論實現
- 20 行 Python 程式碼實現加密通訊Python加密
- 20 行 JS 程式碼實現貼上板功能JS
- 【python資料探勘課程】二十六.基於SnowNLP的豆瓣評論情感分析Python
- JavaScript評論敏感詞過濾程式碼JavaScript
- Jquery實現微博分享評論表情特效jQuery特效
- 「擴充」實現評論 @ 多人通知功能
- 文字情感分析
- 運用sklearn進行主成分分析(PCA)程式碼實現PCA
- 體面編碼之程式碼註釋評論
- Python爬取豆瓣電影的短評資料並進行詞雲分析處理Python
- 200行Java程式碼實現依賴注入框架Java依賴注入框架
- 3 條 sql 是實現知乎評論,7 條 sql 實現點贊 + 評論,且可擴充套件SQL套件
- 從電影分析到遊戲分析遊戲
- 深度學習之電影二分類的情感問題深度學習
- 如何用50行程式碼構建情感分類器行程