深度学习推荐系统实战
王喆
Roku 推荐系统架构负责人,前 hulu 高级研究员,《深度学习推荐系统》作者
33298 人已学习
新⼈⾸单¥68
登录后,你可以任选4讲全文学习
课程目录
已完结/共 44 讲
深度学习推荐系统实战
15
15
1.0x
00:00/00:00
登录|注册

23| 实战:如何用深度学习模型实现Sparrow RecSys的个性化推荐功能?

返回给前端展示
经过候选物品获取、召回层、排序层
生成候选电影集合
TensorFlow Serving导出模型文件
TensorFlow训练模型
Spark处理数据
数据集MovieLens
构建候选集、召回层、特征获取和拼装
实现推荐逻辑
部署推荐模型上线
连接线上环境和线下环境的纽带
实现深度推荐模型的结构
为在线上排序做出准确的推荐
在线上实时拼装特征向量
准备模型所需的样本和特征
推荐系统的特征预处理
推荐服务器的排序层实现
使用TensorFlow Serving载入模型文件
TensorFlow训练并导出NeuralCF模型文件
利用Spark处理MovieLens数据
获取返回得分和排序
建立TensorFlow Serving API
特征样本的拼接
推荐服务器部分
数据和模型部分
推荐服务器内部逻辑实现
模型服务
模型离线训练
模型特征工程
课后思考
小结
排序层+TensorFlow Serving的实现
猜你喜欢推荐功能的技术架构
技能库
如何用深度学习模型实现Sparrow RecSys的个性化推荐功能?
参考文章

该思维导图由 AI 生成,仅供参考

你好,我是王喆。
今天又是一堂实战课。在这节课里,我会带你利用我们现阶段掌握的所有知识,来实现 SparrowRecSys 中“猜你喜欢”的功能。具体来说,我们会根据一位用户的历史行为,为 TA 推荐可能喜欢的电影。这个功能几乎会用到所有的推荐系统模块,包括离线的特征工程、模型训练以及线上的模型服务和推荐逻辑的实现。
如果说完成了第 14 讲的“相似电影”功能,还只是你“武功小成”的标志,那啃透了这节课的实践,就代表你掌握了推荐系统技术框架中的大部分内容,你就能在推荐系统的实际工作中做到“驾轻就熟”啦。

“清点技能库”,看看我们已有的知识储备有哪些

正式开始实践之前,我们还是先来清点一次自己的技能库。看看经过推荐模型篇的学习,我们技能库中的“兵器”又增加了多少,哪些可以用来实现“猜你喜欢”这个功能。下面,我就按照从离线到线上,由数据到模型的顺序,为你依次梳理一下特征工程、模型离线训练、模型服务、推荐服务器逻辑这四大部分的技能点。

1. 模型特征工程

特征工程是所有机器学习项目的起点,咱们的推荐模型也不例外。为了训练推荐模型,我们需要准备好模型所需的样本和特征。此外,在进行模型线上推断的时候,推荐服务器也需要线上实时拼装好包含了用户特征、物品特征、场景特征的特征向量,发送给推荐模型进行实时推断。
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 中文繁体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
    • 阿拉伯语
  • 解释
  • 总结

本文详细介绍了如何利用深度学习模型实现Sparrow RecSys的个性化推荐功能。文章首先梳理了技能库,包括模型特征工程、模型离线训练、模型服务和推荐服务器内部逻辑实现。然后详细介绍了“猜你喜欢”推荐功能的技术架构,包括数据和模型部分以及推荐服务器部分。数据集经过处理后,特征存入Redis供线上推断使用,样本提供给TensorFlow训练模型。训练好的模型文件载入TensorFlow Serving,对外开放模型服务API供推荐服务器调用。推荐服务器部分通过候选物品获取、召回层、排序层生成“猜你喜欢”的电影推荐列表,最终返回给前端展示。整个过程中,除排序层和TensorFlow Serving的实现外,其他部分均已在之前的实战中实现。文章内容涵盖了推荐系统技术框架中的大部分内容,适合想要深入了解推荐系统技术的读者阅读。文章还提到了模型的导出和导入,以及TensorFlow Serving API的建立和使用。文章最后鼓励读者对推荐系统的特征预处理进行思考,并展望了下一篇关于推荐系统的评估方法的内容。

仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《深度学习推荐系统实战》
新⼈⾸单¥68
立即购买
登录 后留言

