赞
踩
随着信息技术的飞速发展和视频播放设备的更新迭代[1],电影大数据的信息量逐渐庞大。电影消费进入了一个个性化定制的时代,用户需求多样化且独特。然而,传统的电影推荐系统在面对用户多样化的兴趣和观影习惯时,往往存在一系列挑战。通常,这些系统基于整体用户群体的行为进行推荐,无法深入理解每位用户的独特喜好。与此同时,全球数据总量不断膨胀,用户在互联网上产生的大量行为数据成为构建更为精准的用户画像的宝贵资源。
因此,本次毕设研究的核心问题在于如何在大数据背景下构建一种基于用户画像的电影推荐系统。通过深度挖掘用户在电影网站平台的行为数据,包括基本信息和使用操作记录等,依此精准捕捉用户兴趣特征,实现更个性化、精准的电影推荐[2]。解决这一问题对于提升用户体验、促进电影产业创新至关重要。
具体而言,本系统以Django和VUE.js作为前后端基础框架[3],采用MTV模式,借助MongoDB、MySQL和Redis等多数据库进行数据存储与处理。基于从电影网站平台爬取的电影数据,系统通过Hadoop和Spark等大数据组件进行分析[4],开发用户标签并实现个性化推荐。管理系统采用Django自带的管理系统,并使用simpleui、Bootstrap等框架进行美化,以提供用户友好的操作界面。
通过这一研究,本文希望为传统电影推荐系统的改进提供一种可行的解决方案,以更好地满足用户个性化需求。在实践检验该系统的实用性和有效性,力求为电影产业提供一些可行的、具体的改善方向。
2.国内外有关本选题研究的动态
2.1 国外本选题发展的动态
推荐算法的历史可以追溯到1992年,施乐公司的帕拉奥图研究中心提出一种基于协同过滤算法的推荐系统[5],并将其用于垃圾邮件过滤。协同过滤分为两种,一种是基于用户,一种是基于商品。Amazon的工作采用的是ItemCF,即基于商品,因为用户的行为数据往往过于稀疏。协同过滤简单可解释,但不具备泛化能力。
Netflix在2006年提出了矩阵分解技术[6],其很好解决了泛化能力问题。通过矩阵分解,用户和商品都得到了与其对应的隐向量,泛化能力很强。不过矩阵分解(奇异值分解)计算量很大,并且不适合处理大规模稀疏矩阵。
日本的大阪大学在2010年提出了FM模型[7],可以很好得捕捉二阶特征。而且经过一定数学技巧,复杂度降低到nk(n是特征维度,k是隐向量维度)。2012年以后,FM逐渐成为推荐领域的主流算法。这一现象一直到GBDT应用在推荐领域才结束。
2014年facebook提出基于GBDT+LR的解决方案[8],产生了很大的影响力。可以说,自此往后,推荐算法进入了特征工程模型化的阶段。即特征的筛选、构造由模型完成,整个推荐系统成为一个端到端的全链路系统。此外GBDT可以很好得进行特征的高阶交叉,这是FM所做不到的,其只能做二阶交叉,三阶的计算量已经可怕的惊人。
截止到2014年,推荐系统领域仍然是机器学习占据主流。然而,在2012年,CV领域出现了AlexNet[9]这样现象级的深度学习网络,这股浪潮不可避免的影响到了推荐系统。在2015年,深度学习在推荐系统正式拉开了帷幕。2015年澳大利亚国立大学提出了AutoRec[10],它是推荐领域第一个神经网络推荐模型,由三层网络组成。一个输入层,一个中间隐层,一个输出层。其是一个标准的自编码器,我认为与矩阵分解得到隐向量的思想有异曲同工之妙,并在技术手段实现上与word2vec更为相似。
2.2 国内本选题发展的动态
2014年,阮毓钦等三个研究员基于FM提出的FFM[11]在多项CTR预估大赛(kaggle的avazu和criteo)中夺冠,美团也把该算法应用在他们的推荐系统和CTR预估领域中,相比FM模型,FFM模型引入了特征域感知(field-aware)这一概念,使模型的表达能力更强。
2017年华为发表的论文《DeepFM: A Factorization-Machine based Neural Network for CTR Prediction》[12],标志着在点击率(CTR)预测领域的一次创新性突破。该论文介绍了一种名为DeepFM的模型,其独特之处在于成功地将因子分解机(Factorization Machine,FM)与神经网络结合,以更好地捕捉特征之间的复杂关系。DeepFM的成功应用为推荐系统领域的研究和应用开辟了新的方向。其混合模型的设计思想以及端到端的学习方式为CTR预测任务提供了新的范本,激发了对更复杂模型的探索和应用。这一模型的问世不仅对学术界具有重要意义,也为工业界提供了一种创新的解决方案,为提升推荐系统的性能和效率提供了有力支持。综上所述,DeepFM模型在CTR预测领域的成功应用,标志着推荐系统研究的一次重要进步,对相关领域的发展具有积极而深远的影响。
2017年浙江大学发表的论文《2017-AFM-Attentional Factorization Machines Learning the Weight of Feature Interactions via Attention Networks》[13]在这篇论文中,研究人员提出了一种新颖的模型AFM,其主要特点是引入了注意力网络。AFM的提出为推荐系统领域引入了更灵活、自适应的特征交互权重学习机制,拓展了因子分解机的应用范围。这一创新在学术界和工业界都引起了广泛的关注,为推荐系统的进一步研究提供了新的思路和方法。
2018年阿里巴巴发表的论文《2018-DIN-Deep Interest Network for Click-Through Rate Prediction》[14],介绍了一种名为Deep Interest Network(DIN)的模型,专注于提高点击率预测的准确性。DIN的提出在推荐系统领域引起了广泛关注。其在建模用户兴趣方面的创新思路,特别是引入注意力机制的方式,为提高CTR预测模型的性能提供了新的方向。这一模型不仅在学术界产生了积极的反响,也在工业界得到了广泛应用,为推荐系统的发展贡献了有力的实证和经验。
2019年阿里巴巴发表的论文《2018-DIEN-Deep Interest Evolution Network for Click-Through Rate Prediction》[15],介绍了一种名为Deep Interest Evolution Network(DIEN)的模型,专注于提高点击率预测的准确性。DIEN的提出丰富了推荐系统模型对用户兴趣动态演变的建模方式。通过引入兴趣进化网络,该模型更好地满足了推荐系统对于捕捉用户在不同时间点兴趣特征的需求,为推荐系统的发展提供了新的思路和方法。DIEN的成功应用不仅在学术界引起了关注,同时也为工业界提供了一种创新的解决方案,为提高推荐系统性能和用户体验做出了实质性的贡献。
根据本文的研究内容和目的,本文拟解决的主要问题包括两方面的问题如下:
推荐系统经过多年的发展已经在国内有相对较完善的开发设计思路和步骤,基于本次系统设计和实现,需要解决的问题可以分为五层:数据层、算法层、业务层、表现层、用户层。
3.2 论文编写方面问题
编写论文作为毕业设计中最为重要的环节之一,基于其撰写的重要性有以下几点问题:
研究方法的选择取决于研究问题的性质、研究目的以及可用的资源。基于用户画像的电影推荐系统设计,有以下几种常见的研究方法:
通过系统的文献综述,了解和分析对电影推荐系统领域以往的研究,包括不同算法、模型和系统设计方法。依此确定研究的现有状况、研究的空白以及潜在的改进空间。
进行实证研究以验证研究假设和评估系统的性能。这可能包括设计实验、收集用户数据、实施推荐算法,最后通过实验证据来评估系统的有效性和用户满意度。
选择一个或多个现实世界的案例,深入研究用户画像电影推荐系统在这些案例中的应用。进而深刻理解系统在实际场景中的应用和效果。
为了向个性化推荐提供基础,并指导用户画像的构建;进而利用大数据分析技术,对用户行为数据进行深入挖掘,以发现用户兴趣模式、行为趋势等信息是必不可少的。
通过系统设计和开发,实际构建一个基于用户画像的电影推荐系统;其涉及到选择合适的技术栈、较为契合的算法以及用户界面设计等方面的开发技术,以实现研究的理论构想。
通过定量调查和问卷调查收集用户反馈,了解用户对推荐系统的满意度、使用体验和期望。这有助于评估系统的实际效果,并发现可能的改进点。
进行用户交互测试,通过观察用户在推荐系统上的实际操作行为,获取更深入的用户反馈。这有助于调整系统的交互设计,提升用户体验。
与其他已有的电影推荐系统进行比较分析,评估系统在准确性、个性化程度、实时性等方面的相对性能。比较分析有助于确定系统的优势和改进点。选择研究方法时,需要考虑研究的具体目标、可用的资源和时间限制。通常,综合运用多种方法可以更全面地理解研究问题,并为系统设计提供更有力的支持。
该电影推荐系统的设计以用户画像为切入点,通过借助Django框架、VUE框架、爬虫技术、MySQL,MongoDB,Redis数据库、Hadoop和Saprk等相关技术和软件,结合用户模块,电影模块,推荐模块这三种主要模块,包含用户登录注册、修改信息、修改邮箱,电影收藏、电影搜索、电影评论、基于电影类型推荐、基于用户喜欢推荐、基于用户画像推荐等等功能,
核心算法代码分享如下:
- #! /bin/bash
-
- # 该脚本为centos7安装hadoop2.7的一键安装脚本(单机版)
- # jdk、hadoop、scala、spark等安装包在放数据库的放盘中有提供
- # 使用时请注意修改15、16行的获取本机IP地址,以及修改24、25行的安装包文件存放的地址
- # 脚本运行过程中有几个步骤需要自己手动输入yes,完成免密登陆(会有提示)
- # 待安装完成会自动重启,重启后请直接运行命令“start-all.sh”启动hadoop,“start-spark-all.sh”启动spark
-
- #7.0之后的版本
- systemctl stop firewalld
- systemctl disable firewalld
-
- #7.0之前的版本
- service iptables stop
- chkconfig iptables off
-
- #获取本机IP地址
- echo "127.0.0.1 master" >> /etc/hosts
-
- #配置主机名
- echo "HOSTNAME=master" >> /etc/sysconfig/network
-
- mkdir /root/hadoop
-
- tar -xzvf ./jdk-8u65-linux-x64.tar.gz -C /root/hadoop/
- tar -xzvf ./hadoop-2.7.1_64bit.tar.gz -C /root/hadoop/
-
- mv /root/hadoop/hadoop-2.7.1 /root/hadoop/hadoop
- mv /root/hadoop/jdk1.8.0_65 /root/hadoop/jdk
-
- (ssh-keygen -t rsa;cp ~/.ssh/id_rsa.pub ~/.ssh/authorized_keys;chmod 644 authorized_keys;sudo service sshd restart)
-
- echo "" >> /etc/profile
- echo "export JAVA_HOME=/root/hadoop/jdk" >> /etc/profile
- echo "export PATH=\$PATH:\$JAVA_HOME/bin" >> /etc/profile
- echo "export HADOOP_HOME=/root/hadoop/hadoop" >> /etc/profile
- echo "export HADOOP_MAPRED_HOME=\$HADOOP_HOME" >> /etc/profile
- echo "export HADOOP_COMMON_HOME=\$HADOOP_HOME" >> /etc/profile
- echo "export HADOOP_HDFS_HOME=\$HADOOP_HOME" >> /etc/profile
- echo "export YARN_HOME=\$HADOOP_HOME" >> /etc/profile
- echo "export HADOOP_COMMON_LIB_NATIVE_DIR=\$HADOOP_HOME/lib/native" >> /etc/profile
- echo "export PATH=\$PATH:\$HADOOP_HOME/sbin:\$HADOOP_HOME/bin" >> /etc/profile
- echo "export HADOOP_INSTALL=\$HADOOP_HOME" >> /etc/profile
- echo "export HADOOP_OPTS=\"-Djava.library.path=\$HADOOP_HOME/lib:\$HADOOP_COMMON_LIB_NATIVE_DIR\"" >> /etc/profile
- echo "" >> /etc/profile
- source /etc/profile
-
- sed -i "s/\${JAVA_HOME}/\/root\/hadoop\/jdk/g" /root/hadoop/hadoop/etc/hadoop/hadoop-env.sh
-
- sed -i "s/<\/configuration>/ /g" /root/hadoop/hadoop/etc/hadoop/core-site.xml
-
- echo -e "<property><name>hadoop.tmp.dir</name><value>/root/hadoop/hadoop/tmp</value></property>\n<property><name>fs.defaultFS</name><value>hdfs://master:9000</value></property>\n</configuration>" >> /root/hadoop/hadoop/etc/hadoop/core-site.xml
-
- sed -i "s/<\/configuration>/ /g" /root/hadoop/hadoop/etc/hadoop/hdfs-site.xml
-
- echo -e "<property><name>dfs.replication</name><value>1</value></property>\n</configuration>" >> /root/hadoop/hadoop/etc/hadoop/hdfs-site.xml
-
- cp /root/hadoop/hadoop/etc/hadoop/mapred-site.xml.template /root/hadoop/hadoop/etc/hadoop/mapred-site.xml
- sed -i "s/<\/configuration>/ /g" /root/hadoop/hadoop/etc/hadoop/mapred-site.xml
-
- echo -e "<property><name>mapreduce.framework.name</name><value>yarn</value></property>\n</configuration>" >> /root/hadoop/hadoop/etc/hadoop/mapred-site.xml
-
-
- sed -i "s/<\/configuration>/ /g" /root/hadoop/hadoop/etc/hadoop/yarn-site.xml
-
- echo -e "<property><name>yarn.resourcemanager.hostname</name><value>Master</value></property>\n<property><name>yarn.nodemanager.aux-services</name><value>mapreduce_shuffle</value></property>\n</configuration>" >> /root/hadoop/hadoop/etc/hadoop/yarn-site.xml
-
- echo "master" > /root/hadoop/hadoop/etc/hadoop/slaves
-
- sh /root/hadoop/hadoop/bin/hdfs namenode -format
-
-
-
-
- tar -xzvf ./spark-2.4.1-bin-hadoop2.7.tgz -C /root/hadoop/
- tar -xzvf ./scala-2.10.4.tgz -C /root/hadoop/
-
- mv /root/hadoop/scala-2.10.4 /root/hadoop/scala
- mv /root/hadoop/spark-2.4.1-bin-hadoop2.7 /root/hadoop/spark
-
- echo "" >> /etc/profile
- echo "export SCALA_HOME=/root/hadoop/scala" >> /etc/profile
- echo "export SPARK_HOME=/root/hadoop/spark" >> /etc/profile
- echo "export PATH=\$PATH:\$SCALA_HOME/bin:\$SPARK_HOME/bin:\$SPARK_HOME/sbin" >> /etc/profile
- echo "" >> /etc/profile
- source /etc/profile
-
- cp /root/hadoop/spark/conf/spark-env.sh.template /root/hadoop/spark/conf/spark-env.sh
- echo "export JAVA_HOME=/root/hadoop/jdk" >> /root/hadoop/spark/conf/spark-env.sh
- echo "export SCALA_HOME=/root/hadoop/scala" >> /root/hadoop/spark/conf/spark-env.sh
- echo "export SPARK_MASTER_IP=master" >> /root/hadoop/spark/conf/spark-env.sh
- echo "export MASTER=spark://master:7077" >> /root/hadoop/spark/conf/spark-env.sh
- echo "export SPARK_WORKER_MEMORY=1024M" >> /root/hadoop/spark/conf/spark-env.sh
- echo "export HADOOP_INSTALL=/root/hadoop/hadoop" >> /root/hadoop/spark/conf/spark-env.sh
- echo "export HADOOP_CONF_DIR=\$HADOOP_INSTALL/etc/hadoop" >> /root/hadoop/spark/conf/spark-env.sh
- echo "export LD_LIBRARY_PATH=/root/hadoop/hadoop/lib/native" >> /root/hadoop/spark/conf/spark-env.sh
-
- cp /root/hadoop/spark/conf/slaves.template /root/hadoop/spark/conf/slaves
- #echo "" >> /root/hadoop/spark/conf/slaves
- #echo "Master" >> /root/hadoop/spark/conf/slaves
-
- mv /root/hadoop/spark/sbin/start-all.sh /root/hadoop/spark/sbin/start-spark-all.sh
- mv /root/hadoop/spark/sbin/stop-all.sh /root/hadoop/spark/sbin/stop-spark-all.sh
-
- #ssh localhost
-
- reboot
-
- #sh start-all.sh
-
- #hadoop fs -ls -R /
-
- #sh stop-all.sh
-
- #zkServer.sh start
-
- #start-hbase.sh
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。