毕业论文

基于深度神经网络的电影推荐算法的设计与实现

作者:论文空间  栏目:计算机论文     更新时间:2019-12-02 08:59   浏览

 
  摘 要:近年来,随着网络数据的爆发增长,数据已经变得泛滥,各种信息琳琅满目,如果你想要在大千网络中快速而精确地找到你所要的信息,那还真是要费一点工夫。而且很多时候,我们又疲于去搜寻数据,这时候,基于神经网络的个性化推荐就显得尤为耀眼了。
  随着网络时代的进步和社会化网络的飞速发展,每天都会有数以亿计的微博、短信、新闻、图片、视频、音频等等数据流传在网上,而对于用户来说,这么广大的数据量,搜索起来会十分的困难,传统的搜索技术已经不能满足当代的需求了[1]。并且在信息爆炸的今天,获取信息的途径和方式多种多样,人们最多的是去找自己感兴趣的,比如购物,买书,社交,新闻,音乐视频等等,这些地方都会有推荐,根据个人喜好,兴趣习惯等进行个性化内容推荐,因为个人的爱好不同,所以推荐内容也因人而异。而推荐系统最重要最核心的内容便是推荐算法,推荐算法的优劣便决定了推荐系统的好坏[2]。
  关键词:个性化推荐;信息爆炸;神经网络;推荐算法
  前 言
  “推荐系统是利用电子商务网站向客户提供商品信息和建议,帮助用户决定应该购买什么产品,模拟销售人员帮助客户完成购买过程。个性化推荐是根据用户的兴趣特点和购买行为,向用户推荐用户感兴趣的信息和商品,为大规模数据交换提供了一种充分使用网络资源的方法。”这是百度百科上对推荐系统的定义,到目前为止,推荐系统的应用已经十分广泛,电影,音乐,图书,新闻,商品等等,就比如我们现在经常玩的游戏——王者荣耀中英雄装备的推荐也属于推荐系统的应用。可以说推荐系统已经深入市场,深入社会的方方面面了。而推荐系统的核心部件——推荐算法也随之经历了不同程度的发展[3]。
  而电影作为日常生活中不可或缺的娱乐方式,它的数据量已经成指数型不断增长,面对众多纷繁复杂的电影,如何在质量参差不齐的海量电影中找到自己心仪的一部,已经成为一件人人头疼的事情,
  本文主要的研究对象是电影推荐算法,分析对比现有的各种电影推荐算法的优缺点,在深入分析各类传统的推荐算法的基础上,尝试运用神经网络来编写算法,实现一个基于深度神经网络的电影推荐算法。使用文本卷积神经网络,并使用Movie Lens数据集来作为实验的研究对象。所做的主要工作如下:
  (1) 推荐算法所用平台的搭建,算法的编程语言主要是Python,并依据Tensor flow平台来设计神经网络。
  (2) 对Movie Lens数据集进行处理,去除一些无用的信息,保留关键的实验所需数据,减少冗余的数据,便于算法实现,削减时间代价。
  (3) 分析了以往前辈们的推荐算法,借鉴了部分思想,初步设计了算法模型,虽然有瑕疵,但基本能运行。
  (4) 针对推荐算法的评价标准对算法进行了评价,并据此做了改进方案,大大的提高了算法的精确性与高效性。
  第一章 绪 论
  本章首先介绍了电影推荐算法的研究背景和意义,其次对各类推荐算法做了一个简介,并概述了本文所做的主要工作和任务点,在本章的最后介绍了论文的组织结构。
  1.1 研究背景及意义
  据 2018年 We Are Social和Hootsuite的最新全球数字报告显示,全球使用互联网的网民数量已经超越了40亿,而同期的全球人口数量大约为76亿。得益于近十几年移动网络与智能设备的发展,在这40亿网民中,有大约一半使用智能手机上网。根据监测统计,2017年全球的数据总量为21.6ZB(1个ZB等于十万亿亿字节),目前全球数据的增长速度在每年40%左右,预计到2020年全球的数据总量将达到40ZB。面对如此庞大的天文数字,可见互联网正处在一个信息过载的时代,信息的大爆炸,使用户们很容易迷失在信息的海洋中。信息超载,通常是指个人所接受的具有潜在价值的信息超过其自身的处理能力时,导致信息利用率的相应降低的一种现象。而解决信息过载的方法还不是很成熟,目前最广泛的是发展信息过滤技术和搜索引擎技术以及各类门户网站的发展,但是对于这些方法,不可避免的便是需要用户主动提供关键词,而关键词的不准确又会使得返回的结果差强人意,另外也无法获取用户的喜好来返回一个正适于用户的信息。近年来移动互联网的崛起,各类应用也蓬勃发展,像twitter、微博、Facebook等,这些应用里驻足了大量的用户,每天产生的信息量大得惊人,而且这些信息是不断地在更新与淘汰,那么,如果用户在这些应用里在这如此广袤的信息海洋里想要快速地找到自己所感兴趣的内容,真的是非常的困难。随之推荐系统应运而生,推荐系统根据用户的相关信息,比如行为习惯,评价偏好等等,主动地向用户返回其最可能感兴趣的信息。比如网易云音乐,用户一打开应用,便会出现个性化推荐页面,而所推荐的便是用户最感兴趣和最关注的内容,推荐算法和推荐系统的出现,使得有一股隐形的力量在挖掘用户留下的各种显示和隐式反馈,如观看记录,评分纪录,浏览历史等等,根据用户的停留时间,点击频率,来挖掘出用户的特征及个人喜好,从而推荐的内容和信息便会主动地迎合用户,达到用户的理想需求。
  另外对于现代人来说,每个人都有自己关注的领域、前沿信息、行业大牛、经典文章经典音频视频等,如果推荐系统能够据此推荐给用户所关注领域的最新信息,笔者认为这对于信息的传播和发展是具有重大意义的,但它同时也面临着巨大的挑战,如果用户关注了一些负面的内容,推荐系统则会继续向你推荐负面消息,如此的恶性循环,将会导致巨大的价值观偏差,对社会也会造成巨大的影响,如之前的抖音、内涵段子等,用户持续的关注三俗内容,导致了一些不正之风的燃起。因此推荐系统要做一些适当的应对措施,以免误导用户。人工智能时代,如果能用神经网络相关算法,训练数据集,那么将会得到一个推荐准确率极其高的系统,这样对于用户的喜好,习惯把握的也十分到位,将大大地改善用户的使用体验[4]。
  1.2 电影推荐算法概述
  视频是互联网中的重要组成部分,目前的视频网站中拥有数以万计的电影,假如用户要通过一页一页的查找想看的电影,那估计找到了都不想看了。电影推荐算法正是为解决此类“电影过载 ”问题而产生的。
  目前市面上电影推荐算法数不胜数,但大多数应用的还是协同过滤算法,基于用户或者基于内容、评分等等,如表1.1所提到的电影推荐网站,根据关键词过滤掉无关信息,然后把结果返回给用户。Youtube作为最大的短视频网站,每天处理海量的视频信息,它所使用的是混合推荐算法,并且加入了深度学习,但是它面临的挑战是巨大的,需要实时地更新视频列表,用户上传的视频没有相关的描述内容,流传起来比较麻烦。电影推荐算法非常的多,但是想要找到一种适合的算法确实有一定的难度,每种算法都有一定的优缺点,有各自的局限领域,这样电影推荐算法的选择就成了一个难题,设计者往往需要测试多种算法,了解它的原理及概念,最后再逐一筛选找到最适合的那一个算法。具体的电影推荐算法将在第二章中详细介绍。
  1.3 本文的主要工作简介
  本文主要通过分析对比传统电影推荐算法,总结分析它们的优缺点,对于它们的适用范围,局限条件做了一个调查,然后以TensorFlow为框架设计一个文本卷积网络,使用movie lens数据集作为所用的训练集和测试集,进行多次训练,最后得到一个较之传统推荐算法更为准确的基于深度神经网络的电影推荐算法。
  本文主要任务和工作如下:
  (1)对传统电影推荐算法做了深入的了解,总结分析了它们的优点和它们的不足之处,对于神经网络算法的设计做了一个奠基。
  (2)提出了将深度学习用于推荐算法的设想,通过学习TensorFlow,结合前辈们的经验和知识,尝试搭建了自己的深度神经训练网络——文本卷积网络。所做的实验结果表明,基于深度神经网络的电影推荐算法是可行的。
  (3)基于movie lens数据集,将其分为数据集和测试集,训练得到用户特征和电影特征,而后将这两个特征整合成特征矩阵保存到本地,两种方案来计算预测评分,一是将用户特征和电影特征作为输入,经过全连接,输出的到一个值,另一个便是简单地将用户特征和电影特征做矩阵乘法得到一个预测评分,编写推荐方法,便可以实现推荐功能。
  1.4 本文的组织结构
  本文共分为五个章节,各章内容安排如下:
  第一章:绪论。本章介绍了课题的研究背景及意义、电影推荐算法的概述、本文的主要工作简介,最后介绍了本文的组织结构。
  第二章:推荐算法简介。本章详细介绍和分析了传统的推荐算法和非传统的推荐算法及它们的优缺点,介绍了推荐算法的一些常用评价指标。
  第三章:主要介绍了Tensor Flow平台的搭建,神经网络的创建,及Movie Lens数据集的基本介绍,并对Movie Lens数据集进行了预处理,使其简化,便于训练使用。介绍了CNN文本卷积网络的构建,一些基本的参数设置,及模型设计,并初步运行所设计算法,得到了初步的训练结果但也出现了一些问题。
  第四章:通过分析实验数据,对比结合以往优秀算法,进行了一些算法的改进,并初步对算法做了一个评估,解决了第四章中出现的一些问题。
  第五章:总结全文,对未来电影推荐算法提出了展望和设想。
  第二章 推荐算法简介
  本章详细阐述了目前现有的一些推荐算法,介绍了一下它的研究现状,对比分析了现有的传统的推荐算法和非传统的推荐算法,并总结分析了它们的优点和应用的局限之处,介绍了一些常用的推荐算法的评价指标。
  2.1 推荐算法研究现状
  对推荐系统的研究最早可以追溯到1995年3月,卡耐基.梅隆大学的RobertArmstrong等人在美国人工智能协会上提出了个性化导航系统Web Watcher,斯坦福大学的MarkoBalabanovic等人在同一会议上推出了个性化推荐系统LIRA。经过一系列人员的研究与发展,到目前为止,推荐系统已经发展的较为成熟,常用的推荐算法也越来越丰富,比如国外大型的视频网站——YouTube,YouTube所用的推荐算法在视频推荐领域应该是最为成熟的,毕竟它拥有极大的视频量以及一些大大小小的推荐问题,所使用的算法结合当下热门领域——深度学习,YouTube团队对推荐算法的优化首屈一指,国外其他知名的网站或者平台像Google、Amazon等等也在不同的领域部署了不同的推荐系统。国内对推荐算法的研究也并不落后,2013年百度举行电影推荐系统算法创新大赛,着实出现了一大批比较好的推荐算法,百度也在其浏览器中实施推荐系统,打开首页就会看到新闻等等内容的推荐,是比较个性化和智能化的推荐系统。用过网易云音乐的用户也可以体验到个性化推荐系统的方便之处,根据用户当初注册时选择的兴趣所在,智能地自动推荐相关内容,而且根据用户的使用记录,自动优化推荐内容,可以说是十分的灵性了[5]。
  进入人工智能的时代后,推荐系统正在向更大的目标迈进,而深度学习的兴起,让人工智能进一步爆发,而深度学习强大的表征能力和低门槛更为推荐系统带来了新的春天,一系列与深度学习结合的优秀的推荐算法正在广泛的应用之中[6]。
  2.2 传统的推荐算法
  本文以推荐算法的发展路途,将推荐算法分为传统的推荐算法和非传统的推荐算法。传统的推荐算法有基于内容推荐、协同过滤推荐、基于知识推荐、基于效用推荐、基于关联规则推荐、组合推荐等等,本节详细介绍前三种算法[7]。
  2.2.1 基于内容的推荐算法
  基于内容的推荐算法(Content-Based Recommendations CB),可以说它是最经典的推荐算法了,根据用户以往感兴趣的物品(item),推荐给用户跟之前的喜爱类似的物品。它的核心之处是所推荐的物品跟之前喜欢的物品的相似性的计算。它有一个关键点是标签。例如你看蜡笔小新,它的标签就是卡通、搞笑、儿童等等,然后基于这个标签,推荐系统便会把这些相关内容推荐给你。它的推荐过程有三步:物品表示、特征学习、生成推荐清单。首先是找出item的一个特征或者属性,然后拿着这个特征跟用户过去喜欢的item特征作比较,来学习用户的喜好特征,最后通过分析用户的喜好特征与候选item的特征,生成一组相关性最大的推荐清单[8]。
  基于内容的推荐算法的优点有三个:第一,较高的用户独立性,因为CB中用户的喜好特征完全是基于自身,没有他人的参与,保持了高度的用户独立性,与下文的协同过滤算法则相反;第二,可解释性好,推荐系统可以清楚地解释为何将此内容推荐给用户,只要告诉用户这些内容有哪些特征,刚好符合用户需要的特征集;第三,更新快,但凡有新的item加入进来,只要它符合用户需要,便可以迅速地得到推荐。而CB的缺点便是:一是特征获取困难,如果是简单的文档信息便可以轻松的获取,但像音乐、电影、商品等,这些item属性比较多,特征的获取便没那么容易了;二是无法找出用户的潜在兴趣,因为CB是基于用户以往的兴趣喜好,它的推荐便会模仿过去,就像我喜欢吃面条,它便一直给我推荐面条,可我也喜欢饺子等其他的啊;三是无从为新用户建立推荐(冷启动), 这个很好解释,基于内容的推荐算法当然需要用户提供历史纪录啊,巧妇难为无米之炊。虽然CB算法可用性不强,但组合其他算法后精度还是挺高的[9]。
  2.2.2 协同过滤推荐算法
  协同过滤推荐算法(Collaborative Filtering Recommendation)是推荐系统领域中使用最早最经典和可行性最好的算法之一,此算法的原理是依据用户与用户或者项与项之间的相似性。依据相似度的度量方法,比如欧氏距离、皮尔逊相关系数和余弦相似性。它将用户与用户之间的数据进行比对,查询相似性,而后把推荐内容基于相似度的大小进行排序,尽力挖掘用户的潜在特征,找出用户的偏好,然后根据不同的偏好分门别类,换言之:物以类聚,人以群分,英雄所见略同[10]。
  CF的核心——相似度的计算基本上都是基于向量,即两个向量在空间上距离越近相似度越高,具体的计算方法不再一一赘述,这里只给出它们的公式:
  CF相比较CB又有点也有缺点,一般用户对于item的行为反馈有两种:隐式反馈和显式反馈。显式反馈是用户明确告诉你对某个item的喜好,而隐式却不告诉你,只是留下一些历史浏览记录,页面浏览行为等,而且这些又存在比较大的水分,有大量的噪音,需要经过特殊的处理和转化,才能发挥其应有的价值[12]。
  2.2.3 基于知识的推荐算法
  基于知识的推荐(Knowledge-based Recommendation)比较典型的是构建领域本体,或者是建立一定的规则,进行推荐。换种说法就是我们所熟悉的推理,它跟CF和CB算法不同,不需要事先知道用户的需求和偏好,而是根据某个特定领域的知识,来考察所选候选集是否满足用户的知识需要,由于知识的领域功能等的不同,故推荐结果也是特定的,具有个性化的一面[13]。
  图2.4 基于知识的推荐
  但是基于知识的推荐实现起来却很复杂,一是本身知识的获得不容易,这样一来推荐的前期工作就会不到位,推荐结果就会有很大的偏差,二是它的推荐不是动态的,而是静态推荐,不能根据知识的变化更新而适应新的推荐模型。但是如果获得的知识比较全面,那么此算法便会将用户的需求直接映射到item上,会综合考虑非item本身的属性。
  2.3 非传统推荐算法
  2.3.1 混合推荐算法
  混合推荐算法,顾名思义,就是混合以上的算法,综合它们的优点,取长补短,弥补单一算法所暴露的不足之处。混合推荐,以加权或者变换、混合、特征组合、特征扩充、层叠等方式尽心融合。它的优点是不再单一使用某一种算法,没有冷启动问题,没有基于推荐特性的流行度偏见[14],可以推荐意想不到的内容,实现多样性;缺点是需要通过大量的工作才能获得平衡,推荐的周期比较长,付出的代价大,本质上还是传统的推荐算法。下图是各种推荐算法的对比[15]:
  图2.5 主要推荐算法对比
  2.3.2 新型推荐算法
  新型推荐算法区别于传统的推荐算法,它的类型有七中,分别是:深度学习、学习等级、上下文感知推荐、张量分解、分解机、社会推荐以及Multi-armed bandits(探索/开发)。主要推荐过程是训练模型,通过机器学习等手段,训练数据集,做分类得出候选集,该召回的召回,该推荐的推荐,最后根据排序算法,生成推荐菜单。它的优点是:有助于维持最终性能百分点、可以循序渐进。它的缺点便是:不便于理解,缺少一些推荐工具的支持,对于第一次的推荐也没有合适的结果[16]。
  2.4 推荐算法的常用评价指标
  2.4.1 准确性指标
  准确性指标是推荐系统中最重要的指标。最常使用的准确性指标包括准确率和召回率。
  2.4.2 非准确性指标
  推荐系统中,除了推荐准确性外,还有其他一些重要的指标。包括推荐的多样性、新颖性、惊喜度和覆盖率等等。本文将这些指标统称为非准确性指标。其中非准确性指标又可以分为用户级非准确性指标和系统级非准确性指标。这里不再做简单的介绍。
  但是,推荐系统的评价指标根据推荐算法的不同也有所不同,主要还是以下几种。
  推荐准确度:非常可观的离线计算,是各种推荐领域最重要的参考指标。推荐系统有两个重要目标:“预测”和“推荐”,主要是:预测评分,学习用户的评价模型,他们实际上可以看作是一个回归模型,一般使用均方根误差或误差来衡量[19];
  TopN推荐:依据推荐算法所进行的选取前N个最优推荐, N是一个可变量,根据需要来变换数值。  2.5 本章小结
  本章主要介绍了以往比较流行的一些传统推荐算法,并分析总结了它们的优缺点,简单介绍了新的推荐算法的原理和一些常用的评价指标,为课题的研究准备了一些基础知识,基本上了解了推荐算法的大致工作流程,下章将进行基于神经网络的推荐算法设计。
  第三章 基于深度神经网络的电影推荐算法的设计
  碍于个人水平有限,本文只做了简单的基于文本卷积神经网络的推荐算法设计,使用Tensor Flow框架训练网络,采用Movie Lens数据集作为训练集,将训练结果做相似计算后进行排序最终得出推荐结果。
  3.1 设计环境与技术支持
  3.1.1 设计平台及所用语言
  Windows 7/10平台
  Tensorflow框架,1.6版本
  Python语言,3.5版本
  3.1.2 深度学习
  深度学习是属于机器学习下的一个分支,是当前相对比较热门的领域。深度学习旨在建立深层神经网络模拟人脑机制识别语音、图像、文本,是实现人工智能的一个重要研究方向。传统机器学习工作的有效性, 很大程度上依赖于人工设计的数据表示和输入特征的有效性; 机器学习方法在这个过程中的作用仅仅是优化学习权重以便最终输出最优的学习结果。 深度学习不同于传统的机器学习在于试图自动完成特征提取和数据表示,并且通过学习过程提取出不同水平、不同维度的有效表示, 以便提高不同抽象层次上对数据的解释能力[20]。
  3.1.3 卷积神经网络CNN
  对于CNN最早可以追溯到1986年BP算法的提出,然后1989年LeCun将其用到多层神经网络中,直到1998年LeCun提出LeNet-5模型,神经网络的雏形完成。在接下来近十年的时间里,卷积神经网络的相关研究趋于停滞,原因有两个:一是研究人员意识到多层神经网络在进行BP训练时的计算量极其之大,当时的硬件计算能力完全不可能实现;二是包括SVM在内的浅层机器学习算法也渐渐开始暂露头脚。2006年,Hinton终于一鸣惊人,在《科学》上发表文章,CNN再度觉醒,并取得长足发展。2012年,ImageNet大赛上CNN夺冠,2014年,谷歌研发出20层的VGG模型。同年,DeepFace、DeepID模型横空出世,直接将LFW数据库上的人脸识别、人脸认证的正确率刷到99.75%,几乎超越人类。2015年深度学习领域的三巨头LeCun、Bengio 、Hinton联手在Nature上发表综述对DeepLearning进行科普。2016年3月阿尔法狗打败李世石。
  CNN层:卷积神经网路中每层卷积层由若干卷积单元组成,每个卷积单元的参数都是通过反向传播算法优化得到的。卷积运算的目的是提取输入的不同特征,第一层卷积层可能只能提取一些低级的特征如边缘、线条和角等层级,更多层的网络能从低级特征中迭代提取更复杂的特征。
  激活函数:简单来说就是使得模型具有非线性分类的功能,一般要求激活函数具有可微性、函数值范围、单调性,常见的函数有tanh 函数、sigmod函数、RELU函数。
  损失函数:是整个模型的关键函数,用来估计损失从而调节参数的函数,一般选取平方差函数或者交叉熵函数,其中交叉熵函数更加优越。
  Max pooling层:最大池化层用来减少数据和参数,防止过拟合。
  全连接层:所有得到的局部特征都加权求和,计算得出每一类最后的得分。
  卷积神经网络有两个比较重要的特点:局部感知和权值共享。
  图3.1 卷积神经网络过程
  3.2 数据集及预处理
  3.2.1 Movie Lens1M数据集
  本文使用Movie Lens1M数据集作为训练数据。该数据集包含2000年起,6040个用户对大概3900部电影的1000209条评分数据。该数据集项目1992年开始就被使用在研究协同过滤和改进的协同过滤上。数据集共分为三个表:评分、用户信息和电影信息。下载地址为:http://grouplens.org/datasets/movielens/1m/。
  其中用户数据有:用户ID、性别、年龄、职业ID、邮编字段等。
  数据格式为:UserID::Gender::Age::Occupation::Zip-code
  评分数据有:用户ID、电影ID、评分和时间戳等字段。
  数据中的格式为:UserID::MovieID::Rating::Timestamp
  图3.3 ratings.dat数据预览
  电影数据有:电影ID、电影名称、电影风格等字段
  数据中的格式为:MovieID::Title::Genres
  图3.4 movies.dat数据预览
  3.2.2 数据预处理
  但是三个表中都有一些冗余数据,是我们不需要的,需要对其进行删减和变更。用户ID、电影ID、评分字段无需改变,用户数据性别中‘M’和‘F’转换成1和0,年龄字段将其变成0~6的7个数字,Genres字段是分类字段,故要将其改为数字,将类别转换成字符串到数字的字典,再将每个电影的Genres字段转为数字列表,Title字段和Genres字段处理类似,将年份去掉,另外字段处理长度要一致,空白部分用‘’填充。
  图3.5 预处理后的数据
  3.3 模型设计
  基于本人小电脑跑不动大数据,便使用预处理后的数字当作嵌入矩阵的索引,网络分为三层,第一层为嵌入层,维度设计(N,32)、(N,16)。紧接着从嵌入层所引出特征后接入全连接层,输出后再一次接入全连接层,最后得到[1,200]的users特征和movies特征两个向量集合,而后我们的推荐便是使用这两个特征,进行评分的拟合,拟合方法有两种:一是两个特征向量相乘,二是采用MSE优化,再次将特征传入全连接层,将输出值回归到真实评分[12]。
  图3.6 模型设计图
  网络的第一层是词嵌入层,由每一个单词的嵌入向量组成的嵌入矩阵。下一层使用多个不同尺寸(窗口大小)的卷积核在嵌入矩阵上做卷积,窗口大小指的是每次卷积覆盖几个单词,尺寸是(单词数,向量维度)。第三层网络是max pooling得到一个长向量,最后使用dropout做正则化,最终得到了电影Title的特征。
  3.4 神经网络设计
  3.4.1 构建神经网络
  构建神经网络包括以下几步:参数的设置,矩阵维度(包括用户和电影两部分)的设置等。
  #构建神经网络,定义user的嵌入矩阵:
  def get_user_embedding()
  #将user的嵌入矩阵一起全连接生成user的特征:
  def get_user_feature_layer()
  #定义movie的嵌入矩阵:
  def get_movie_id_embed_layer()
  #movie title的文本卷积网络实现:
  def get_movie_cnn_layer()
  3.4.2 训练神经网络
  训练网络时将Movie Lens1M数据集分为训练集和测试集,使用5次迭代,并且保存训练损失和测试损失。
  图3.7 训练误差
  图3.8 测试误差
  图3.9 在tensorboard中查看可视化结果
  3.5 本章小结
  本章主要进行了数据的处理和模型及神经网络的设计,并未进行详细的推荐任务的设计实现,根据训练结果,由Training Loss的结果来看,训练集在模型中的预测结果与真实结果的误差不算太大,还是可以接受的。训练网络之后会得到几个训练结果:电影特征和用户特征,会根据它们来预测用户的评分,实现推荐任务时也会根据这两个结果得出特征矩阵进而得出推荐列表。
  第四章 推荐算法的实现与优化
  本章承接第三章基于神经网络电影推荐算法的设计,主要根据训练结果进行推荐的设计,实现并验证第三章所设计的算法是否可行。
  4.1 生成特征矩阵
  首先在推荐设计之前,要对指定用户和电影做一个评分预测,上文说道共有两种计算评分的方法,一种是将用户特征和电影特征作为输入,传出全连接层,再输出一个值,此种方法得出的预测评分更为精确一点,另一种方法是简单的将用户特征和电影特征做一个矩阵乘法,直接得到一个预测值[20]。
  同样是对rating(234,1401)进行预测评分,两种预测方式的评分结果是不同的。
  图4.1 矩阵相乘的预测评
  图4.2 再次全连接的预测评分
  将训练好的电影特征,具体的文件是save.meta,将其组合成为电影特征矩阵保存到本地,组合后的文件为movie_matrics.p;同理将训练好的用户特征,与电影特征来自同一文件,将其组合成为用户特征矩阵保存到本地,组合后的文件为users_matrics.p。
  4.2 推荐过程的设计
  4.2.1 推荐同类型的电影
  由训练得到的用户特征矩阵和电影特征矩阵做推荐,原理是计算所看的电影向量与整个电影特征矩阵的余弦相似度,选取出相似度较高的前几个电影推荐给用户,为了营造出一种动态推荐的假象,加入了随机选择。
  图4.3 推荐同类型的电影
  4.2.2 推荐您喜欢的电影
  推荐您喜欢的电影则是根据用户的特征向量与电影特征矩阵做计算,然后得到对所有电影的评分,取评分最高的前n部电影作为推荐结果,同样加入随机的选择。
  图4.4 用户234喜欢的电影
  4.2.3 推荐看过此电影的人还看的电影
  对于看过此电影的还看了哪些电影,其思路是首先在用户特征中找到喜欢此电影的前n个人,得到他们的特征向量,之后计算这几个人对所有电影的评分,选出他们评价最高的那部电影推荐给用户,同样加入随机的情况。
  图4.5 喜欢看同一部电影的
  图4.6 喜欢看这部电影的人还喜欢看的电影
  4.3 结果分析
  4.3.1 MSE和准确率
  由于本次实验问题本质是一个回归问题,于是便以MSE做评价标准。根据实验结果的显示,采用两种方式拟合评分,第一种是直接将用户特征和电影特征做向量乘法,将结果与真实评分做回归,采用MSE优化损失 ,另一种方式是将两种特征再次传入全连接层,输出一个值。前者的MSE Loss在1附近,使用了5次迭代,第二种的MSE Loss在0.8附近,看样子这两种方式差别也不是很大,但是如果是更大的数据集,差距就会很明显了[21]。
  4.3.2 推荐精确度
  根据实验结果来看,推荐结果还是比较准确的,比如推荐同类型的电影,对于电影The Story(1995),其电影类型是动画、喜剧、儿童,推荐结果里也都是这些类型,并无其他的类型,也就是说误差很小。但是对于根据评分来进行推荐的形式似乎存在一些问题,可能是因为采取了随机选择的缘故,每次推荐的结果几乎相差很大,但不排除评分系统出现了问题,两种预测评分的方式,直接相乘显得更为稳重一点,评价结果中规中矩,而传入全连接层再次输出一个值则显得有些不稳定,虽然评分更接近于真实评分[22]。
  4.3.3 存在的问题及优化方案
  基于深度神经网络的推荐算法虽然是成功设计并实现了,但它存在的问题却是不小的。
  1) 神经网络的选择,使用文本卷积网络CNN,虽然简单,但是它却不能动态的训练,如果有新的训练集加入进来,则它就需要重新从头到尾的再训练一遍,对于此种情况,是费时又费力的,据此应该更换神经网络,使用循环神经网络RNN,根据时间度来进行数据集的训练[23]。
  2) 评分预测问题,依据训练的结果,在使用用户特征向量和电影特征矩阵做余弦相似度的计算时,出现了评分具有负数,及评分过低或过高的情况,此种情况需要调整预测评分的范围,使之符合评分的标准。
  3) 未结合更高级的推荐方法,只是简单的根据余弦相似度来进行推荐有点草率,而且所使用的特征有点少,应该挖掘出更多的特征向量,比如评论关键词,年代,数据集也需要更新。
  4) 本文未做系统界面设计,仅用于研究,如果让用户使用,则交互性不好,用户体验极差。由于时间关系,本次课题就不再做界面了,学有余力时会再做进一步的优化与设计[24]。
  5) 技术不够新颖,目前的电影推荐技术水平已经发展到一个新高度了,它们往往是多重网络叠加使用,根据不同神经网络的特性运用到不同的方面里,例如基于电影海报和关键帧技术的推荐,使用的神经网络就不单单是卷积神经网络,而且后续还有排序算法的优化,这样相比下来,我所做的神经网络推荐就很差强人意了。
  4.4 本章小结
  本章主要进行了具体推荐任务的实现,根据训练结果生成电影特征矩阵和用户特征矩阵,并根据这两个特征矩阵做评分预测,将网络做正向传播得到预测评分,将网络模型作为回归问题进行训练,使用计算余弦相似度的方法将得到的电影特征和用户特征矩阵进行推荐,根据实验结果来看,效果还不错,但存在的问题也不容忽略。
  第五章 总结与展望
  5.1 本文总结
  由于人工智能时代的到来,大量的数据流传于网络之上,信息大爆炸使信息的获取变得不那么简单和随意,信息的过载尤其是作为使用最为广泛的电影方面,现代时间如此的宝贵,人们不可能去花费大把的时间去寻找所喜欢的电影,即使找到了也没有兴趣去观看了啊,大大的打击了人们的观影热情,这样对于电影产业的发展就会有影响,所以对于电影推荐算法的研究,尤其是高效能的现代电影推荐算法的研究刻不容缓,具有很强的紧迫性和必要性[25]。
  本文主要使用Movie Lens数据集作为训练用的数据,将其分为训练集和测试集,查阅前辈资料,初步设计出了一个基于卷积神经网络的电影推荐算法,将数据集中的用户集合和电影集合传入神经网络之中,经过嵌入层、全连接层等,最后得出用户特征和电影特征。
  在进行具体的推荐任务的设计时,将用户特征和电影特征分别组合成特征矩阵保存到本地,推荐时便使用保存的特征矩阵结合特征向量来计算余弦相似度,对计算出的一个结果进行排序,本文使用简单的排序方法,仅仅是根据余弦相似度的大小来进行排序,所以推荐列表即候选集的选择有些不太精确,但也是有不错的效果的,另外使用到神经网络,存在一个训练时间的问题,使用Windows7版本跟Windows10版本不同的配置,所使用的训练时间是有很大差别的。
  Win10上使用VS2017来运行文件,训练时间小于20分钟。
  对于冷启动问题,本文使用用户特征向量和电影特征矩阵做余弦相似度计算,基本上不存在这个问题,每个用户,只要经过本文所设计的算法进行推荐,则一定会有推荐结果产生。
咨询论文发表及论文撰写
论文空间专注于毕业论文硕士论文论文发表网站地图服务
Copyright © 2002-2019 论文空间 版权所有
联系手机:17343344559 微信:lunwenpass QQ:论文客服 论文客服