全部留言(18)

  • 最新
  • 精选
  • Lucifer
    思考题:推荐服务器内部专门开发特征加工模块,进行一些人工的处理。比如点击率特征,实际上“点击”会包含多种点击行为,各种行为如何融合,需要灵活配置。既不能放在离线存(更新不便),也不能放在tf serving里(逻辑多了太慢) 1、tf serving只负责简单的模型运算; 2、离线redis等负责通用特征数据的存储; 3、推荐系统服务器进行数据加工

    作者回复: 非常好

    2020-12-06
    23
  • Sebastian
    思考题:特征分为静态特征和动态特征。对于静态特征,基本长时间不会变更,这块直接从特征池(可以是Redis)里取。但是对于动态特征,比如用户实时行为的特征,这种会通过流式处理(比如spark streaming或者flink)后,直接落盘,同时可以避免特征穿越。特征实时更新后,线上服务阶段,模型的输入就是未进行处理的原格式数据,tf serving 接受请求后,在模型里进行特征预处理,比如使用tf.feature_column进行处理,转为one hot和embedding格式。 但是在QPS很高的场景下,这种处理可能达不到上线要求,想问老师有什么好的解决方案?

    作者回复: 大致流程确实是这样的。但是其实在实际应用中,tf serving的延迟问题会比较严重。我们会想尽一切办法去减少tf serving的负担。所以特征预处理这块会尽量放到推荐服务器内部来做,或者放到离线做好预存到线上存储。 比如id 2 embeding这一步,可以把id和emb的对应关系放到redis里或者其他线上数据库,减轻tf serving的压力和模型体积。

    2020-12-04
    4
    9
  • tuomasiii
    想问下老师图1里,“候选物品库”里是放的embeddings还是actual data? 因为我们召回层用embedding来算similarity的话,到底是从redis里读还是到候选物品库拿?

    作者回复: 真实的环境下,候选物品库中存放的是物品的一些基本信息,一般不包含embedding。 embedding应该从特征数据库redis中去拿。 我们的课程项目做了一定程度的简化,候选物品库是直接从数据文件中预载入的。

    2021-01-06
    6
  • Wiiki
    非常感谢王老师的细心分享,让我们从零到一建立起推荐系统的概念和实践经验~ 谢谢~

    作者回复: 这就是咱们课程的目的,还是多感谢自己的努力,相信能坚持下来的同学一定可以在工作中有所收获,有所提高。

    2020-12-14
    5
  • Wiiki
    王老师,您好。更新了你最近的工程代码,发现新增了pyspark推荐系统的工程实现部分,想请教一下:对于大数据量的特征工程处理,选择用scala还是python版的spark实现有没有什么建议? 谢谢~

    作者回复: pyspark的部分是咱们课程的学员贡献的。 现实工作中建议最好还是用scala来维护,毕竟是spark原生支持的语言,真正的大数据工程师一般会使用scala。但是也不反对python来维护,跟其他python项目在一起维护会方便些。

    2020-12-17
    5
    3
  • 金鹏
    王喆老师好,请教个问题,现在边缘计算或端智能,多大程度解决了用户特征更新的问题,端智能的应用前景如何?

    作者回复: 我看好边缘计算的发展,一直是近两年我看好的方向。至于多大程度解决了特征更新的问题,我觉得他们会一直共存。边缘计算永远也替代不了服务器端的特征更新设施。

    2020-12-06
    3
  • Berton
    特征处理这部分,应该是离线计算好得到每个特征的map数据,在推荐服务器内部加载这些map数据,直接将原始特征映射成深度学习需要的向量,将得到的向量送入Tensorflow Serving得到推荐结果 如果在Tensorflow Serving做特征预处理的工作,会导致推荐服务的响应时间边长

    作者回复: 是的,最好是可以在推荐服务器内部把特征都准备好,处理好。tf serving只做inference,不承担太多特征预处理压力。

    2020-12-04
    3
  • abc-web
    王老师请问一下,在线推断需要拼装数据提交请求,但数据量大的情况下会影响效率,那除了拼装还有没有其他的方式可用

    作者回复: 几乎没有,除非你通过某种方式把模型本身进行蒸馏压缩,让模型需要的特征数量减少。

    2021-07-14
    2
  • liuqqwwe
    王老师,如果想要结合移动端上实时反馈信息,比如迅速划过以及短播这种隐式负反馈,长播、点赞这些正反馈,结合后端下发的用户和部分物品的embedding信息对缓存内容进行前端重排序,这种场景选用什么模型合适呢,如何合并新操作产生的输入呢

    作者回复: 这是一个模型更新的问题,不是选用模型的问题。基本思路是做模型的online learning,和embedding的实时生成。

    2021-07-19
    1
  • tuomasiii
    想问下图中Redis到排序层的线上特征具体是指的哪些特征? 是像geographic和current timestamp这些feature吗? 还有就是排序层模型的loss都是使用entropy的loss? 像warp loss和bpr这些能被使用到吗? 谢谢!

    作者回复: 1.是的,所有线上inference用到的特征都可以放入redis 2.一般二分类问题倾向于用cross entropy loss,当然,不排除可以用其他loss function。

    2021-01-01
    1
收起评论
显示
设置
留言
18
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部