一、学习目标和要求
1.学习目标
在所有业界巨头的推荐引擎都由深度学习驱动的今天,作为一名推荐系统从业者,我们不应该止步于:
(1)不能满足于继续使用协同过滤、矩阵分解这类传统方法,而应该加深对深度学习模型的理解;加强对大数据平台的熟悉程度,培养结合业务和模型的技术直觉,提高我们整体的技术格局。
(2)王喆大佬之前在硅谷担任推荐算法架构师,团队踩过很多坑,其中他说最宝贵的一点: 只有建立起深度学习推荐系统的知识体系,从系统的层面考虑问题,我们才能够实现整体效果上的优化。
(3)最现实的问题是,企业的一些推荐、广告、搜索算法部分在招聘时,更喜欢动手能力强、有实习经历、有业界项目经验的(所以即使可能不放实习,卑微读研生就应该多做项目,提交到github上!)。
(4)很多师兄师姐也确实说过。。算法工程师知识更新很快,一不小心就处于淘汰的边缘,王喆大佬说人才的分布都是金字塔式的,与其抱怨,不如提高自己的知识储备、工程能力和技术视野。
2.课前要求
(1)有一定编程基础;(2)有基本的机器学习概念知识。
自己将会学习的资料:
(1)东北大学的字节大佬github推荐系统项目:
https://github.com/zhongqiangwu960812/AI-RecommenderSystem还有强哥的博客。
(2)王喆大佬的书《深度学习推荐系统》,注意书中的勘误。
(3)推荐算法的论文:
1.盘一盘推荐系统里值得一读的那些论文
2.从200多篇顶会论文看推荐系统前沿方向与最新进展
(4)动手搭建项目,像之前的京东NLP项目一样的工业级项目(尝试)。
(5)王喆大佬网站:http://wzhe.me/(有书中说的paper)
(6)推荐系统是否进入图神经网络时代?,一篇综述
二、课程体系
1.基础架构篇
(1)讲解我们要从 0 开始实现的推荐系统,Sparrow RecSys 的主要功能和技术架构。由于缺少工业级的实验环境,Sparrow RecSys 不可能是一个真正的工业级推荐系统,但是它的每一行代码都是严谨的,其中的每个方法都是经过业界验证的主流方法。
(2)还会使用到 Spark、Flink、TensorFlow 这些业界目前最流行的机器学习和大数据框架
2.特征工程篇
(1)讨论推荐系统会用到的特征,以及主要的特征处理方式,并且把它们都实践在 Spark 上。
(2)讲解深度学习中非常流行的 Embedding、Graph Embedding 技术。特征工程是在准备食材。利用学到的 Embedding 方法,来实现 Sparrow Recsys 中的相似电影推荐功能,在实践中快速成长起来。
3.线上服务篇
(1)一个工业级推荐系统和实验室 Demo 的最大区别就在于线上服务部分。我们要搭建一个推荐服务器,它包括了服务器、存储、缓存、模型服务等相关知识。
(2)初步掌握 Jetty Server、Spark、Redis,这些工程领域的核心技能。
4.推荐模型篇
(1)学习深度学习推荐模型的原理和实现方法,主要包括 Embedding+MLP 、Wide&Deep、PNN 等深度学习模型的架构和 TensorFlow 实现
(2)注意力机制、序列模型、增强学习等相关领域的前沿进展。
5.效果评估篇
(1)学习效果评估的主要方法和指标。
(2)对一个成熟的推荐系统来说,还需要建立起包括线下评估、线上 AB 测试、评估反馈闭环等整套的评估体系,真正能够用业界的方法而不是实验室的指标来评价一个推荐系统。
6.前沿拓展篇
讲解 YouTube、阿里巴巴、微软、Pinterest 等一线公司的深度学习应用,帮助你追踪业界发展的最新趋势,并且找到自己技术道路上的方向。
三、小结
不要老想着一蹴而就,推荐系统的每个模块都有着极深的技术纵深,不管是 TensorFlow 还是 Spark,还是 Redis、Flink,它们中的每一个都需要我们持续性的钻研。这里我贴加一张之前看到过的58同城的推荐系统整体架构:
毛小伟大佬对上图的总结:
数据层:前后端通过埋点记录用户日志数据,KaFka消息队列将数据存入HDFS大数据文件系统中。这一层技术栈是Hadoop、Spark大数据组件
策略层:平常所说的推荐算法就是指这一层,需要重点掌握。首先是召回,主要根据用户部分特征,从海量的物品库里,快速找回一小部分用户潜在感兴趣的物品,然后交给排序环节,排序环节可以融入较多特征,使用复杂模型,来精准地做个性化推荐。召回强调快,排序强调准。这一块重点掌握模型:协同过滤、矩阵分解、FM、Embeding、Wide&Deep及其改进。
应用层:根据业务需求而不同。比如:广告点击、商品推荐、短视频推荐。
《深度学习推荐系统》,这本书高屋建瓴的介绍了推荐系统整体架构,发展历史以及未来趋势,各种推荐模型的演化之路,很适合前期用来搭建推荐系统知识框架。但是具体的模型并没有深入讲解,还得自己去看论文。这个也很正常,作为算法人员,经常看论文是必须的,就像开发人员要时常看官方技术文档。