基于卷积神经网络的协同过滤算法在影片推荐中的应用研究
2022-08-31张海飞崔军纳葛金鼎
张海飞 崔军纳 葛金鼎
摘要:文章运用深度学习算法中的卷积神经网络,利用MovieLens数据集,实现了基于协同过滤的影片推荐系统。系统运行表明,该方法实现的推荐系统可以有效缓解“冷启动”问题。
关键词:影片推荐;协同过滤;卷积神经网络
中图分类号:TP18 文献标识码:A
文章编号:1009-3044(2022)17-0073-05
1简介
推荐系统[1]已经成功应用到商品推荐中,并逐步渗透到了文化领域,丰富了人们的文化生活。在推荐系统还未萌发的时候,用户使用传统的搜索引擎,在获取数据时,如果需求很明确,比如需要找一个电影,但是用户只知道这个电影的名称或导演等信息,搜索出的信息很片面。传统的搜索引擎的弊端暴露了:当用户自己也不清楚自己需要寻找的信息的具体内容,搜索得到的结果可能和用户想要的结果相差很大,用户获得的体验较差[2]。在推荐系统诞生之后,系统开发人员对获取的数据进行研究,这些数据的共同点指向特定的一类群体,数据的不同点指向每一个用户,通过合适的推荐算法,生成相应的推荐列表,会更加契合用户的需求。本文运用卷积神经网络,基于MovieLens数据集,设计并实现了基于协同过滤的影片推荐系统,以满足人民日益增长的文化娱乐需求。
2相关工作
协同过滤(Collaborative Filtering,CF)[3]和推荐系统的概念最早在20世纪90年代被提出,国内外的推荐系统迅速发张,但是这时候的系统并不具备为用户生成推荐列表的能力,必须通过复杂的数据库查询语句构造推荐列表推送给用户。不久,第一个能够完成自主推荐的新闻系统GroupLens[4]诞生了。1997年,推荐系统(Recommender System,RS)一词被Resnick等人提及。自此,推荐系统逐渐走入正轨,被世人广泛应用,也逐步成为较为热门的研究领域,各式各样的推荐算法,不同分类的模型,陆续来到了人们的视野中。经常沉淀,目前主流的算法涉及以下各个方面:
基于内容的推荐算法[5]的本质是提取用户的历史记录,依据用户频繁浏览过并且喜欢的内容,生成推荐列表,向用户推荐与商品信息较为相似的内容[6]。
协同过滤算法的基本方式就是对于数据的挖掘、对历史数据的分析和用户的偏好的分析得出的结论,找寻到用户的存在和相同兴趣的用户群,然后根据预测用户可能存在的喜欢的电影序列进行推送,以和用户同类型的受众群里喜欢的电影推荐列表为基础进行的推荐模式,因而这个算法存在的冷启动[7-8]问题,不能够为新的用户提供有效的推荐信息。而基于项目的协同过滤算法是在设计和用户的喜好推荐上进行类似商品的推荐模式,根据其计算的本质进行相关相似度的推荐方法,生成相似度较高的矩阵方式,来为广大的用户群体推荐電影。邓明通等[9]通过对用户偏好多样性的计算来实现推荐,有效地缓解了冷启动问题,提高了推荐信息的多样性。
3相关算法和模型
3.1协同过滤算法
协同过滤算法是推荐系统常用的算法。自提出以来引起了各大学术领域包括行为科学、管理科学和计算数学等领域的广泛关注,越来越多的专家学者参与到算法的研究[10]中,同时大型的互联网网站如:YouTube、Facebook 等公司都使用深度学习[11]对协同过滤算法进行相关的设计研究,进行成功的引用,丰富自己的信息网站。传统的协同过滤算法可以细分为以下两个方面:
1)基于用户的协同过滤算法
这个算法的原理是先确定所有的用户群体,再根据目标群体,从所有的用户群体中寻找与之相似的用户群体,根据用户群体里的喜好项目逐一遍历展示给目标用户。要实现推荐主要通过这个算法的以下三个步骤:
①通过收集的用户信息的分析,生成一个评分矩阵,其中包括用户ID、项目ID、评分这三个部门。
②利用评分矩阵,计算用户的相似性矩阵。
③为目标用户推荐项目,主要是依据与目标用户最相近的用户群所喜欢的项目。
比如在一个电影推荐系统当中,通过对用户的历史记录来分析数据样本进行推荐,用户a对ABC电影给予了高分平均,用户b对CDE给予了高分评价,用户c对ACF给予了高分评价,电影推荐系统能根据用户对于数据的相似性来判断分析,得出了用户a与用户c的性格喜爱方式类型,最终给用户a推荐电影F。
2)基于项目的协同过滤算法
这个算法的原理在用户群体中寻找目标用户消费过的产品,将这些产品遍历给用户群体。基于项目的协同过滤算法分以下三步进行推荐:
①根据整理的信息,生成包含用户ID、项目ID和评分三部分的特征矩阵。
②根据包含这三部分信息的特征矩阵,结合算法生成相似性矩阵。
③逐一遍历相似性矩阵,根据需求,适当的选择推荐给用户的内容数量。
再比如,在电影推荐系统当中,通过对数据样本的历史记录的分析得知a、b、c三个用户都对A电影打出来高评价,用户a、b同时对B电影打出来高评价,用户a对C电影打出了高评价,用户b对D电影有高评价,因此电影AB的相似度就很高,用户c喜欢A电影,因此根据系统的判断把B电影推荐给用户c。
上述的假设过程就是常见的协同过滤算法的级别推荐方式,通过这一方式能够较快地向用户推荐相关电影信息,但是协同过滤算法存在两个缺点,对这个算法的改进目前仍然处于探索阶段。
1)存在扩展性问题,随着电影数量和用户数量的增加,一定会影响推荐算法的效率,对于实时性效率比较高的商务网站,基于协同过滤的推荐系统存在严重的扩展性问题。
2)存在冷启动问题,如果有新用户注册,没有相应的历史数据对其进行分析,导致模型无法找到相似的用户或商品,也就不能推荐适合的内容,其中冷启动问题表示的是在没有大量数据的情况下,如何进行有效的推荐。
3.2卷积神经网络
卷积神经网络(CNN)[12]是一种包含了卷积计算的方法,是深度学习算法技术的代表之一,卷积神经网络的运用方式,可以进行监督学习和非监督学习进行构建结构,其核心的五层结构为数据输入层、卷积计算层、激励层、池化层和全连接层。
数据输入层主要是对原始数据进行处理操作,对无用的信息进行过滤,有效的信息进行有序的排布,对数据进行去均值、归一化和PAC降维等处理,通过对数据的处理,可以更好地划分层次结构。
卷积计算层是卷积神经网络最为重要的部分,是对前面获取到的数据进行计算处理,拆解的过程,其中较为关键的操作,是对局部关联和窗口滑动,对其中的深度、步长和填充值进行相应的获取,通过对矩阵的映射计算,得出相应的数值,同时卷积计算层还有很高的共享性,能够把计算出的相关数值,同传分析,分享到各层当中,同时计算用户和电影的信息数据,计算矩阵向量可以用来之后的推荐。
激励层主要的功能是把卷积计算层计算出的相关数据,进行结构的非线性映射,其主要的特点是能快速地对相关数据进行展现,梯度求值较为简单,但其本身数据较为脆弱易被更改,不利于长期保存。
池化层就是相对于输入层存在的层次关系,因为输入层输入的数据较为庞大,存储较为复杂且占用大量的空间,因此设计的池化层就是用来解决这一问题,池化层主要的功能就是进行数据图片的压缩,压缩相关数据便于存储。
全连接层其主要功能是在层次间的连接当中,通过全连接层进行数据的快速传输,方便进行数据的传递,位于卷积神经网络隐含层的最后部分,并只向其他全连接层传递信号。
通过输入层进行数据的读取,把获取的数据通过输入层录入,再通过卷积计算层进行数据的计算,计算出相应的矩阵值,通过激励层实现数据结构的非线性映射实现图层,再通过池化层把庞大的数据进行压缩,实现数据的推荐,上述的层次结构都是通过全连接层实现的,这便是完整的卷积神经网络的基本实现方式。
4 基于卷积神经网络协同过滤的影片推荐
4.1数据处理
本项目使用MoviesLens数据集[13],该数据集存储了电影评分,包含了来自6000名用户对4000部电影的100万条评分数据。
用户数据由五部分组成,主要是用户ID、性别、年龄、职业ID和邮编。从图1可以看出,邮编是地区的邮政编码,不是用户特征字段,不需要使用。用户数据user.dat文件中以“::”连接每个数据。收集的数据包含各个年龄段中各行各业的人们,年龄段主要分为年龄在18岁以下、年龄在18~24岁之间、年龄在25~34岁之间、年龄在35~44岁之间、年龄在45~49岁之间、年龄在50~55岁之间、年龄在56岁以上,涉及的行业包含学术/教育工作者、艺术家、文员/行政等二十個方面的。用户数据预处理前的数据格式如图1所示。
影片数据集中收集到的电影可以分为十六个类别,由动作片、冒险片、动画片、儿童片等组成,由电影ID、电影名称和电影风格三个字段组成,数据之间的连接方式依然通过“::”连接,影片数据预处理前数据如图2所示。
评分数据由用户ID、电影ID、评分、时间戳四部分组成,评分数据中数据的排序以用户ID为主,电影ID为辅进行排序。评分数据预处理后的数据如图3所示。
因为数据存在差异性,要根据数据的特点进行不同的处理:用户ID、职业ID和电影ID是不用改变的;性别字段:需要数据库中的F和M字符转换成数值0和1;年龄字段可以将年龄分为七大类,将七大类分别转成7个连续0—6的数值;电影分类字段,需要转换成数字,首先组成一个由电影分类和唯一标识这个电影分类的数字的字典,将每部电影的分类字段转换成相应的列表,因为每部电影可能不止一个类别。电影的名称字段与电影类别做相似处理。电影名称和电影类别的长度需要统一,为了方便处理,长度不足的部分用‘
3.2 实验准备
实验的目的是通过计算训练出用户特征值和电影特征值,进行推荐处理分析使用,分析数据集中的相关字典,发现其中一些字段信息较为特殊,对这些不同于其他字段,且不方便存储的信息通过one hot编码方式进行转化存储,如用户ID、电影ID等字段,这种编码表示的是由0和1组成的数据集合。在存储数据时,时常遇到稀疏性问题,输入的时间较长,维度也急剧膨胀,这是急需解决的问题,因此通过相关数据的预处理方式,将这些字段转化成数字,用这些数字当作嵌入矩阵的索引,网络的第一层使用了嵌入层,维度是(N,32)和(N,16)。
电影类型的处理要多一步,有时一部电影有多部电影类型,这样从嵌入矩阵索引出来是一个(n,32)的矩阵,将这个矩阵求和,变成(1,32)的向量。从嵌入层索引特征以后,将每个特征值通过全连接层传入,再将输出传入到全连接层,最终得到(1,200)的用户特征和电影特征两个特征向量。对于电影名称的处理比较特殊,从嵌入矩阵中得到电影名对应的各个单词的嵌入向量,名称长度有一定限制,这里过滤器大小使用时,就选择2、3、4、5长度。然后对文本嵌入层使用滑动2、3、4、5个单词尺寸的卷积核做卷积和最大池化。最后进行Dropout 操作,全连接层输出。
3.3 实验环境
1)硬件设备
处理器:Intel(R) Core(TM)i7 -8750H CPU @ 2.20GHz 2.21 GHz。
内存:8GB。
2)软件环境
操作系统:Microsoft Windows10 操作系统(64位)。
开发语言:Python 3.7。
编码工具:JetBrainsPyCharm 2018.1.3。
软件工具:Pandas、Numpy、Tensorflow、Collections、Os、Pickle、Re、Zipfile、Hashlib、Matplotlib、Time、Datetime,其中安装Numpy版本过高的话会报错,所以需要安装1.16.0版本的numpy。
实验采用了协同过滤算法进行的相关设计,从不同方面进行相关数据的读取、呈现和分析,能够做到的就是一个根据不同设计模式进行的算法验证操作。
3.4训练参数设置
为了保证算法的精确性,采用了大量的训练数据进行长时间的计算,以折现图的方式进行展现。在每个图中,Train_loss表示训练误差,即训练集在模型中预测结果與真实结果的差值,Test_loss 表示验证集上的损失。从折线图变化的趋势可以看出,Train_loss折线图和Test_loss折线图都呈下降趋势,表明设计的网络信息还在不断学习,即网络结构设计得当,训练超参数设置得当。
对于卷积神经网络的推荐结果影响最大的三个参数为Batch_size、学习率和迭代次数。Batch_size就是每批处理的样本的个数,即一次训练所选取的样本数。学习率就是机器学习的速率,开始时需要较高的学习率进行快速学习,运行一段数据学习率不断衰减,达到稳定。 迭代次数,每一次迭代都会更新一次网络结构的参数。Dropout是为了应对神经网络很容易过拟合的问题。本次设置了三种不同的参数,学习率和Dropout的值始终为0.0001和0.5,而Batch_size和迭代次数设置为三组不同的数值,根据“一个参数不变,改变另一个参数”的原则,选择了256和5、64和5、64和20三组,并且对于Test_loss和Train_loss的值进行统计,结果如图5、图6、图7所示。
图5是在迭代次数为5的情况下,将Batch_size设置为256时,从训练缺损和测试缺损的统计分布来看,训练缺损的值在0.966和12.162之间,测试缺损的值在 0.722和1.418之间,可以看出来波动比较大,不是很稳定。
图6与图5相比,样本数量不变,但是样本的迭代次数增加到20次,此时训练缺损值的范围在0.899~7.984之间,测试缺损值在0.546~1.589之间,相比图5,相对而言波动收敛些,这就说明,在batch_size的数值相同时,增加迭代次数,可以使训练和测试结果更加稳定。
图7与图5的迭代次数一致,都为5,将Batch_size设置为64时,对比图5,训练缺损值范围在0.823至13.101之间,测试缺损值范围在0.232至1.712之间,忽略网络开始学习不稳定的情况,说明在一定范围内,适当降低Batch_size值,可以降低训练缺损。
图8结合图6和图7的规律,将batch_size的值设置为64,迭代次数设置为20,训练缺损值范围在0.506至14.021之间,测试缺损值范围在0.192至1.708之间,可以看出训练缺损和测试缺损的趋势更为稳定,因此本文认为,当batch_size 为确定值时,增加迭代次数可以使训练和测试结果更加稳定。
4 实验结果分析
推荐同类型的电影根据在数据集中随机选区的电影,计算电影特征向量与电影特征矩阵的余弦值进行相似度的比较,计算较大的五个值,如图9所示。
根据喜欢的电影推荐,随机生成用户特征,通过卷积神经网络结合电影特征矩阵计算电影评分,进行推荐评分最高的部分,这个数量是可以进行修改的,在本项目中推荐的数量设置为5,如图10所示。
根据看过此电影的人还喜欢哪些电影,在数据集中选取出的一个电影,然后根据排名选出有同样喜好的用户,提取这些用户的特征向量,进行算法的设计得出相应的推荐,将每个人评分最高的电影选出,并分别进行推荐,如图11所示。
通过对IMDB数据集的获取,对存在的相关用户个性特征值和电影特征值进行卷积神经网络CNN的计算,通过上述的设计方法,进行数据值的处理比对,根据生产用户的特征值矩阵和电影特征值矩阵进行处理分析得出loss的数值,计算当前看的电影特征向量与整个电影特征矩阵的余弦相似度,添加其中随机生成的字段不同,使用用户特征向量与电影特征矩阵计算所有电影的评分,获取得出数较高的电影信息,进行推荐,充分地结合CNN的设计思路,并通过协同过滤算法来解决用户的冷启动问题,计算新用户的矩阵特征值,对数据集中的用户数据进行比对,有相似用户特征值信息的用户,喜欢的电影类型,进行相同类型的推荐,这样可以稍微缓解用户的冷启动问题。
5结束语
本文利用卷积神经网络和协同过滤算法对电影数据分析,经过大量的训练实验得出较优的卷积参数,通过协同过滤算法计算与其他用户的相似度,实现了电影推荐系统,设计的电影推荐系统结合算法维度进行推荐,并实现较高的准确度,缓解了推荐系统的“冷启动”问题。
参考文献:
[1] Chen Y L,Cheng L C,Chuang C N.A group recommendation system with consideration of interactions among group members[J].Expert Systems With Applications,2008,34(3):2082-2090.
[2] 许海玲,吴潇,李晓东,等.互联网推荐系统比较研究[J].软件学报,2009,20(2):350-362.
[3] 马宏伟,张光卫,李鹏.协同过滤推荐算法综述[J].小型微型计算机系统,2009,30(7):1282-1288.
[4] Resnick P,Iacovou N,Suchak M,et al.GroupLens:an open architecture for collaborative filtering of netnews[C]//ACM Conference on Computer Supported Cooperative Work.ACM,1994:175-186.
[5] Tuzhilin A.Towards the next generation of recommendersystems[C]//Proceedings of the 2010 International Conference on E-Business Intelligence.Paris,France:Atlantis Press,2010.
[6] 陳思亦,何利力,郑军红.结合商圈位置区域模型的商品推荐算法[J].计算机系统应用,2019,28(8):136-141.
[7] 孙冬婷,何涛,张福海.推荐系统中的冷启动问题研究综述[J].计算机与现代化,2012(5):59-63.
[8] Schein A I,Popescul A,Ungar L H,et al.Methods and metrics for cold-start recommendations[C]//SIGIR'02:Proceedings of the 25th annual international ACM SIGIR conference on Research and development in information retrieval,2002:253-260.
[9] 邓明通,刘学军,李斌.基于用户偏好和动态兴趣的多样性推荐方法[J].小型微型计算机系统,2018,39(9):2029-2034.
[10] 刘建国,周涛,汪秉宏.个性化推荐系统的研究进展[J].自然科学进展,2009,19(1):1-15.
[11] 孙志军,薛磊,许阳明,等.深度学习研究综述[J].计算机应用研究,2012,29(8):2806-2810.
[12] 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.
[13]Harper F M,KonstanJ A.The MovieLens Datasets:Historyand Context[J].ACM Transactions on Interactive Intelligent Systems (TiiS) 5,4,Article 19 (December 2015),19 pages.DOI=http://dx .doi.org/10.1145/2827872.
收稿日期:2022-03-16
作者简介:张海飞(1980—),男,江苏如东人,副教授,博士,研究方向为机器学习、深度强化学习、地理信息系统;崔军纳(1979—),男,河南许昌人,工程师,硕士,研究方向为工业互联网技术、物联网技术、自动控制技术;葛金鼎(1984—),男,江苏通州人,硕士,研究方向为船舶工程、机械工程、自动控制技术。