你好,我是王喆。
上节课,我们明确了推荐系统要解决的基本问题,清楚了深度学习推荐系统的技术架构,这节课我们开始走进实战。
作为程序员,我相信你肯定听过,甚至可能还很认同Linux之父Linus Torvalds的那句话“Talk is cheap.Show me the code.”。我也一样,所以只讲解理论知识不是这门课的风格,我希望你通过这门课的学习,不仅能构建出一棵深度学习推荐系统的知识树,还能动手实现出一个看得见、摸得着、能操作、能修改的推荐系统。
所以今天,你跟着我的讲解,只需要花三十分钟的时间,就能将一套完整的深度学习推荐系统,Sparrow RecSys(随着课程的进行,我们会逐渐补充新的模块),在你自己的电脑上运行起来。这也是我们这门课最终要实现的深度学习推荐系统。
废话不多说,直接运行
废话不多说,我们先把Sparrow RecSys安装运行起来。因为我已经把项目相关的所有代码(代码还会随着课程进行持续更新)、数据都整理到GitHub的开源项目中,所以你不需要额外安装任何的支持软件,也不需要额外下载任何数据。
这样,整个安装过程就跟“把大象装进冰箱“一样,只需要三步,就是打开冰箱门,把大象装进去,关上冰箱门。“翻译”成咱们的过程就是,从GitHub中clone代码,在本地以maven project的形式安装,运行RecSysServer主函数启动推荐服务器。接下来,我们详细地解释一下这三个步骤。
首先,从GitHub中clone代码。这里,我直接给出了Sparrow Recsys开源项目的地址:https://github.com/wzhe06/SparrowRecSys。点击之后,你需要使用git clone https://github.com/wzhe06/SparrowRecSys.git命令,或者从Web端下载的方式,把代码下载到本地。
然后,你可以在本地以maven project的形式安装,也就是导入项目到IDE。我推荐你使用IntelliJ IDEA为本项目的IDE。这样,我们直接使用IDEA,打开本地的Sparrow Recsys项目根目录就能导入项目。不过有一点需要注意,如果项目没有自动识别为maven project,你还需要右键点击pom.xml文件,选择将该项目设置为maven project才能进行后面的操作。
最后,运行RecSysServer。等到所有库文件自动下载完毕,项目编译完毕后,我们找到项目的主函数com.wzhe.sparrowrecsys.online.RecSysServer,右键点击运行。因为推荐服务器默认运行在6010端口,所以我们打开浏览器,输入http://localhost:6010/,就能看到整个推荐系统的前端效果了。

如果通过上面的步骤,你的浏览器显示出了由多个电影列表组成的Sparrow Recsys的主页,那么恭喜你,你已经拥有了这套深度学习推荐系统。
而且我相信,你把Sparrow Recsys这只“大象”装到自己冰箱里的时间,不会超过30分钟。但第一次见面的热情过后,你会不但想知其然,还想知其所以然,那接下来我就和你说说Sparrow Recsys的来历,以及功能和架构。而且在接下来的课程中,我会以它为例来给你讲透深度学习推荐系统。
“麻雀虽小,五脏俱全”的Sparrow Recsys
Sparrow RecSys,全称Sparrow Recommender System,中文名“麻雀推荐系统”,名字取自“麻雀虽小,五脏俱全”之意。
你第一眼见到它,可能认为它像个Demo或者玩具。虽然它不可能真正具备一个工业级深度学习推荐系统的全部功能,但我希望它是一颗能够成长为参天大树的种子,一只未来有可能大鹏展翅的雏鸟。在投入一定的精力改造、拓展之后,它甚至有可能支撑起一个规模互联网公司的推荐系统框架。这就是我设计Sparrow RecSys的初衷。我也希望你能够在实现Sparrow RecSys的过程中,快速领略深度学习推荐系统的主要模块和主流技术,并且找到乐趣、找到成就感。
那么Sparrow Recsys到底实现了哪些功能呢?它又包含了哪些深度学习推荐系统的关键技术呢?下面,我会为你一一讲解。
Sparrow Recsys的功能有哪些
Sparrow RecSys是一个电影推荐系统,视频推荐是我最熟悉的领域,这也是我以电影推荐作为切入点的原因。像所有经典的推荐系统一样,它具备“相似推荐”“猜你喜欢”等经典的推荐功能,在页面设置上,主要由“首页”“电影详情页”和“为你推荐页”组成。
首先,是Sparrow RecSys的首页。

