NLP實戰|如何用280多萬條豆瓣影評預測電影評分?


爲了預測電影評分,咱們收集了豆瓣電影網站上2.8萬名用戶對5萬多部電影的280萬條評論...python


真實目的,實際上是爲了讓你們可以經過此次的教程,更加了解天然語言處理。網絡


因此,使用電影評論來預測電影評分,到底須要分幾步?框架



項目簡介 函數

本項目只使用電影評論來預測電影評分。學習

因爲豆瓣電影網站的評分爲1-5的整數,所以將該問題轉化爲5個輸出類別的分類問題。
優化


數據集 網站

此數據集包含豆瓣電影網站上2.8萬名用戶對5萬多部電影的280萬條評論。數據共有6列,包括用戶名,電影名,時間戳,電影評論,電影評分和評論被點贊數。3d

具體可在https://www.flyai.com 項目中查找orm


項目過程 cdn

數據處理

搭建神經網絡

定義損失函數,選擇優化器

訓練神經網絡並保存最優的網絡


數據處理

爲了將電影評論輸入到神經網絡中,須要將原始的評論句子進行分詞,而後將詞轉化爲詞向量。本項目使用了清華大學開發的thulac分詞器。要使用此分詞器,首先使用pip安裝thulac庫:

在python中建立分詞器實例,設置分詞器模式爲僅分詞,對每條評論 (comment) 進行分詞:

將分好的詞與預處理的詞嵌入模型 (vocab) 比對,並得到詞向量,詞向量維度爲200。

爲了使每一個batch的輸入大小一致,須要對句子長度進行統一,設置句子最大長度爲20,若句子長度超過20個詞則保留前20個詞,不然將空餘的詞補零。

輸入的評分 (rating) 爲1-5的整型數字,而pytorch進行分類時,類別索引必須從0開始,所以對輸入評分作簡單處理:

搭建神經網絡

本項目使用了LSTM + 全鏈接層 來解決句子的分類問題。在PyTorch中搭建LSTM網絡很是簡單,只須要定義輸入詞向量維度,LSTM隱單元個數,LSTM層數便可。在LSTM層後,使用兩個全鏈接層將LSTM輸出的全部整個句子映射到5個類別上:

定義損失函數和優化

因爲此項目爲分類問題,使用CrossEntropy交叉熵做爲損失函數,並選用Adam優化器。設置學習速率爲0.001。

訓練神經網絡並保存最優的網絡

爲了讓代碼可以同時在cpu和gpu上運行,首先判斷gpu是否可用,並由此設置pytorch計算所使用的硬件:

完整的訓練過程以下所示,當訓練集上準確率高於當前最高的準確率時,保存當前網絡模型:

其中,eval()的做用爲計算訓練集上的準確率:


結語

本項目基於PyTorch框架,完成了根據漢語文字評論預測評分的任務。其中使用的網絡簡單,高效,適合NLP初學者進行學習。


獲取更多相關項目代碼 請訪問:https://www.flyai.com




— END —

完整代碼樣例請訪問:https://www.flyai.com/d/MovieRatings



相關文章
相關標籤/搜索