开篇词|从0开始搭建一个深度学习推荐系统

你好,我是王喆,在一家硅谷的科技公司 Roku 担任机器学习工程师。

Roku 是美国最大的视频流媒体平台,在美国智能电视市场占比超过 1/3。我作为推荐系统的架构负责人,在最近两年多的时间里,跟团队一起搭建了一整套深度学习推荐系统,相比于传统推荐系统,它在播放时长、点击率等效果指标上取得了 30% 以上的提升。

在这个过程中,我和团队踩过不少“坑”,也总结了很多经验。其中最宝贵的一点是,只有建立起深度学习推荐系统的知识体系,从系统的层面考虑问题,我们才能够实现整体效果上的优化。与此同时,我还发现越来越多的在校生和刚入行的工程师,想要熟悉或者是在深度学习推荐系统领域取得进一步的发展,但经常因为缺少系统的学习机会而困在一两个难点上,停滞不前。

比如说,一些对深度学习推荐系统非常感兴趣的在校生,很希望能有前辈带领他们熟悉业界的热门技术,让他们在进入相关领域前就积攒起足够的工程经验。这种想法是非常好的。我也面试超过两三百位应届生了,以我的经验,最让企业青睐的应届生就是动手能力强、有实习经验、有业界项目经验的。但这种锻炼自己的机会却很难找到。

再比如说,一些已经进入推荐、广告、搜索相关部门,但是时间不长,或者正要转行进入这些行业的工程师。他们想要自主承担起某个模块的开发任务,期待扩展自己的技术视野和格局,向更高级的职位进发。但这需要他们建立一套成体系的知识和实践框架。

我是一个十分赞同开源思想并且乐于分享知识的人。既然有那么多同行都有这样的需求,我为什么不把我建立行业知识体系的过程分享出来呢?所以在 2020 年初,我发布了新书《深度学习推荐系统》,希望这本书能帮助一些同学建立深度学习推荐系统的知识体系。令我没想到的是,这本书在半年之内就重印了 7 次,销量接近 2 万册,豆瓣评分达到了 9.3,这对于一本技术书来说是非常难得的。

新书获得肯定的同时,我也收到了很多读者的反馈,最多的一点是“书中的知识非常体系化,帮助我建立了整个行业的知识蓝图,但如果能有配套的实践项目就更完美了”。

就像 Linux 之父 Linus Torvalds 说的那句话:“Talk is cheap. Show me the code.”,实践对于工程师来说永远是最重要的。所以我就趁热打铁,在极客时间上开设了一门更偏重实战的技术专栏。我想这是一次绝佳的机会,与你一同从“0”开始,搭建一个“工业级”的“深度学习”推荐系统,做到知识和实践两手抓!

深度学习的浪潮,推荐系统的时代

在跟你聊了开设这门课程的初心之后,我觉得很有必要把我们的视野放得更宽一点,看看我们这个时代到底是怎么被推荐系统影响着,推荐系统又是怎么在深度学习的浪潮之中“乘风破浪”的。

毫无疑问,推荐系统从来没有像现在这样影响着我们的生活。想上网购物,天猫、京东的推荐系统会帮你挑选商品;想了解资讯,头条、知乎的推荐系统会为你准备感兴趣的新闻和知识;想消遣放松,抖音、快手的推荐系统会为你奉上让你欲罢不能的短视频。

而驱动这些巨头进行推荐服务的,都是基于深度学习的推荐模型。

2013 年,百度率先在广告系统中应用了深度学习,2015 到 2020 年,阿里提出并应用了从 MLR 到 DIEN 等一系列的深度学习模型。国外的互联网巨头也不逞多让,从最早的 Google 的 Word2vec,到 2015 年 YouTube 的深度学习推荐系统,再到之后的 Facebook、Amazon、微软等等,几乎所有头部公司的成功应用,让深度学习如后浪般席卷了推荐系统业界,将传统的推荐模型彻底取代。