Sparrow RecSys 的首页由不同类型的电影列表组成,当用户首次访问首页时,系统默认以历史用户的平均打分从高到低排序,随着当前用户不断为电影打分,系统会对首页的推荐结果进行个性化的调整,比如电影类型的排名会进行个性化调整,每个类型内部的影片也会进行个性化推荐。
其次,是电影详情页。

你可以看到电影详情页除了罗列出电影的一些基本信息,最关键的部分是相似影片的推荐。相似内容推荐是几乎所有推荐系统非常重要的功能,传统的推荐系统基本依赖于基于内容(Content based)的推荐方法,而我们这门课程会更多地讲解基于深度学习Embedding的相似内容推荐方法。
最后,是为你推荐页。

这一部分也是整个推荐系统中最重要的部分,是用户的个性化推荐页面。这个页面会根据用户的点击、评价历史进行个性化推荐。这几乎是所有推荐系统最经典和最主要的应用场景。我希望在这门课程中,你能够动手完成个性化推荐中的每个关键步骤,包括但不限于特征的处理、候选集的召回、排序层主要模型等等。
Sparrow Recsys的数据从哪来?
知道了Sparrow RecSys的功能之后,你肯定想问,“老师,咱们的数据从哪来呀?”。既然Sparrow RecSys是一个开源项目,那么Sparrow RecSys的数据源肯定也是开源和免费的,它的数据源来自于著名的电影开源数据集MovieLens。
为了方便你调试,咱们这门课程的教学数据集对MovieLens数据集进行了精简,只留下了1000部电影。如果希望在全量数据集上进行推荐,你可以去MovieLens的官方网站下载全量数据,它一共包含了27000部电影。
MovieLens的数据集包括三部分,分别是 movies.csv(电影基本信息数据)、ratings.csv(用户评分数据)和 links.csv(外部链接数据)。下面,我就具体说说它们分别长什么样。
1. movies.csv(电影基本信息数据)
movies表是电影的基本信息表,它包含了电影ID(movieId)、电影名(title)、发布年份以及电影类型(genres)等基本信息。

MovieLens 20M Dataset包含了2016年前的约13万部电影,我们课程的实验数据集从中抽取了前1000部电影。电影数据集是我们推荐的主体,其中分类、发布年份、电影名称等信息也将是推荐模型可以利用的重要特征。
2. ratings.csv(用户评分数据)
ratings表包含了用户ID(userId)、电影ID(movieId)、评分(rating)和时间戳(timestamp)等信息。

MovieLens 20M Dataset包含了2000万条评分数据,我们课程的实验数据集从中抽取了约104万条评论数据。评论数据集是之后推荐模型训练所需的训练样本来源,也是我们分析用户行为序列、电影统计型特征的原始数据。
3. links.csv(外部链接数据)
links表包含了电影ID(movieId)、IMDB对应电影ID(imdbId)、TMDB对应电影ID(tmdbId)等信息。其中,imdb和tmdb是全球最大的两个电影数据库。因为links表包含了MovieLens电影和这两个数据库ID之间的对应关系,所以,我们可以根据这个对应关系来抓取电影的其他相关信息,这也为我们大量拓展推荐系统特征提供了可能。

此外,MovieLens的数据集中还包含了tags.csv,它用于记录用户为电影打的标签,由于课程中暂时没有使用标签数据,我就展开说了。
Sparrow Recsys涵盖的技术点
清楚了Sparrow Recsys的功能和数据,你肯定迫不及待地想知道Sparrow Recsys会使用哪些技术,可以实现哪些模型。
那我们直接来看下面这张Sparrow Recsys的技术架构图。你会发现,它其实就是我们用具体的技术选型,把上节课的深度学习推荐系统架构图给填上得到的。所以,Sparrow Recsys就是深度学习推荐系统架构的一个实现。

你可以看到,它一共分为三个模块,分别是数据、模型和前端。其中每个部分都用业界推荐系统的主流技术,比如数据部分我们会用Spark,Flink进行样本和特征的处理,模型部分我们会使用TensorFlow训练深度神经网络、Wide&Deep、PNN等模型。

