CategoryResourceRepost/极客时间专栏/深度学习推荐系统实战/基础架构篇/02 | Sparrow RecSys:我们要实现什么样的推荐系统?.md
louzefeng d3828a7aee mod
2024-07-11 05:50:32 +00:00

125 lines
13 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<audio id="audio" title="02 | Sparrow RecSys我们要实现什么样的推荐系统" controls="" preload="none"><source id="mp3" src="https://static001.geekbang.org/resource/audio/9a/a7/9a74c445ed975ecdc0a67100c6abaca7.mp3"></audio>
你好,我是王喆。
上节课,我们明确了推荐系统要解决的基本问题,清楚了深度学习推荐系统的技术架构,这节课我们开始走进实战。
作为程序员我相信你肯定听过甚至可能还很认同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](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/`,就能看到整个推荐系统的前端效果了。
<img src="https://static001.geekbang.org/resource/image/29/e0/291a34c2e4cd379434efd2e3aed777e0.jpg" alt="" title="图1 Sparrow Recsys的主页">
如果通过上面的步骤你的浏览器显示出了由多个电影列表组成的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的首页**
<img src="https://static001.geekbang.org/resource/image/29/e0/291a34c2e4cd379434efd2e3aed777e0.jpg" alt="" title="图2 Sparrow RecSys的首页">
Sparrow RecSys 的首页由不同类型的电影列表组成,当用户首次访问首页时,系统默认以历史用户的平均打分从高到低排序,随着当前用户不断为电影打分,系统会对首页的推荐结果进行个性化的调整,比如电影类型的排名会进行个性化调整,每个类型内部的影片也会进行个性化推荐。
**其次,是电影详情页。**
<img src="https://static001.geekbang.org/resource/image/b1/46/b12e82af7b561f2d657da25b04960946.jpg" alt="" title="图3 电影详情页">
你可以看到电影详情页除了罗列出电影的一些基本信息最关键的部分是相似影片的推荐。相似内容推荐是几乎所有推荐系统非常重要的功能传统的推荐系统基本依赖于基于内容Content based的推荐方法而我们这门课程会更多地讲解基于深度学习Embedding的相似内容推荐方法。
**最后,是为你推荐页。**
<img src="https://static001.geekbang.org/resource/image/55/65/55d0f2b3395d30b9ecac47a615686765.jpg" alt="" title="图4 为你推荐页">
这一部分也是整个推荐系统中最重要的部分,是用户的个性化推荐页面。这个页面会根据用户的点击、评价历史进行个性化推荐。这几乎是所有推荐系统最经典和最主要的应用场景。我希望在这门课程中,你能够动手完成个性化推荐中的每个关键步骤,包括但不限于特征的处理、候选集的召回、排序层主要模型等等。
## Sparrow Recsys的数据从哪来
知道了Sparrow RecSys的功能之后你肯定想问“老师咱们的数据从哪来呀”。既然Sparrow RecSys是一个开源项目那么Sparrow RecSys的数据源肯定也是开源和免费的它的数据源来自于著名的电影开源数据集[MovieLens](https://grouplens.org/datasets/movielens/)。
为了方便你调试咱们这门课程的教学数据集对MovieLens数据集进行了精简只留下了1000部电影。如果希望在全量数据集上进行推荐你可以去MovieLens的官方网站下载全量数据它一共包含了27000部电影。
MovieLens的数据集包括三部分分别是 **movies.csv电影基本信息数据、ratings.csv**用户评分数据)**和 links.csv**(外部链接数据)。下面,我就具体说说它们分别长什么样。
### 1. movies.csv电影基本信息数据
movies表是电影的基本信息表它包含了电影IDmovieId、电影名title、发布年份以及电影类型genres等基本信息。
<img src="https://static001.geekbang.org/resource/image/f3/7a/f3579fbb04e430d5322fcd58fb410c7a.jpeg" alt="" title="图5 电影基本信息数据">
MovieLens 20M Dataset包含了2016年前的约13万部电影我们课程的实验数据集从中抽取了前1000部电影。电影数据集是我们推荐的主体其中分类、发布年份、电影名称等信息也将是推荐模型可以利用的重要特征。
### 2. ratings.csv用户评分数据
ratings表包含了用户IDuserId、电影IDmovieId、评分rating和时间戳timestamp等信息。
<img src="https://static001.geekbang.org/resource/image/6c/ec/6c1d79ba6f9ea7017b7b0f60d3798aec.jpeg" alt="" title="图6 用户评分数据">
MovieLens 20M Dataset包含了2000万条评分数据我们课程的实验数据集从中抽取了约104万条评论数据。评论数据集是之后推荐模型训练所需的训练样本来源也是我们分析用户行为序列、电影统计型特征的原始数据。
### 3. links.csv外部链接数据
links表包含了电影IDmovieId、IMDB对应电影IDimdbId、TMDB对应电影IDtmdbId等信息。其中imdb和tmdb是全球最大的两个电影数据库。因为links表包含了MovieLens电影和这两个数据库ID之间的对应关系所以我们可以根据这个对应关系来抓取电影的其他相关信息这也为我们大量拓展推荐系统特征提供了可能。
<img src="https://static001.geekbang.org/resource/image/95/07/951f3fb63de288774c404c215756cf07.jpeg" alt="" title="图7 外部链接数据">
此外MovieLens的数据集中还包含了tags.csv它用于记录用户为电影打的标签由于课程中暂时没有使用标签数据我就展开说了。
## Sparrow Recsys涵盖的技术点
清楚了Sparrow Recsys的功能和数据你肯定迫不及待地想知道Sparrow Recsys会使用哪些技术可以实现哪些模型。
那我们直接来看下面这张Sparrow Recsys的技术架构图。你会发现它其实就是我们用具体的技术选型把上节课的深度学习推荐系统架构图给填上得到的。所以Sparrow Recsys就是深度学习推荐系统架构的一个实现。
<img src="https://static001.geekbang.org/resource/image/8c/9e/8cee6a7eeebda9745bfbe1b6yy18c59e.jpg" alt="" title="图8 Sparrow Recsys的推荐系统架构">
你可以看到它一共分为三个模块分别是数据、模型和前端。其中每个部分都用业界推荐系统的主流技术比如数据部分我们会用SparkFlink进行样本和特征的处理模型部分我们会使用TensorFlow训练深度神经网络、Wide&amp;Deep、PNN等模型。
<img src="https://static001.geekbang.org/resource/image/2f/02/2f89e7a0fb0f130f2ec8e75d3848f802.jpeg" alt="" title="图9 Sparrow Recsys中的技术点">
我想啊你在看到这么多的技术点和技术平台之后肯定想问我们的课程能把它们都讲完、讲透吗这是个好问题我也有必要在这里说清楚。从中我们可以总结出Sparrow Recsys中具体用到的技术点。
其实推荐系统是一个应用属性很强的领域,想把推荐系统学好,我们就必须去学习各式各样相关的平台、技术,所以我们这门课的涉及面非常广。但你也不用因为要学这么多的技术而感到惊慌,因为我们没有必要去深究每个平台内部的原理、优化的方法,我们当好一个使用者就好。
举个例子你就明白了我们处理数据需要用到Spark但我们有必要成为Spark的专家吗其实不用。因为即使你已经走上了工作岗位也有平台架构部的同事能够提供Spark的很多技术支持。所以学习这门课程我们大可抱着一个使用者而不是开发者、维护者的心态去使用不同的技术平台。当然如果你想成为某个细分方向的专家比如Spark的专家、Flink的专家等等我相信极客时间上肯定还有很不错的课程供你学习。
所以希望你能够通过Sparrow Recsys认识到主流深度学习推荐系统都使用了哪些技术让自己有一个全面的认识建立自己的知识广度。如果还想深入钻研某个方向也可以由此开始努力成为一个领域的专家。
## 小结
这堂课我带你熟悉了我们将要实现的推荐系统Sparrow Recsys它将是我们深度学习推荐系统这门课的落地项目和实现范例。希望有这个真实可用的推荐系统作为支撑这门课可以同时兼顾概念讲解和代码实战也让我们接下来的共同合作能够更好。
从开篇词到这一节课我们从推荐系统要解决的核心问题生发出深度学习推荐系统的技术架构再到让技术架构实实在在地落地到Sparrow Recsys这个开源项目上。我想你已经可以感受到架构篇的学习过程其实就是一个从抽象到具体从形而上到形而下的过程。
那在搭建起这整门课程的框架之后,接下来我们将会一起深入到技术细节,以及深度学习的实践中,一起去体验深度学习浪潮之巅的推荐系统知识,期待继续与你同行!
## 课后思考
1. 当你把Sparrow Recsys在自己的电脑上安装运行起来之后对照着上节课的深度学习推荐系统架构图你能试着说出每个模块的代码属于架构图中的哪一部分吗
1. 你觉得对于一个电影推荐系统来说,什么数据对生成用户个性化推荐结果最有帮助?
好啦快按照这节的方法把Sparrow Recsys运行起来吧课后的两个问题也并不困难相信你肯定可以回答出来。今天就讲到这里了我们下节课见