更让人感叹的是,字节跳动在 2020 年 1 月 5 日发布的一份《抖音数据报告》中宣布,抖音日活用户突破了 4 亿。要知道,这距离抖音 2016 年 9 月上线仅过去了 3 年多一点的时间。作为一个几乎完全由推荐系统驱动的应用,这样的增长速度是惊人的,是前所未有的。而字节跳动技术团队曾经披露的,深度学习在推荐算法、视频内容理解、自然语言处理等方向上的应用,则又一次向我们印证了深度学习的强大实力。

深度学习时代,推荐工程师的职业发展方向在哪?

随着推荐系统的快速发展,在深度学习时代,推荐工程师又该如何选择自己的职业发展方向呢?

推荐工程师的工作,本质上是利用一切可能的技术手段来提升推荐系统的效果,从而不断达到甚至超越企业的商业目标。

举个例子,2019 年,阿里著名的千人千面系统驱动了天猫“双 11”2684 亿元的成交额。假设我们通过改进天猫的商品推荐功能,让平台整体的转化率提升 1%,那么在 2684 亿元成交额的基础上,我们就能再增加 26.84 亿元。 也就是说,推荐工程师仅通过优化推荐技术,就创造了 26.84 亿元的价值。这无疑是这个职位最大的魅力所在,也是它能够支撑起百万年薪最重要的原因。

1% 听起来很小,但是想要在一个成熟的推荐系统上,找到能够提升的突破点并不容易,这需要我们动用所有的领域知识储备。一位推荐工程师优秀与否,也就是在这个时候体现出来的。

在所有业界巨头的推荐引擎都由深度学习驱动的今天,作为一名推荐系统从业者,我们不应该止步于,或者说满足于继续使用协同过滤、矩阵分解这类传统方法,而应该加深对深度学习模型的理解,加强对大数据平台的熟悉程度,培养结合业务和模型的技术直觉,提高我们整体的技术格局,这些都是我们取得成功的关键。

可能你最近经常听说“算法工程师的知识更新太快,一不小心就处在被淘汰的边缘”。但我始终坚信一点,人才的分布都是金字塔式的,与其抱怨金字塔底座为什么这么宽,不如努力提高自己的知识储备、工程能力和技术视野,哪怕只是向金字塔的塔尖前进了一步,我们也超越了最宽的那个底座,不是吗。

因此,我希望在这门课里与你一起建立的,是深度学习推荐系统的整体架构。这对我来说也是个不小的挑战,因为它几乎需要我输出所有的工作经验和知识储备。当然,对你来说肯定也是个挑战,因为一定有很多新知识需要补充到自己的知识框架中。但我相信我们的目标一定是一致的,就是在深度学习时代,在推荐系统这个行业开拓视野、站稳脚跟。

这门课是怎么设计的?

一句话来说,这门课程是一门知识与实践并重的课程,通过解决 30+ 个深度学习推荐系统问题,不仅能串联起深度学习推荐系统的知识体系,还能帮你实打实地收获一套经过实践验证过的开源代码,从而让你也能实现一个工业级的深度学习推荐系统。

注意了,这里面有几个关键词,分别是“知识体系”“深度学习”“工业级”“实战”。没错,我们的课程就是围绕这几个关键词展开的。我遵循一个经典推荐系统的框架,把课程分为 6 个部分,分别是“基础架构篇”“特征工程篇”“线上服务篇”“推荐模型篇”“效果评估篇”“前沿拓展篇”,其中的每节课,我们都会着重解决一个技术难点。

基础架构篇:从 0 出发,建立深度学习推荐系统的知识体系

在开始学习这门课之前,我对你的要求有两个,一是有一定的编程基础,二是有基本的机器学习概念知识。在此基础上,我们通过基础架构篇的学习,就能建立起深度学习推荐系统的完整知识架构,做到“心中有蓝图、心中有高楼”。