我想啊,你在看到这么多的技术点和技术平台之后,肯定想问,我们的课程能把它们都讲完、讲透吗?这是个好问题,我也有必要在这里说清楚。从中,我们可以总结出Sparrow Recsys中具体用到的技术点。
其实推荐系统是一个应用属性很强的领域,想把推荐系统学好,我们就必须去学习各式各样相关的平台、技术,所以我们这门课的涉及面非常广。但你也不用因为要学这么多的技术而感到惊慌,因为我们没有必要去深究每个平台内部的原理、优化的方法,我们当好一个使用者就好。
举个例子你就明白了,我们处理数据需要用到Spark,但我们有必要成为Spark的专家吗?其实不用。因为即使你已经走上了工作岗位,也有平台架构部的同事能够提供Spark的很多技术支持。所以学习这门课程,我们大可抱着一个使用者,而不是开发者、维护者的心态去使用不同的技术平台。当然,如果你想成为某个细分方向的专家,比如Spark的专家、Flink的专家等等,我相信极客时间上肯定还有很不错的课程供你学习。
所以希望你能够通过Sparrow Recsys认识到主流深度学习推荐系统都使用了哪些技术,让自己有一个全面的认识,建立自己的知识广度。如果还想深入钻研某个方向,也可以由此开始,努力成为一个领域的专家。
小结
这堂课,我带你熟悉了我们将要实现的推荐系统Sparrow Recsys,它将是我们深度学习推荐系统这门课的落地项目和实现范例。希望有这个真实可用的推荐系统作为支撑,这门课可以同时兼顾概念讲解和代码实战,也让我们接下来的共同合作能够更好。
从开篇词到这一节课,我们从推荐系统要解决的核心问题,生发出深度学习推荐系统的技术架构,再到让技术架构实实在在地落地到Sparrow Recsys这个开源项目上。我想你已经可以感受到架构篇的学习过程,其实就是一个从抽象到具体,从形而上到形而下的过程。
那在搭建起这整门课程的框架之后,接下来我们将会一起深入到技术细节,以及深度学习的实践中,一起去体验深度学习浪潮之巅的推荐系统知识,期待继续与你同行!
课后思考
- 当你把Sparrow Recsys在自己的电脑上安装运行起来之后,对照着上节课的深度学习推荐系统架构图,你能试着说出每个模块的代码属于架构图中的哪一部分吗?
- 你觉得对于一个电影推荐系统来说,什么数据对生成用户个性化推荐结果最有帮助?
好啦,快按照这节的方法把Sparrow Recsys运行起来吧!课后的两个问题也并不困难,相信你肯定可以回答出来。今天就讲到这里了,我们下节课见!
精选留言
2020-12-22 06:54:05
1.下载IDEA(https://www.jetbrains.com/idea/download/#section=mac)
2.下载JDK(https://www.oracle.com/java/technologies/javase-jdk15-downloads.html)
3.安装IDEA和JDK(JDK的路径~/Library/Java/JavaVirtualMachines/openjdk-15.0.1-1)
4.打开IDEA,打开File->Project Strucure->Project->Project JDK(我的好像会自动识别)。若没有识别(显示jdk15.1),点击三角号,自己添加,步骤Add SDK->JDK->选择上面提到的JDK路径选择。
5.在pom.xml点击右键,设置为maven project->'Reload project'。耐心等待,这个很费时间。
6.然后找到SparrowRecSys/src/main/java/com/SparrowRecSys/online/RecSysServer,右击选择"Run 'RecSysServer.main()'",程序就执行起来了.
7.浏览器中键入http://localhost:6010/
2020-12-21 23:28:38
1. 使用的vscode作为IDE
2. 编译命令为mvn package assembly:single
3. 我的web root uri在源代码里总是为空,稍微改了一下,这里是为了绕过去,也请指导的高手告诉正确方法
RecSysServer.java中49行改成了绝对路径
URI webRootUri = URI.create("file:/D:/Work/RecommendationSystem/Sparrow/SparrowRecSys/target/classes/webroot/");
4. 运行java -jar target\SparrowRecSys-1.0-SNAPSHOT-jar-with-dependencies.jar即刻成功
2020-12-09 19:57:36
2020-09-23 05:28:21
2020-09-23 12:13:00
2021-08-05 14:39:39
1、数据部分
flink流处理平台准实时数据处理:src/main/java/com/sparrowrecsys/nearline/flink
spark大数据离线数据处理:
数据处理:src/main/java/com/sparrowrecsys/offline/spark/embedding
特征工程:src/main/java/com/sparrowrecsys/offline/spark/featureeng
2、模型部分
模型部分,RecPySpark/src/com/sparrowrecsys/offline/pyspark
模型评估,src/main/java/com/sparrowrecsys/offline/spark/evaluate
离线模型训练,src/main/java/com/sparrowrecsys/offline/spark/model
模型计算,src/main/java/com/sparrowrecsys/online/model
模型部分,TFRecModel/src/com/sparrowrecsys/offline/tensorflow
3、在线服务部分
数据管理,包括电影、评分、客户端,src/main/java/com/sparrowrecsys/online/datamanager
为你推荐、相似电影处理,src/main/java/com/sparrowrecsys/online/recprocess
提供http服务,src/main/java/com/sparrowrecsys/online/service
问题2
1、用户最近的观看历史,影片名字、主演、导演、影片类型,观看时长(“时长”受到别人回答的启发)
2、用户高分和低分的打分数据,点赞、踩、评论、分享(“分享”受到其他人回答的启发)
3、同类型用户最近的观影记录
2020-09-22 09:41:53
2020-09-23 23:19:55
2021-06-18 22:35:45
win7下 搭建 推荐系统 的步骤:
1. 第1步骤:下载IDEA。
https://www.jetbrains.com/idea/download/#section=windows
2. 第2步骤:如何下载和配置JDK1.8(一定要JDK1.8)
https://www.cnblogs.com/hejh/p/11276434.html
3.第3步骤:IDEA配置JDK1.8(一定要JDK1.8)
https://blog.csdn.net/liluo_2951121599/article/details/78484776
4. 第4步骤:window下安装scala步骤
https://www.cnblogs.com/onlyxx/p/5168882.html
4.1 第4.1步骤:Scala安装问题找不到主类的(不要安装在有空格的路径)
https://blog.csdn.net/weekdawn/article/details/94625067
4.2 第4.2步骤:Scala2.11要匹配JDK1.8,否则出问题
https://blog.csdn.net/yulutian/article/details/80566728
5. 第5步骤:IDEA配置Scala
https://www.cnblogs.com/starzy/p/10461038.html
6. 第6步骤:win7安装hadoop spark
https://www.jianshu.com/p/9f40fe1b6587
7. 第7步骤:安装Redis
https://www.cnblogs.com/liuqingzheng/p/9831331.html
大功告成,如果安装过程有问题的同学,请留言,我们一起解决!~^^
2020-10-09 18:08:42
1,安装java8和scala2.11
网上有很多参考教程。
安装Java8:https://blog.csdn.net/irokay/article/details/71374426
遇到的/etc/profile是readonly的情况,解决方法是更改该文件的权限,增加写权限:775.https://blog.csdn.net/good007boy/article/details/88659162
安装scale:https://blog.csdn.net/u012373815/article/details/53231292
遇到的问题,在执行scala的时候出现“scala [ERROR] Failed to construct terminal; falling back to unsupported”,应该是跟iterm2起了什么冲突,解决方案:https://blog.csdn.net/merrily01/article/details/102823539
2,安装、打开IDEA
略过
3,执行文件
在pom.xml点击右键,设置为maven project->'Reload project'
配置SDK:在File->Project Structure->Project配置Project SDK
然后找到SparrowRecSys/main/java/online/RecSysServer,右击选择"Run 'RecSysServer.main()'",程序就执行起来了
浏览器输入http://localhost:6010/,就可以看到SparrowRecSys首页
2020-11-25 20:34:12
2020-09-23 14:29:17
2020-12-29 15:27:58
2020-09-24 00:28:41
2020-09-22 17:16:17
1.现在关于实时广告点击率预估,业界主流的深度学习解决方案是怎样的思路?
2.深度强化学习在推荐行业目前的应用主要瓶颈在那些点?
2020-09-25 12:57:37
物品特征,主演,类型,评分
2021-02-23 20:02:23
<dependencyManagement>
<dependencies>
<dependency>
<groupId>com.google.guava</groupId>
<artifactId>guava</artifactId>
<version>21.0</version>
</dependency>
</dependencies>
</dependencyManagement>
猜测原因,maven版本过低,解析pom依赖树时失败
2020-12-15 19:38:35
2020-09-23 11:32:34
2021-04-25 01:11:29