一种基于深度学习的电影推荐算法
2019-10-08李浩然刘光远张乐莹
李浩然 刘光远 张乐莹
摘 要: 随着互联网的发展,人们的娱乐方式趋于多样化,但人们总想可以直接定位根据自己口味的电影而不是通过自己的搜索和朋友的推荐。然而目前已有的推荐系统机制过于简单,往往是根据网友对电影的的综合评分,可根据关键字,类别等具体搜索,久而久之的搜索痕迹来证明用户的喜好。这种基于协同过滤的推荐系统在遇到冷启动问题时会产生较大的偏差。本文利用卷积神经网络结合协同过滤系统设计出了一款基于神经网络的电影推荐系统,利用MBGD(小批量梯度下降法)对模型进行优化,并在有限的数据集下进行了该系统的实验。实验结果表明该系统比传统推荐方法具有更高的准确性。
关键词: 卷积神经网络(CNN)、协同过滤、文本卷积网络、迭代次数、小批量梯度下降法(MBGD)
中图分类号: TP183 文献标识码: A DOI:10.3969/j.issn.1003-6970.2019.05.036
本文著录格式:李浩然,刘光远,张乐莹. 一种基于深度学习的电影推荐算法[J]. 软件,2019,40(5):185189
【Abstract】: With the development of the Internet, people's entertainment methods tend to be diversified, but people always want to be able to directly locate movies according to their own tastes rather than through their own search and friends' recommendations. However, the existing recommendation system mechanism is too simple, and it is often based on the comprehensive rating of the users on the movie, and the user's preferences can be proved according to the specific search of keywords, categories, and the like. This collaborative filtering-based recommendation system can cause large deviations when it encounters a cold start problem. In this paper, a convolutional neural network combined with collaborative filtering system is used to design a movie recommendation system based on neural network. The model is optimized by MBGD (small batch gradient descent method), and the experiment of the system is carried out under a limited data set. Experimental results show that the system has higher accuracy than the traditional recommended method.
【Key words】: Convolutional neural network(CNN); Collaborative filtering; Text convolutional network; Iteration number; Small batch gradient descent method (MBGD)
0 引言
隨着互联网的发展,人们的娱乐方式趋于多样化,但人们总想可以直接定位根据自己口味的电影而不是通过自己的搜索和朋友的推荐,同时,各大观影平台和电影评分网站也希望可以通过对用户已公开的数据进行分析从而推荐出用户可能喜欢的电影以增加用户粘性,例如全美最大收费视频平台Netflix曾举办竞赛[1]来获得最佳算法以改进其推荐系统。传统的点评和推荐的机制较为简单,往往是根据网友对电影的的综合评分,可根据关键字,类别等具体搜索,久而久之的搜索痕迹来证明用户的喜好。然而电影的偏好所涉及的因素多种多样。例如传统的基于电影评分的单一系统无法考虑到部分影片存在用户恶意低评或者批量好评提升评分的现象,所以仅根据电影评分进行推荐会导致推荐混乱。若是用户仅根据电影类别进行搜索,搜索结果也只是将电影进行归类,这些结果并没有经过筛选,所以电影口碑参差不齐的搜索结果也会在一定程度上影响用户对电影和电影人的评价。因此当今亟需一个综合更多维度的有效推荐系统。
基于此,本文使用MovieLen数据集[2],提取其中电影名称和电影ID并与电影类型综合使用解决问题,主体使用卷积神经网络[3],附加通过文本卷积神经网络[4]结合协同过滤技术[5]增加算法可靠性。为了验证模型的有效性本文采用相关数据进行测 试对比,实验结果表明本文的模型和方法有较好的效果。
1 相关工作
传统对情感分析的方法是利用情感字典将各类词汇根据经验进行分类,之后将分类的结果作为依据对情感进行分析。将不好看,无聊等消极的词汇自动归为差评,将好看,经典等词汇归为好评,这样虽然能成功的根据电影的影评来对电影进行自动评分,但是有些生僻或者莫能两可的词汇却会对评分产生干扰甚至是错评,具有较低的精度,并且情感字典需要极其大量的数据和人为经验的预先规定和输入,在没有相关语言背景的条件下几乎无法实现。之后也利用机器学习来对情感进行分析预测,但是对机器训练的过程中需要极其大量的数据作为支柱来提高结果的精确性,这种方法也不便于执行。
同时传统的推荐系统使用的协同过滤技术过于单一,往往只综合评分和同样用户的观看记录,然而在本模型中我们使用了文本卷积网络处理电影名称同时作为推荐的另外一个评判标准。
本文未实用深层神经网络主要有以下两个考虑原因,首先DNN结构的神经元层数较多,训练的结果极易受极值的影响,影评中的极端评价则有极大可能使模型陷入局部极值。其次较深层次的网络需要十分大量的数据进行训练,不足量的数据可能导致自底层只能接收到小量的数据甚至无法接收到数据,从而在拟合时出现偏差。
BP神经网络[6-9]和DNN存在相似的问题,虽然其按误差逆传播算法进行模型训练,有着较高的容错性和泛化自适应性,但是多层次的前馈网络却十分依赖于样本,训练和预测能力的趋势并不固定。并且需要合适的数据量进行训练,否则会容易因训练的样本过多或过少而导致过度拟合。
所以在此情况下,本文考虑使用的CNN卷积神经网络他不仅允许人为的规定训练的重心,通过逐层的特征提取来提升分类的准确性[10],而且其局部连接,权值共享及采样操作等特性可以有效的降低网络的复杂度,减少训练参数的数目[11]。
2 相关模型和算法
2.1 文本卷积网络
在进行电影推荐时,我们需要处理的数据类别包含了用户的年龄、性别、喜好的电影类型、电影的评分以及电影的名称。相对于前4个元素,我们对数据进行了预处理,然而电影的名称并不好转化为数字,所以在对其进行分析和建模时我们使用了文本卷积网络,网络的具体样式如图1所示,其中,网络的第一层为词嵌入层,该层为多个嵌入矩阵,每个嵌入矩阵由多个嵌入向量组成,每个嵌入向量均表示一个单词。第二层为多个不同尺寸的卷积核在词嵌入层的矩阵上做卷积,尺寸大小表示了每次卷积计算覆盖的单词的多少。不同于对图像的卷积,文本的卷积要覆盖整个单词的嵌入向量,所以其尺寸为单词数,每次卷积滑动的长度一般为4~5个单词。第三层网络是max pooling所得到的一个长向量,最后通过deopout对结果进行正则化,最终得到了电影名称的特征值。
2.2 模型设计
本文所采用的算法CNN为一种深度神经网络,其基本模型如图2所示。
首先,本文在输入层使用了嵌入层将数据进行处理并得到模型训练所需的特征。在第一层嵌入层中,本文设置的维度分别为(n,32)和(n,16),然而由于有些电影存在多个类型,比如科幻动作,所以,本文将电影类型的特征矩阵取出后进行了求和,得到了一个(1,32)的向量。之后,将所有特征引出并将其接连传输到两个全链接层中,最终分别得到大小为(1,200)的用户特征和电影特征两个特征向量。本文通过对这两个特征向量做向量乘法,将真实测评与该结果做回归分析,采用均方误差对结果进行优化,最终得出了相较完美的电影推荐结果。
3 实验
3.1 数据集
本文所用到的数据为MovieLens所提供的数据集。这其中包含了大约3,900部电影的1,000,209个匿名评级,以及匿名用户的部分身份信息。用户数据中包括了用户的年龄、性别、职业和邮编。为了更方便地使用数据,我们对数据进行了处理,将不需要的邮编数据进行了舍弃,将性别修改成了0和1方便读取,对不同的职业进行了不同的编码,并且将年龄按照不同的年龄段划分为了0~6多个层级,最终的数据内容如图3所示。电影数据中,则包含了电影的名称和电影的类别,其中,一部电影的类别可能为很多种,考虑到后面训练模型时可能会遇到的问题,本文对电影的类别数据通过了如上文中所述的文本卷积网络进行了处理。电影数据的内容如图4所示。本次所使用的数据集还有另外一个评级数据集,也就是本文在训练时设置的Target,其中包含了用户的ID、电影的ID、电影的星级评价(满分為5)以及评价时间,由于本次模型训练的Target为电影的评分,故我们在训练时将评价时间舍弃,具体的数据内容如图5所示。
3.2 数据预处理
由于在数据集中,电影的类别和名称都是文本的形式,本文将其转化为了数字类型。首先将其转化为字符串,并以数字的形式保存在字典类型当中,之后,由于电影的类别包含多个参数,电影的名称包含多个字段,我们均将其转换为了数字列表,同时去掉了电影名称中的年份。最终结果如下图6所示。
3.3 训练参数设置
本文在初次进行卷积神经网络建模时产生了较大的误差,为了保证算法的精确性,且由于实验使用的数据量较大,本文最终决定采用MBGD(小批量梯度下降法)对卷积神经网络进行优化。但其在模型训练过程中需要使用大量的训练数据进行长时间的计算,其中,代价函数和激活函数的选择对模型的训练效率有很大的影响[12]。优化过程中,影响最大的参数主要有三个:batch_size、学习率和迭代次数。本文为了探究不同参数影响下卷积神经网络的推荐结果,分别设置了三组不同的参数。其中,学习率我们设为0.0001。dropout我们设为0.5。batch_size和迭代次数分别设为了64和5、256和5、64和20这三组,并分别求出了不同情况下,train loss(训练缺损)和test loss(测试缺损)的统计图,结果分别如图7-9表示。
图7和图8为在迭代次数同为5的情况下,分别将batch_size设置为64和256两个不同数值时,模型的训练缺损和测试缺损的统计分布,从图中可以看出,当batch_sieze被设置为256时,明显其训练缺损由最初的0.48~0.85降低到了最终的0.41~ 0.7,其测试缺损由最初的0.6~1.1降低到了0.53~ 0.93,说明训练和测试的缺损经过多次迭代后有所降低。然而,其整个训练过程并不稳定,说明迭代次数过少。当batch_size被设置为64时,可明显看出相较于先前设置的参数而言,训练缺损明显有所降低。其训练缺损由最初的0.48~0.82降低到了0.42~0.7,其测试缺损由最初的0.6~1.1降低到了0.52~0.91。同于batch_size被设为256的情况,训练和测试的缺损,经过多次迭代后有所降低,但是其整个训练过程依然并不稳定。通过对batch_size的数值进行修改,本文发现,当对一定大小的数据集进行训练时,适当的缩小batch_size可以有效的降低训练缺损。
图8和图9为在batch_size同为64的情况下,分别将迭代次数设置为5和20两个不同的数值时,模型的训练缺损和测试缺损的统计分布。从图中可以明显的看出,当迭代次数被设置为20次时,训练缺损和测试缺损并未出现5次迭代实验时的大幅波动,其呈现出了更加稳定的状态。而在结果上,迭代次数为20的这次训练和测试与迭代次数为5时完全相同,故本文认为,当batch_size为确定值时,增加迭代次数可以使训练和测试结果更加稳定,然而增加迭代次数会使训练时间更长,应当适量的增加迭代次数。
3.4 实验结果
通过上述步骤,本文最终将参数设定为batch_size设置为64、迭代次数为20次、学习率为0.0001、dropout设置为0.5。通过用户特征向量与电影特征矩阵计算所有电影的评分,取评分最高的top_k个来实现给用户推荐其可能喜欢的电影。具体实现的结果如图10所示。通过本文输入的电影,系统最终给出了符合相同类别的最佳评分的5个电影,可以认为,本文的这种电影推荐算法表现出了十分良好的性能。
4 总结
本文利用文本卷积网络和卷积神经网络(CNN)对电影数据进行分析和建模,通过多次实验对CNN的参数进行了调整和校对并确认了最优的卷积神经网络参数,最终成功地实现了电影推荐系统,该系统综合了多种维度并依然保持着很高的推荐精确度,明显优于传统的电影推荐系统。目前该系统存在的问题是缺少最新的电影数据进行测评,故还需要更多的实验来进行该系统的完善。
参考文献
[1] Netflix Prize https://www.netflixprize.com/index.html.
[2] F. Maxwell Harper and Joseph A. Konstan. 2015. The MovieLens Datasets: Historyand Context. ACM Transactions on Interactive Intelligent Systems (TiiS) 5, 4,Article 19 (December 2015), 19 pages. DOI=http://dx.doi.org/10.1145/ 2827872.
[3] LeCun Y, Bottou L, Bengio Y, et al. Gradient-based learning applied to document recognition[J]. Proceedings of the IEEE, 1998, 86(11): 2278-2324.
[4] Kim Y. Convolutional neural networks for sentence classification[J]. arXiv preprint arXiv:1408.5882, 2014.
[5] Sarwar B M, Karypis G, Konstan J A, et al. Item-based collaborative filtering recommendation algorithms[J]. Www, 2001, 1: 285-295.
[6] Pineda F J. Generalization of back-propagation to recurrent neural networks[J]. Physical review letters, 1987, 59(19): 2229.
[7] 安大海, 蔣砚军. 基于BP神经网络的人脸识别系统[J]. 软件, 2015, 36(12): 76-79.
[8] 王宏涛, 孙剑伟. 基于BP神经网络和SVM 的分类方法研究[J]. 软件, 2015, 36(11): 96-99.
[9] 吴亚熙, 岑峰. 基于卷积神经网络的多层级目标检测方法[J]. 软件, 2018, 39(4): 164-169.
[10] 张敏, 徐启华. 基于改进BP的神经网络模型参考自适应控制[J]. 软件, 2015, 36(7): 118-123.
[11] 刘健袁, 谦吴, 广喻晓. 卷积神经网络综述. TP183.
[12] 赵宏, 郭万鹏. 深度神经网络代价函数选择与性能评测研究[J]. 软件, 2018, 39(01): 14-20.