具体来说,在基础架构篇中,我会详细讲解我们要从 0 开始实现的推荐系统,Sparrow RecSys 的主要功能和技术架构。由于缺少工业级的实验环境,Sparrow RecSys 不可能是一个真正的工业级推荐系统,但是它的每一行代码都是严谨的,其中的每个方法都是经过业界验证的主流方法。并且,我们还会使用到 Spark、Flink、TensorFlow 这些业界目前最流行的机器学习和大数据框架,麻雀虽小,但五脏俱全。

特征工程篇:又快又好,用心准备推荐系统的“食材”

在特征工程篇中,我会和你一起讨论推荐系统会用到的特征,以及主要的特征处理方式,并且把它们都实践在 Spark 上。除此之外,我还会讲解深度学习中非常流行的 Embedding、Graph Embedding 技术。

我们可以把特征工程看作是为推荐系统准备“食材”的过程。所以我希望通过这部分的学习,你不仅能够成为一名合格的“备菜”师傅,更能够利用学到的 Embedding 方法,来实现 Sparrow Recsys 中的相似电影推荐功能,在实践中快速成长起来。

线上服务篇:实践出真知,掌握搭建工业级推荐系统的核心技能

一个工业级推荐系统和实验室 Demo 的最大区别就在于线上服务部分。在这一篇中,我们要实打实地搭建一个推荐服务器,它包括了服务器、存储、缓存、模型服务等相关知识。相信通过这部分的学习,你能初步掌握 Jetty Server、Spark、Redis,这些工程领域的核心技能。

推荐模型篇:深度学习推荐系统上的明珠

如果让我挑出深度学习对传统推荐系统最大的改进,毫无疑问是深度学习在推荐模型上的应用,甚至我们称它为“推荐系统上的明珠”也不为过,所以这一部分可以说是整门课程的重中之重了。我们将一起学习深度学习推荐模型的原理和实现方法,主要包括 Embedding+MLP 、Wide&Deep、PNN 等深度学习模型的架构和 TensorFlow 实现,以及注意力机制、序列模型、增强学习等相关领域的前沿进展。

效果评估篇:建立成体系的推荐系统评估机制

在效果评估篇中,我们要重点学习效果评估的主要方法和指标。但对一个成熟的推荐系统来说,仅熟悉这些是不够的,我还期望你能通过这一篇的学习建立起包括线下评估、线上 AB 测试、评估反馈闭环等整套的评估体系,真正能够用业界的方法而不是实验室的指标来评价一个推荐系统。

前沿拓展篇:融会贯通,追踪业界前沿

在完成整体的知识积累之后,我们在通过这一篇的学习,将通过业界巨头们的深度学习推荐系统方案进行融会贯通。我会重点讲解 YouTube、阿里巴巴、微软、Pinterest 等一线公司的深度学习应用,帮助你追踪业界发展的最新趋势,并且找到自己技术道路上的方向。

所有的点穿成线、连成面,就组成了我们希望掌握的深度学习推荐系统架构。与此同时,我们也会在课程完成后,搭建起一个完整的推荐系统,再收获一份亲眼看见自己学习成果的成就感。

最后我想说,No Magic,不要期望一门课程就能够让你成为业界专家。如果你是完全没有推荐系统基础的新人,这门课程能够让你入门推荐系统,初步掌握深度学习推荐系统各模块的相关知识和业界实践。如果你是行业老兵,这门课能让你查漏补缺,在技术视野和格局上有所提高。但推荐系统的每个模块都有着极深的技术纵深,不管是 TensorFlow 还是 Spark,还是 Redis、Flink,它们中的每一个都需要我们持续性的钻研才能够成为领域专家。在技术专家的道路上,这仅仅是个开始,当然,我也很荣幸能帮你开启这个既有魅力又有挑战性的技术领域。

最后,关于深度学习推荐系统,希望你能在这里畅所欲言,提出你的困惑和疑问。也欢迎多多给我留言,你们的鼓励是我的动力。如果你身边也有想要学习深度学习推荐系统的同学,也别忘了把这个课程分享给他。很高兴能与你一起开启深度学习推荐系统的学习之路,愿与你在攀登行业塔尖的路上共勉。