打造工业级推荐系统(一):推荐算法工程师的成长之道
导读:个性化推荐系统,简单来说就是根据每个人的偏好推荐他喜欢的物品。互联网发展到现在,推荐系统已经无处不在,在各行各业都得到普遍都应用。亚马逊号称 40% 的收入是来自个性化推荐系统的,淘宝的个性化推荐系统也带来非常大的收益,新闻媒体的个性化推荐系统典型的是今日头条,直播平台给用户推荐喜欢的主播,金融网站给用户推荐需要的理财产品,社交网络给用户推荐大 V 或者其他朋友……越来越多的公司将推荐系统作为产品的标配。
大家接触推荐系统的概率会越来越大。作为程序员,了解推荐系统也越来越必要,甚至可以主动选择“推荐系统算法工程师”的相关职位。那大家一定会关心推荐算法工程师需要哪些知识储备,以及作为一个推荐算法工程师,未来的发展道路怎样?
本文是作者计划的一系列文章中的一篇。后面的文章将涉及到推荐系统的基本介绍、冷启动、商业价值、工程实现、评估等方方面面。这系列文章是作者多年推荐系统学习、实践经验的总结,希望能够帮助到即将入行推荐系统开发的读者或者推荐系统开发人员,让大家少走弯路。
正文:
本文我会基于自己的实践经验讲述推荐算法工程师的成长之道,这里的“道”有发展路径和道 (道理、方法论、经验、智慧) 两层意思。所以本文除了讲解推荐算法工程师的成长路径之外, 还会详细阐述推荐算法工程师需要了解的方法论和智慧。相信读者读完本文会更加坚信推荐算法工程师是一个好的职业选择, 并且结合自己的兴趣和特长也知道未来该怎样去规划、发展和成长。在这里我会从推荐算法是一个好的职业选择、发展路线及职业定位、成长之道、挑战和机遇四个维度来讲解。
为什么说推荐算法是好的职业选择
深度学习技术的逐步成熟,推动了 AI 第三次浪潮的到来,纵观目前 AI 在互联网行业上的应用,有比较好的产品落地及商业化价值的应用主要有 7 个大方向:
- 语音识别
- NLU 及 NLP
- 图像识别 (特别是人脸识别)
- 金融行业的信用评分和反欺诈
- 推荐系统
- 搜索系统
- 广告 (精准) 投放 (即计算广告)
在这 7 个大方向中,推荐,搜索,广告投放是互联网公司最普及也是最能产生现金流的三个方向。
广告投放自不用说,这是互联网最重要的变现手段,基本每个互联网公司都会利用广告来变现。只要是提供大量“标的物”给海量用户的产品就一定会用到搜索和推荐两种技术,代表了用户的两种不同诉求。
搜索是用户的主动需求,用户想要找什么东西,知道自己的需要,就会通过搜索来获取。而推荐代表的是用户的被动需求,当用户的需求不明确时,推荐就有了用武之地。
在这里,我也要强调一点,其实推荐、搜索、广告精准投放都是机器学习驱动的系统,它们在技术体系上是一脉相承的,甚至在广义上讲它们是一样的。
首先, 广告投放是将广告推送给可能会喜欢该广告的用户(当然可能需要通过标的物的承接,比如视频的贴片广告,广告是“寄宿“在视频上的),本质上可以将广告看成是推荐系统的“标的物”。
这样看的话,广告投放可以看成是一种推荐系统,只不过广告精准投放会将关注点放到广告上,希望将广告更好更精准的投放出去。
其次,推荐系统可以看成一个搜索过程,我们可以认为是将用户的历史行为的整体作为搜索关键词,通过推荐系统“搜索”出用户可能感兴趣的内容,只不过“搜索”过程是算法自动完成的,而不是用户输入关键词。
通过上面的分析,在更广的意义上,推荐、搜索、广告精准投放是一致的。他们在工程技术体系上也是类似的。
搜索、推荐在工程实现上都是分为召回和排序两个阶段,在实现算法上除了常用的机器学习算法,深度学习、强化学习等都在这三个领域得到了很好的应用。
随着移动互联网的深入发展及产品创新,目前这 3 个方向有更多更深入的交叉。
比如百度的搜索和广告基本是整合在一起的,用户输入关键词既能给出相关的搜索结果也会产生与关键词匹配的相关广告。
随着信息流的发展,信息流整合了变现能力,在信息流推荐列表中插入广告是非常好的变现方式。视频推荐中的贴片广告也是利用了广告和推荐的协同效应。
推荐和搜索结合在一起更是常用的产品策略,在用户无搜索结果时给用户推荐,在用户点击某个搜索结果时给用户推荐相关的结果,在用户输入搜索词不准确或者有错误时给用户推荐更好的搜索词。
有了上面的铺垫介绍, 我们来说说为什么推荐算法工程师是一个好的职业选择,可以从如下维度来说明。
1. 就业范围广、薪资高
从上面的介绍可以看到,推荐算法工程师可以无障碍的转搜索、广告精准投放,只要是互联网公司,都会有搜索、推荐、广告投放业务,所以择业面广。
从目前市面上的招聘信息来看,熟悉推荐算法的候选人是很吃香的,不仅容易找到好工作,并且薪资也是很高的。
2. 推荐算法与变现近,商业价值大
推荐系统是非常具备商业价值的,可以很容易为公司产生价值,所以说是离钱很近的方向,更不用说精准广告了。离钱近的业务往往也是公司的核心业务,最容易获取资源,受到老板的重视。
3. 技术门槛相对较高,可替代性不强
要想做一个好的推荐系统是很难的。涉及到数据收集、ETL,模型构建、模型训练,数据存储、接口服务、UI 展示等。
其中最大的挑战除了构建好的算法模型外,在工程上挑战性也是极大的,需要并行计算来训练模型, 需要大规模的数据存储读写, 同时推荐系统的服务接口需要具备高并发、可拓展、容错的能力。构建一个好的推荐系统需要非常多的组件来配合,构建一套完善齐备的推荐组件挑战是极大的, 推荐系统专家需要对所有这些方面都了解。
所以门槛也是极高的, 毫不夸张地说,如果你精通推荐系统,你的职业前途会一片光明。
4. 研究领域广,足够深,挑战性大
从上一点我们知道推荐系统涉及面广,每个面都很复杂,可以做的很深,并且极富挑战性,也值得对技术有追求的人努力奋斗一辈子。
通过上面的讲解, 读者应该能够感受得到推荐算法工程师确实是一个很好的就业方向, 那么我们怎么进入这一行并且未来该怎么成长发展呢?
发展路线及职业定位
大家都知道互联网技术方向的职业发展一般有三条道路。第一条是一直做技术成为技术专家,第二条是转管理方向,第三条是做到一定程度转行到周边方向,如产品、项目经理等。
在国内, 多少对年纪大了的技术人员有一定的偏见,认为年纪大了干不动了,所以大家都愿意往管理方向发展。
其实,在国外做技术是非常自信和自豪的事情,听说在 Google 技术人员的地位非常高,只有技术不行的人才考虑转管理 (有待考证)。国外大龄程序员是非常多的,也是非常受尊敬的, 比如 Java、C# 之父都是一直做技术的。
1. 技术路线
推荐算法工程师的技术路线一般可以分为四大类,一类是偏工程实现,一类是偏算法研究,一类是综合类 (工作涉及到算法开发及对应的工程实现),一类是偏业务。
不管是哪一类都需要了解自己需要学习什么技术,需要具备什么样的技能和知识储备。下面我们分别说说这四类算法工程师的职业成长之路。
(1) 偏工程实现类
偏工程实现类的推荐算法工程师,需要有较好的编程能力,热爱编程。一般的工作是实现各类推荐算法框架,开发推荐周边模块 (如 AB 测试等),构建好用的推荐平台,让推荐算法可以更快更好的落地到业务中。
这一块做的好是非常容易成为大牛的,比如大家熟悉的贾扬清,大名鼎鼎的 Caffe 框架的作者,也是 Tensorflow 的核心开发者。他原来是 facebook 的 AI 架构总监,最近被阿里挖了过来, 直接给的是 P11 级别,title 是 VP(高级副总裁),当然要达到贾扬清的段位是非常非常难的。
偏工程实现类的需要有扎实的计算机基础,熟悉数据结构和算法,熟悉计算机体系结构,熟练掌握设计模式,有很好的面向对象和抽象思维能力。
除了熟悉推荐系统的底层代码实现,还需要对机器学习算法、最优化理论、数值计算等非常熟悉,能够用高效的代码来实现这些算法。
(2) 偏算法研究类
偏算法研究类的推荐算法工程师主要关注的是怎么结合公司业务、产品特性构、已有的数据建一系列好的算法,希望通过这些算法来大大提升转化 (可能具体算法的高效工程实现交给工程师)。
这类职位一般要求有研究背景,希望是博士,需要具备非常好的理论基础。一般是大公司有专门从事算法研究开发的职位,或者是研究院类似的单位 (大公司的研究院也算),小公司一般不会招聘专门搞算法研究的。
个人觉得在工业界算法不是最重要的,关键是怎么将算法跟产品形态很好的结合起来,快速上线,整个业务要形成闭环,具备迭代优化的能力。
Google 的辛格博士就是喜欢用简单的算法来搞定问题的典型代表 (读者可以参考吴军的数学之美第二版第 13 章)。
偏算法研究类需要有很好的数学基础,需要对高等数学、线性代数、最优化、概率统计、几何、图论等方向非常熟悉。同时需要在机器学习领域有深刻的领悟,能够利用数学工具设计高效易用的机器学习算法。不一定需要编程能力特别强。
(3) 综合类
创业公司、小公司、或者刚刚成立推荐算法团队的公司,前期没资源也不愿意在推荐系统上一下投入非常多的人力,很多推荐算法工程师是既需要思考算法,也要做相关的工程,是上面两类的综合体。
虽然学习接触的东西会更多,但是精力也会更分散。
(4) 偏业务类
随着大数据、云计算、AI 的发展,越来越多的云计算大厂或者 AI 创业公司将 AI 能力 (包括推荐能力) 封装成 SAAS 服务提供给第三方公司。
我个人觉得这一定是未来趋势,未来很多创业公司不会再去招聘推荐算法工程师来自己开发推荐业务了,可能就是直接购买别人的推荐 SAAS 服务。
这个时候就需要一个懂推荐算法业务的专家,结合公司具体业务情况,选择最合适的推荐算法提供商及对应的推荐 SAAS 服务。
这类偏业务的推荐算法工程师不需要开发推荐算法,也不需要工程实现,但是需要对推荐算法相关知识熟悉,了解周边生态,知道什么算法可以用在什么推荐产品形态上,每种算法的优劣,知道在合适的时间节点引入合适的算法。这类职位其实就是一个推荐算法商业策略师。
2. 管理路线
如果做了很长时间推荐算法想转管理岗位,需要提前做好准备。包括心理准备和知识储备。
人的时间是有限的, 转管理了就一定没有那么多时间钻研技术了。
但是技术管理人员一定要熟悉了解技术,要有很好的技术视野,能够把握未来的技术发展方向,在合适的时机做合适的决策,引入合适的新技术,这种能力也是要建立在一定的技术积累和学习上的, 所以怎么做好技术学习和团队管理的平衡非常重要。
做技术管理需要多花时间学习业务知识和管理技能,学会有效沟通,需要站在老板的角度思考问题,需要引领团队更好地支撑公司的商业目标。同时也需要有很好的产品意识, 能够深刻洞察用户的需求,做好的产品来为用户和公司创造价值。
管理方向再往上走可以是技术 VP,CTO 等更高的级别,当然这类更高的级别对人在各个方面的要求会更高。如果自己有想法,并且喜欢挑战的话,等你准备充分了,还可以创业。
3. 转行换方向
推荐算法工程师如果想转其他方向,可选择的范围很多,比如算法产品经理、项目经理、数据分析等。在什么时间换行、换什么行业需要结合个人的兴趣和现实情况决定。
我不赞同在一个行业做了很长时间再换行,毕竟人的工作年限有限的。
**一般职业选择是很谨慎的,需要事先想清楚,**在刚开始做的一二年内也会知道自己喜不喜欢这个行业,在这个方向上是否有一定的优势和天赋,如果不合适就要尽快换行。
到这里就介绍完了推荐算法工程师的发展路线和职业定位,如果我们决定一直做推荐算法工程师,那么想在这条路上走的更远,就需要把握推荐算法工作的要义,这就是下面一节要讲的内容。
成长之“道”
作者有 7、8 年推荐行业相关经验,也走过很多弯路、趟过很多坑,所以这里将我的一些经验教训和建议分享给大家,让大家少走弯路,这些经验即所谓的“道”。
其实这些经验和建议也适合很多互联网行业的其他职位,甚至是非互联网行业的职位。
1. 关注业务、关注价值产出
推荐算法工程师不能只关注自己做了什么,是否保质保量地完成了任务, 对公司老板来说,能够为公司创造商业价值才是最关键的。当然,配合公司产品将功能快速高效实现是我们的主要工作之一。
如果你没有关注业务、关注推荐价值产出的意识,你一定不会在日常工作中思考业务和价值,更不可能基于自己的思考来优化推荐产品,最终你的工作很难产生商业价值。
如果你无法真正为公司和用户创造价值,那么对公司就没有价值,从而也不会受到重视,无法得到更大的成长。
所以,及早具备关注业务和商业价值的意识,并在日常工作中不断践行,你才会有更大的成长空间。不光要关注价值,更应该量化你的价值产出。
2. 让系统尽快运转起来,尽快产生价值
很多刚入行推荐算法的新人,会进入一个误区,以为算法工程师就是要做一个牛逼的算法出来,让效果一飞冲天。这种想法太幼稚了。
先不说牛逼的算法是否容易实现,即使实现了,是否可以分布式计算,是否可以在一定时间内跑完,是否稳定,这些问题在实际应用中都得考虑,并且也是制约算法是否可以落地的重要因素。
所以推荐算法工程师不能将所有精力放到研究高深的算法上,好的做法是先采用尽量简单的方法实现,先让系统跑起来,对业务先产生价值,后面逐步去优化它。
其实,往往简单的推荐算法比不用推荐会有一个较大的提升,非常牛逼的算法也很难在简单算法基础上再有极大提升了,上一个简单的算法其实已经解决了 80% 的问题了。
特别是对创业公司来说,往往没有那么多的资源招聘很多牛逼的算法工程师,这时做一个简单的系统先上去比什么都管用。
3. 打造倒三角知识体系,培养核心竞争力
现代社会科技发展日新月异, 特别是计算机行业,新技术更新迭代更快,你不可能将所有东西学会,即使是推荐系统这一个子领域,你也不可能每一块都特别精通。
我个人建议在有限的时间和精力下,你要结合自己的兴趣和长处选择一个更专的方向深入钻研,做到这个方向的绝对专家,同时在与这个行业相关的行业上拓展广度。
我将这种提升方式叫做打造自己的倒三角知识体系(见下面图 1)。
图 1:打造倒三角知识体系
只有这样你才会有自己的核心竞争力。 拿我个人来说,我自己是数学专业的,数学很好,也非常喜欢数学,所以我会在推荐系统上深挖,成为推荐专家,特别是推荐算法上,同时在大数据、搜索、广告、NLP、计算机视觉等领域拓展自己的能力边界。
将来不管你是不是一直做推荐算法,在一个领域做到专家肯定会对你有帮助的。
首先可以形成自己的一套思考解决问题的理论体系,这一套体系会帮助你在其他方向或者行业打开局面,重新快速地构建自己在新方向的认知体系。
4. 抓住核心,有的放矢
不管是在推荐系统知识学习上,还是在实际推荐业务开发上,我们都需要将精力放到价值产出最大的任务上,这样才能产生事半功倍的效果,我们每个人都要活学活用二八定律。
5. 关注外面的世界,不闭门造车
推荐系统涉及到算法和工程两大块,具体的做法和实现虽然不同的行业不太一样,但是肯定是有借鉴价值的,平时除了工作外,需要多关注外面的动向,了解别的的公司在做什么,怎么做的,只有这样才能知道哪些地方做的不够好,有待提高。
有了对比了解,就更有提升的方向和目标了。
6. 沉淀核心技能,持续学习新知识,学习跨领域的知识
推荐系统是一个复杂的体系工程,需要持续学习新知识和技能,一万小时理论说一个人要成为一个领域的专家必须在这个领域积累一万个小时,每天工作 8 小时的话,相当于 5 年时间。
注意一万小时是必要条件,不是充分条件。
另外,每个领域都在快速发展,除了积淀已有知识外,还需要学习很多新知识。比如,深度学习对很多行业产生了革命性的影响,那我们也需要对深度学习在推荐系统上的实践持续关注并努力践行。
技术的学习是无止境的,我们需要从各个渠道学习,论文、书本、Github、各种技术公众号、线上课程、付费直播、线下分享、线下沟通交流等等。
除了学习本领域的知识外,还需要适当学习跨领域的知识。比如产品、运营、项目管理等等,甚至是管理学、心理学、哲学、经济学、会计、营销等等。
更宽广的知识体系会让你从一个完全不同的视觉来看待问题,可以给你提供更多的灵感来源(和最优化求最大值类似,在很窄的知识面上,你很容易就走到了一个局部极大值,学习更多的知识,相当于给自己一个扰动,让自己可以找到更大的局部最大值)。
如果你打算将来走管理路线,那么学习跨领域的知识必不可少。
7. 构建良好的人脉关系
个人的力量是有限的,要想在事业上获得极大成功,一定需要别人的帮助,人类祖先之所以能够在恶劣的环境下生存下来,靠的就是群体的智慧。
我们在工作中需要跟同事保持良好的人际关系,尽量多帮助别人,需要跟同行业的人多沟通交流,互相学习,甚至是认识完全不同行业的人。
尽量多结识优秀的人,他们是你成长的榜样,别人身上的优点值得你学习。
在人际交往上不要太短视和功利,你的人脉关系其实是无价之宝,在适当的时候说不定你的朋友可以助你一臂之力。
这里举一个我自己的例子,我 16 年开始用脉脉,坚持每天加 10 人 (熟悉脉脉的知道,脉脉每天最多加十个陌生人),这几年坚持下来,加了近 1 万人,很多人都成了朋友,并且这些人其实就是我们团队招聘的来源,我通过这个渠道招聘到了实习生和正式员工。
8. 基于自己的认知和理解,构建一套属于自己的思考体系
优秀的人都是有自己一套思维体系和思考逻辑的。当我们在一个方向上深耕时,我们会积淀很多经验,这些经验就是你最宝贵的财富。我们要实时总结,将经验教训内化为你的知识体系, 通过不断思考及有意识的总结提升,你就会构建一套自己的认知体系。
我们可以将这套认知体系看成一个机器学习模型,你的经历就是训练数据,你的总结深度思考过程就是构建模型的过程。通过不断的总结你不断地优化你的模型,最后模型会越来越精确,泛化能力越来越好,最终你就可以对很多未知数据 (情况) 做更好的决策。
9. 打造属于自己的个人品牌
我曾经看到过一句话,说一个人对社会的价值在于你的输出而不是你的获取,我是非常认可的。
要想让自己得到行业和社会的认可,除了做好本职工作还是不够的,你需要将自己的经验知识整理并输出,通过你对社会的影响来构建个人品牌。相信品牌的价值大家都能理解,有了很好的个人品牌,你可以找到更好的就业晋升机会,如果你技术很牛逼的话,你创业也更容易拉到合伙人。
当然构建个人品牌可以有很多方式,比如开源自研技术、写博客、写公众号文章、组织线下技术活动、发表论文、开网络课程、写书等等。这些活动难的不是你能不能做,最难的在于你是否能够一直坚持做下去。
只有当你持续投入时,通过时间的积淀,你的个人品牌就会不断成长放大。举个作者身的例子,作者从 14 年底开始通过微信运动捐步,到现在已经通过微信运动捐了 1330 元了,熟悉微信运动捐步的读者知道每天要走一万步才具备捐步资格,并且每次捐步就是几毛钱到一两元,从中可以看到坚持的力量。
打造自己的品牌,越早准备越好。作者现在开始持续写公众号文章,也是为了打造自己的个人品牌。
危机与未来展望
前面对推荐算法工程师的职业发展之路及成长之道做了较全面的介绍, 在最后作者基于自己的思考来聊聊在不久的将来 (5~10 年) 推荐算法工程师可能存在的危机及机遇。
人类的需求一定有明确需求和不明确需求两大类,搜索代表的是明确的需求,而个性化代表的是不明确需求,所以只要人类有获取信息的需要,个性化推荐一定会伴随人类的发展,一直持续下去。
虽然推荐算法不会消亡,但是一定会遇到挑战和变数。
推荐算法工程师最大的危机来自于云计算及 AI 的发展,越来越多的云计算公司将 AI 作为云服务的基础能力 (包括推荐能力) 封装起来对外提供服务。过去两年很多大公司都从 Mobile first 转为 AI first,将 AI 能力作为一项核心能力来打造,这一趋势会进化出越来越易用低价的 AI 服务。
同时,有很多 AI 初创公司也试图构建垂直行业的 AI 解决方案,试图从大厂口中分一杯羹。 未来 AI 一定会成为云计算的“水电煤”,用户接入即可使用。
上述现象导致的直接后果就是,在不久的将来,越来越多的公司会选择从第三方技术提供方购买推荐服务,而不是自己从零开始构建推荐系统。最终会导致减少对推荐算法工程师的需求。
不过,随着 5G 技术的商业化、物联网的快速发展、VR/AR/MR 技术的成熟,会有更多的设备接入互联网,未来我们可以获取的信息量更大更广,身边充斥着各种讯息万变的信息。
基于这些信息会产生满足人类各种新的需求的产品及服务。同时随着教育水平的提升,每个人将会更加独立、更加愿意表现自我,让自己的个性化需求得到最大程度的释放。
这种情况正好是个性化推荐需要解决的场景,所以未来个性化推荐会更加重要和普遍,各行各业会越来越依赖个性化推荐来满足用户在各种场景下的个性化需求,这些新的场景一定会采用不同的交互方式和推荐算法体系,这也是推荐算法工程师新的机会。
移动互联网最大的革新之一是通过触屏来更便捷地让用户与互联网交互。
随着 NLP 及语音交互技术的发展成熟,基于语音的交互方式会产生非常多的家庭场景的应用 (语音交互更适合家庭场景,声音不会对外人产生干预),在家庭互联网场景下 (见下图 2),由于交互方式是通过语音来完成的, 推荐系统可能会朝着适配语音交互方式家庭场景 (家庭场景有多人、多终端) 进行创新和发展。
图 2:PC 互联网、移动互联网、家庭互联网的不同交互方式
同时,随着 VR/AR/MR 的发展成熟,能够大大增强人类感知世界的能力。我们可以想象,在不久的将来当人们带着 MR 眼镜时,你的 MR 系统可以给你提供一个全方位的、实时的、如影随形的个性化推荐系统 (见下面图 3)。
图 3:虚拟现实让你的感知能力增强,更加易于获取信息
(图片来源于网络)
当你带着 MR 眼镜走进一个餐厅时,马上给你推荐你喜欢吃的实物,当你走进商场时,给你推荐你可能喜欢的衣服 …
如果未来技术能够做到芯片与大脑相容,识别出脑信号,更多有意思的推荐场景,现在真是无法想象。
随着技术的进步, 个性化推荐未来一定会遇到很多有意思的挑战和机遇,值得我们去探索研究, 所以将个性化推荐作为你的职业选择一定是一件振奋人心的事情, 让我们拭目以待!