【王喆-推荐系统】基础架构篇-(task2)Sparrow麻雀推荐系统

举报
野猪佩奇996 发表于 2022/01/23 00:53:57 2022/01/23
【摘要】 学习心得 (1)从之前的开篇了解推荐系统要解决的核心问题,生发出深度学习推荐系统的技术,架构篇的学习是从抽象到具体,从形而上到形而下的过程。这个task先把Sparrow推荐系统跑通,一开始IDEA识别...

学习心得

(1)从之前的开篇了解推荐系统要解决的核心问题,生发出深度学习推荐系统的技术,架构篇的学习是从抽象到具体,从形而上到形而下的过程。这个task先把Sparrow推荐系统跑通,一开始IDEA识别maven项目和一些包载入出现问题,最后折腾下解决了:解决IDEA无法识别maven项目和加载包,后面的章节也是围绕这个基础推荐系统详细展开和添加模块。

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

(3)举例:处理数据需要用到 Spark,但不是说一定要成为Spark的专家。因为工作岗位上也有平台架构部的同事能够提供 Spark 的很多技术支持。所以这门课需要抱着一个使用者,而不是开发者、维护者的心态去使用不同的技术平台。如果想成为细分方向(Spark、Flink等领域)专家就需要深入学习。

回顾往期

【王喆-深度学习推荐系统实战】开篇词
【王喆-深度学习推荐系统实战】基础架构篇-(task1)DL推荐系统架构

一、项目介绍

Sparrow Recommender System。像所有经典的推荐系统一样,它具备“相似推荐”“猜你喜欢”等经典的推荐功能,在页面设置上,主要由“首页”“电影详情页”和“为你推荐页”组成。

1.1 数据介绍

数据来源:https://grouplens.org/datasets/movielens/
(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 之间的对应关系,所以,我们可以根据这个对应关系来抓取电影的其他相关信息,这也为我们大量拓展推荐系统特征提供了可能。
在这里插入图片描述
PS:MovieLens 的数据集中还包含了 tags.csv,它用于记录用户为电影打的标签,由于课程中暂时没有使用标签数据,就不展开说了。

1.2 数据说明:

为了方便调试,课程的教学数据集对 MovieLens 数据集进行了精简,只留下了 1000 部电影。如果希望在全量数据集上进行推荐,可以去 MovieLens 的官方网站下载全量数据,它一共包含了 27000 部电影。

MovieLens 的数据集包括三部分,分别是 movies.csv(电影基本信息数据)、ratings.csv(用户评分数据)和 links.csv(外部链接数据)。

(1)Sparrow RecSys 的首页

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

(2) 电影详情页

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

(3)为你推荐页(敲黑板)

这一部分也是整个推荐系统中最重要的部分,是用户的个性化推荐页面。这个页面会根据用户的点击、评价历史进行个性化推荐。这几乎是所有推荐系统最经典和最主要的应用场景。在这门课程中,需要能够动手完成个性化推荐中的每个关键步骤,包括但不限于特征的处理、候选集的召回、排序层主要模型等等

二、步骤详解

PS:这个跑project出现的问题我记在了另一篇博客:解决:IDEA无法识别maven项目和加载包,和我一样小白的童鞋可以配合食用。

  • 首先,从 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/,就能看到整个推荐系统的前端效果了(如下图)。

在这里插入图片描述
简单步骤:
1、到这个地址下载IDE, https://www.jetbrains.com/idea/download/#section=mac
2、安装IDEA
3、打开IDEA
4、选择File->Open->选择项目根目录
5、在pom.xml点击右键,设置为maven project(最新的IDE版本也可能不用)
6、找到类文件 class RecSysServer,右键点击-> run
7、浏览器输入——http://localhost:6010/
8、看到SparrowRecSys首页说明运行成功。
在这里插入图片描述

重要注意事项:

(1)如果运行scala程序有困难的同学,项目里已经有python实现的版本了,可以把相应的依赖通过pip装完就能运行了,因为project中另外写了个pyspark模块。
(2)线上部分会使用java(注意:jdk一定要使用java8的版本:https://www.oracle.com/java/technologies/javase/javase-jdk8-downloads.html,因为spark对于java8以上支持的不好。),spark部分会使用scala,tensorflow部分会使用python。
(3)面试:如果确实时间紧张的话,就不要去钻研scala了,业界面试不会在乎你是用scala实现的还是python实现的。着重于spark的原理和实践能力是重点。
(4)后面的模型不需要一定是用tensorflow,只不过这门课程主要选择了tf,另外tf在工业级模型部署上有优势,pytorch这部分有所欠缺。

三、Sparrow推荐系统的技术图

Sparrow Recsys 的技术架构图。其实就是我们用具体的技术选型,把上节课的深度学习推荐系统架构图给填上得到的。所以,Sparrow Recsys 就是深度学习推荐系统架构的一个实现。
在这里插入图片描述
一共分为三个模块,分别是数据、模型和前端。其中每个部分都用业界推荐系统的主流技术,比如数据部分我们会用 Spark,Flink 进行样本和特征的处理,模型部分会使用 TensorFlow 训练深度神经网络、Wide&Deep、PNN 等模型。
在这里插入图片描述

推荐系统是一个应用属性很强的领域,想把推荐系统学好,我们就必须去学习各式各样相关的平台、技术,所以这门课的涉及面非常广。但你也不用因为要学这么多的技术而感到惊慌,因为没有必要去深究每个平台内部的原理、优化的方法,我们当好一个使用者就好。

四、作业

(1)跑通Sparrow Recsys后,对照着上个task的深度学习推荐系统架构图,说出每个模块的代码属于架构图中的哪一部分。

  • 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)对于一个电影推荐系统来说,什么数据对生成用户个性化推荐结果最有帮助?

  • 物品信息(特征): 主要是电影的类别(喜剧 悬疑) 电影的主演 电影导演 电影的内容 电影的相关评分.
  • 用户信息(特征): 主要是 用户历史观影记录(影片类型、导演、主演) 用户的观看时长 用户点击行为 用户评分 用户点赞(点踩) 用户收藏 用户分享 用户评价 人口统计学信息(年龄, 性别等) 、同类型用户最近的观影记录
  • 场景信息(特征): 看电影的时间 看电影的心情.

四、Reference

《深度学习推荐系统实战》——王喆

文章来源: andyguo.blog.csdn.net,作者:山顶夕景,版权归原作者所有,如需转载,请联系作者。

原文链接:andyguo.blog.csdn.net/article/details/120570956

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。