为了预测电影评分,我们收集了豆瓣电影网站上2.8万名用户对5万多部电影的280万条评论...
真实目的,其实是为了让大家能够通过这次的教程,更加了解自然语言处理。
所以,使用电影评论来预测电影评分,到底需要分几步?
项目简介
本项目只使用电影评论来预测电影评分。
由于豆瓣电影网站的评分为1-5的整数,因此将该问题转化为5个输出类别的分类问题。
数据集
此数据集包含豆瓣电影网站上2.8万名用户对5万多部电影的280万条评论。数据共有6列,包括用户名,电影名,时间戳,电影评论,电影评分和评论被点赞数。
具体可在https://www.flyai.com 项目中查找
项目过程
数据处理
搭建神经网络
定义损失函数,选择优化器
训练神经网络并保存最优的网络
数据处理
为了将电影评论输入到神经网络中,需要将原始的评论句子进行分词,然后将词转化为词向量。本项目使用了清华大学开发的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