摘 要: 评分预测是推荐系统的一个组成部分,通过一个实数表达对用户的偏好进行预测,在学术界被广泛研究。神经网络具有很强的特征提取能力,能获取数据深层次的特征。使用神经网络中的一种网络即自编码器,通过扩展使其具有处理像评分矩阵这种有缺失数据的矩阵的能力,并通过实验证明其预测结果与当前主流的评分预测算法SVD的性能接近。
关键词: 推荐系统;神经网络;自编码器;评分预测
0 引言
协同过滤算法是推荐系统中较为常用的算法,因为使用协同过滤算法进行推荐时,只需收集用户对某件物品的一个动作表达用户对物品的偏好程度,如评分、加入购物车、购买等,即可进行推荐,这样的数据对于电子商务网站或者视频网站来说是非常容易收集的。基于领域[1]的算法是协同过滤算法中最基本的算法,主要分为基于用户的协同过滤算法,即给用户B推荐物品,只需寻找与他相似的用户并将该用户喜欢而用户B没有看过的物品推荐给B。基于物品的协同过滤算法与基于用户的思路类似只是主体换成了物品,这两种算法在业界被广泛应用。后来又出现了矩阵分解的方法,其中具有代表性的是SIMON F提出的SVD算法[2]。SVD算法是对用户评分矩阵进行分解,然后再重构,重构的结果就是预测结果,SVD算法在评分预测方面的性能优于传统的基于邻域的算法,在Netflix Prize竞赛中取得了巨大的成功。
神经网又称为多层感知器,因其具有强大的函数表达能力,可以表达复杂模型,是机器学习的一个重要研究分支,2006年HINTON G E[3]等人发明训练深度网络的方法以后,具有深度结构的神经网络成为了机器学习领域的一个研究热点。自编码器是神经网络中一种用于无监督学习的网络,本文提出一种关于自编码器在评分预测上的扩展,并与当前热门的评分预测算法SVD进行试验对比。
1 算法
目前很多的机器学习工作都会使用自编码器进行无监督学习,得到一组好的特征表示来完成更高级的任务[4-5],使用这样的方法获得了显著的效果。基于自编码器有很强的发现潜在特征的能力,在评分预测中对于用户评分矩阵,用已经评分的部分作为输入,使用自编码器学习恒等函数y(x)≈x获得数据更深层次的表达,然后再利用这组表达去重构评分矩阵缺失的部分,即得到预测值。
1.1 网络结构
假设有N个用户,M部电影,用户对某个电影的评分为1~K之间的某个整数,就形成了M×N的矩阵V,这个矩阵是一个有缺失数据的矩阵,如果用户i没有对电影j进行评分则元素Vji就是缺失的。矩阵的一列的第i属性表示用户i对电影的评分,用矩阵V的一个列向量作为输入给自编码器。自编码器输入层的每一个节点代表用户对当前电影的评分,对于输入向量中缺失评分的那个用户,网络中对应的输入的单元和输出单元也是缺失的,这样自编码器会根据不同的电影输入而改变网络结构,但是隐藏层的单元数是固定的,单元之间的参数是共享的,网络的结构如图1所示。在图中展示了两个电影输入给自编码器的情况,第一个电影只被用户1、2、3、5评过分,则相应的第4个输入和输出节点是缺失的;第二个电影被用户1、3、4评过分,则第2和第5个节点是缺失的。
现在来分析特定电影被用户评分的向量作为输入情况下的自编码器。假设电影被n个用户评价,h为隐藏层的单元个数,则有如下符号定义:
v:神经网络的输入,v∈Rn。
h:隐藏层的单元数。
W:第层的单元j到连接到第l+1层的单元i的参数,其中W(1)∈Rh×n,W(2)∈Rh×n。
b:连接到l+1层的单元i的偏置。
a:第l层的单元i的激活,其中a=vi表示第i个输入。
自编码器的向前计算过程为:
1.2 网络训练
网络的训练采用反向传播算法,包含向前阶段和向后阶段两个过程。向前阶段使用式(1)、(2)计算出预测值,在向后阶段利用误差向后传播的思想计算梯度,即先计算l+1梯度,再计算l层的梯度。每个电影的输入用向量v表示,则每个参数的梯度为:
使用bath-method训练时,不同电影的输入被相同用户评分为输出单元和输入单元,可以把与这些单元相关的参数的梯度进行累加,作为总梯度来进行参数的更新。
2006年Chu Chengtao[6]提出当算法能够写成一种称为summation form的形式时这种算法就能很容易地进行并行化训练,并给出了神经网络在Map-Reduce框架下的并行化训练思路,本文提出的预测评分算法很容易扩展到处理大数据的环境。
1.3 预测
网络训练完成后进入到预测阶段,如要预测用户u1对电影的评分,网络的输入层到隐藏层不变,只需在输出层增加一个关于用户u1的输出节点,为了能够预测其训练集中所有用户对当前电影的评分,可以把输出层的节点数增加到N,网络结构修改如图2所示。输入层的节点4是缺失的,但是输出层的节点4还在,因此输出层的节点4就是算法对用户4关于当前电影的评分预测。然后使用式(1)、(2)对网络进行一次向前计算,即可得到网络对电影被某个用户评分的预测。
1.4 利用隐式反馈
在推荐系统领域,会遇到一种叫做冷启动的问题。网站有很多的电影和用户,但是用户对电影的评分却很少,评分矩阵过于稀疏,导致评分预测精度下降。电影网站很容易获得一种隐式的反馈,即用户看过或浏览过某部电影,但是因为某种原因没有给出评分,这种隐式的反馈,也可以在一定程度上解释用户的偏好,因此算法就可以利用这组隐式反馈数据。考虑向量d∈{0,1}N是一个长度为N的0~1向量,表示电影是否被某个用户查看过,这样就可以通过这组向量去影响隐藏层的表示,这时对式(1)进行修改如下:
本次实验采用MoiveLens-100k数据集,其中含有943个用户对1 682部电影的10万次评分,评分取值是从1~5之间的整数,实验前需要对数据进行预处理,即对整个数据除以5,最后算法的输出结果乘以5得到最终的预测结果。在实验中把数据集划分为不相交的两部分,第一部分包含9万个用户评分作为训练集,剩下的作为测试集验证预测效果,上述过程会重复划分10次,进行10次训练和预测。预测结果的评价采用评分预测中常用的均方根误差(RMSE)作为评分标准。假设用户u对电影i的真实评分为rui,算法预测评分为ui,T是一个集合存放测试集中用户u对电影i评分的二元组,则RMSE的计算公式为:
每次训练,把训练数据分成10批(batche),每批含有168个电影的训练用例,最后一批含有170个电影训练用例,每一批计算完梯度后进行参数更新,神经网络的隐藏单元个数设置为50。对比实验选择当下预测评分算法中比较流行的SVD,SVD的隐式因子设定为50,数据全部经过算法训练一次记一个周期(epoch),训练50个周期,在1~50个周期的误差中选择最好的训练结果,如图3所示。10次测试的平均结果如表1所示。从结果来看,基于自编码器的评分预测算法性能在当前数据集上好于SVD,带有隐式反馈的自编码器性能略好于原始的自编码器,但是提升效果不明显,仅有0.06。
3 结论
本文提出了一种基于自编码器的评分预测算法,在MoiveLens数据集上获得了不错的效果,实验中的参数并没有被很好地调节,算法还有提高的可能性,用户的隐式反馈虽然还能提高算法的预测精度,但是在实验中提高仅仅只有0.06,并不明显,如何更好地利用这种隐式反馈需要进一步研究。通常在获取的用户评分数据中往往带有时间属性,而这也是一个非常好收集到的属性, KOREN Y提出的一个SVD的变种[1]中使用了时间属性并取得了好的成绩,今后的研究中会考虑把时间属性加入到自编码器模型中。近年来基于深度结构的神经网络成为机器学习研究的热点,已被成功地使用到很多领域,如自然语言处理、信息检索、分类。未来利用具有构建深度结构的自编码器来提高预测结果也值得进一步研究。
参考文献
[1] 项亮.推荐系统实战[M].北京:人民邮电出版社,2012.
[2] SIMON F. Netfix update: tray this at home[EB/OL]. [2006-12-11](2014-09-01).http://sifter.org/~simon/journal/20061211.html.
[3] HINTON G E, OSINDERO S, TEH Y. A fast learning algorithm for deep belief nets [J]. Neural Computation, 2006,(18):1527-1554.
[4] RAINA R, BATTLE A, LEE H, et al. Self-taught learning: transfer learning from unlabeled data[C]. Proceedings of the 24th International Conference on Machine Learning, ICML 2007,2007:759-766.
[5] HINTON G E, SALAKHUTDINOV R. Reducing the dimensionality of data with neural networks[J]. Science, 2006,31(3):504-507.
[6] Chu Chengtao, KIM S K, Lin Yian, el al. Map-reduce for machine learning on multicore [C]. NIPS 2006.