包邮送6本!推荐算法工程师的成长路径
关注文末视频号MLNLP,后台回复推荐系统,抽奖选出6名同学,包邮送出《业务驱动的推荐系统:方法与实践》。
推荐系统行业要求推荐算法工程师的知识结构符合“T型人才”的要求——即高超的专业素养和广博的知识面。
首先,从算法角度看,推荐系统算法不是一个闭门造车的领域,它经常借鉴其他人工智能领域的优秀成果。其次,从工作需要看,推荐算法工程师也应当丰富除技术之外的知识储备,以便于理解自己业务背后的商业底层逻辑,更好地完成工作。
推荐算法工程师的成长路径
推荐系统是一个典型的交叉学科,推荐算法相关的岗位要求从业者具备T型人才的知识结构。除了显性的知识体系,推荐算法岗还对从业者提出了隐性的诉求——业务理解。
造成这一现象的核心因素是推荐问题不是一个完备定义的数学问题(well-defined problem):被推荐的内容没有绝对的好与坏;用户也不存在一成不变的偏好。推荐业务不是一个唯技术论的领域,它与复杂的市场环境和行业变迁紧密相关,解决问题的最佳方法不一定是最先进的推荐算法模型,有可能是一个简单朴素的策略。因此,推荐算法工程师不仅要不断积累自己的工程算法经验,也要称为所负责业务的驱动者。
推荐技术相关的知识是推荐算法工程师的立身之本,本节我们主要探讨推荐算法工程师的技术成长路线。
1.1 推荐算法工程师的知识体系
一名合格的推荐算法工程师应当具备胜任岗位的基本知识结构,也应当为开拓创新不断更新自身的知识储备。
首先,推荐算法岗作为互联网软件开发岗位的一种细分,应当具备软件开发岗位的基本知识结构。这一岗位的基础能力是编程开发与工具使用。
软件开发包含掌握数据结构、数据库、计算机体系结构、计算机网络、计算机系统和软件工程等基础知识。数据结构(与算法)是岗位面试必考内容,也是理解推荐系统框架代码和业务逻辑的基础,更是开发设计高效可复用的系统组件的必备技能。数据库是推荐系统数据存储、分析的基本工具,理解数据库运行机制是高效数据分析和处理的基础。当今推荐系统大多是基于云计算的大规模流式作业引擎,了解计算机体系结构、计算机网络、计算机系统的基础知识有利于我们理解推荐引擎的运作模式。在日常团队开发协作中,迭代的速度和稳定性是当代互联网公司对任何软件开发岗位的基本要求,而基于敏捷开发的项目管理和版本控制是当代主流企业普遍的开发模式,也是软件工程领域的基本概念。
工具使用包含掌握常用编程语言、开发编译工具、项目管理工具等。由于推荐引擎可能是基于C++、Java、Go等语言进行开发,而操作数据库则需要用到SQL语言,推荐算法工程师需要熟练掌握这类语言的基本语法、编译调试、常见设计模式等知识。开发编译工具如VSCode、IntelliJ IDEA等编程IDE,项目管理工具链如Git、Maven等,是提升开发效率的必备神器。同时,绝大部分服务器都装载Linux系统,习惯使用Linux系统的常见命令和文件系统,也是推荐算法工程师的必备技能。
其次,推荐算法工程师因为基于人工智能、机器学习的推荐算法而从软件开发工程师中分化出来,推荐算法是这个岗位的核心武器。机器学习、人工智能领域门类繁杂,本书涉及的与这个岗位强相关的门类包括神经网络(Neural Network)、表征学习(Representation Learning)、度量学习(Metric Learning)、因果推断(Causal Inference)、推荐系统(Recommendation System)、强化学习(Reinforcement Learning)、迁移学习(Transfer Learning)、元学习(Meta Learning)等。
随着深度学习工具的成熟便捷与推荐系统社区日渐繁盛,主流推荐算法都有了易读易移植的开源代码实现,这让推荐工程的开发门槛大大降低,也变相让大量的推荐算法工程师虽然具备动手能力,但对算法本质一知半解,只知其然而不知其所以然,因而不具备创新能力。
所有的机器学习算法同根同源,算法创新的基础在于对机器学习本源的认知积累,即“前深度学习”时代的机器学习方法,包括统计学习基础(Element of Statistical Learning)、模式分类(Pattern Classification)、最优化理论(Optimization Theory)等。而理解这些内容迫使我们回归部分数学领域,例如线性代数、微积分、随机过程(Random Process)、离散数学、微分方程等。
1.2 推荐算法工程师的技术成长路径
技术上的自我成长是每个推荐算法工程师职业生涯的核心问题。面对前文中如此庞大的知识体系,我们应该从何入手呢?这里的关键词是“由浅至深,连点成线,按需增补”。
“由浅至深”并不是指从简单的技术开始,而是指从更贴近用户的模块开始。排序模块是更贴近用户的模块,也是更适合推荐算法新人落地的技术点,其中精排模型的一点变化就会极大幅度地改变用户看到的结果,优化精排模型可以从相对更及时的反馈中迅速试错,更加理解自己面对的业务,弥补自己的认知差异。
很多在学校中从事过推荐系统相关学术研究的学生,在初次接触工业推荐系统时,面对的巨大认知差异是学术界一直是面对静态的数据优化模型,而真实的工业推荐系统是优化模型在持续流动的数据上的效果。笔者见过一些同学初次接触工业推荐系统时从事召回或粗排模型的优化,但由于下游精排模型有自己的选择性偏差,召回模型即使有很明显的变化,下游的精排模型也可能使新旧召回模型产生的差异萎缩,以致线上实验无法得到可观的效果,从而让新人产生挫败感。
总的来说,按照召回-粗排-精排的漏斗结构看,新人适合按照精排-粗排-召回的顺序逐步拓宽自身的技术栈。
“连点成线”是技术延展的选择问题,指推荐算法工程师在学习的过程中要先往同一技术链的上下游延展,这样才能有一个更宏观、系统的视角去结构化梳理自己的知识体系。例如,在推荐系统的“主循环”上,召回-粗排-精排(以及可能发生的重排)是一条技术链上的不同技术点。冷启动、流量调控等决策智能技术是“副循环”上的不同技术点。
“按需增补”就是缺什么补什么。工作前期只需要掌握几个目前影响力较高、落地效果普遍较好的算法模型及相关技术即可,例如本书提到的LinUCB、DeepMatch、xDeepFM等。随着系统优化迭代的深入以及业务增长放缓,单一技术点取得显著性收益的难度逐渐增高。这个时候,从技术创新角度追求业务收益就会需要在深水区突破的能力。这需要推荐算法工程师要保持学习习惯,跟随推荐系统的前沿研究。
获得推荐系统前沿研究的渠道主要是关注几个推荐系统相关的国际顶级会议,包括ACM Recommendation Systems(简称Recsys)、The Web Conference(也称World Wide Web、WWW)、ACM Knowledge Discovery and Data Mining(简称KDD)、ACM Conference on Information and Knowledge Management (简称CIKM)、The
International Conference on Web Search and Data Mining(WSDM)等。同时其他机器学习、人工智能方向的会议也会有推荐系统论文的投稿,例如International
Joint Conference on Artificial Intelligence (简称IJCAI)、the
Association for the Advance of Artificial Intelligence (简称AAAI)、International
Conference on Machine Learning (简称ICML)、International
Conference on Learning Representations (简称ICLR)等。由于这些会议都是全英文论文收录,因此英文读写能力也是对推荐算法工程师的隐性要求。
当下,“业务感知”已经成为推荐算法岗位对求职者的能力评估维度。感知一词也暗示了这个评价维度是一个说不清道不明的主观维度。业务感知好的人,针对特定的业务场景、业务问题能够给出合理、可持续的解决方案。反之,则可能给出“饮鸩止渴”的解决方案。本节主要讨论作为算法工程师如何沉淀业务经验,拥有业务感知,形成“业务驱动”的方法论。
2.1 推荐算法工程师的业务成长路径
业务感知成长的第一步是理解自己公司的业务。互联网平台型公司绝大多数是进行商业模式创新,归根结底都在围绕“流量”展开商业活动。在奔腾不息的流量大河上,有的公司是流量的生产者,有的是流量的消费者,有的则既是生产者也是消费者。在提供服务的同时,公司作为商业主体,它最终的核心目标一定是商业变现。
推荐系统从业人员需要关注的就是自己的公司通过何种模式进行商业变现。例如,抖音目前可以通过信息流广告向广告主收费、可以通过直播打赏抽成、可以通过知识付费课程、可以通过电商带货、也可以通过DOU+向流量需求直接收费。抖音推荐的算法工程师需要具备整体性的业务意识,因为一个改动会对公司其他关联商业生态产生影响。例如,混排模型如果增加了直播和广告密度会使用户体验下降,短期来看可能会带来直播和广告收入增长,但长期可能会损害用户留存。
那么,我们该如何理解自己公司的业务呢?
第一步是深入理解行业和赛道。一方面,我们要关注公司业务所属的行业,关注各类行业分析,关注自己公司的财报。另一方面,我们也应该关注自己公司的竞争对手,经常使用对手的产品,了解对家的战略、战术变化。久而久之,我们就会对自己所处行业形成一个系统、整体的判断和认知,
第二步是理解自己的真实工作目标。很多时候,推荐算法工程师知道自己的工作需求是什么,但不知道这个工作背后的目标是什么,整体的战略是什么。
在短视频推荐场景提升总体的VV(Valid View,有效播放次数)规模时,直觉上我们只需优化人均VV就可以了。然而只盯住人均VV进行优化往往会导致动作变形。用户消费的总时长是有限的,在一定的时长内,用户可以消费的短视频个数是有限的。短期内,人均VV的提升可能会带来用户观看视频长度的下降,从而对曝光视频的生态结构产生影响,某些比较长的视频就很难得到分发,一部分长尾用户的需求可能无法被满足。
要提升VV规模就要理解为什么要提升这个规模,以及从哪个角度提升规模。要了解这些,就需要与对接的业务运营同事进行深入的沟通,学会换位思考,站在他们的角度理解问题,了解他们的战略规划以及执行战术的打法。要根据他们的长期核心战略目标,选择自己达到业务目标的手段。例如,目标是在用户规模持续增长的前提下提升VV规模,那就要去着重优化系统在中、低活人群上的体验问题。
第三步是进入不同的业务中积累实战经验。这里就没有捷径可言了,在一个又一个推荐场景实践后就会对不同方法的使用、不同目标的达成形成自己的经验体系。这里要注意的是不要盲目相信自己积累的成功经验是普适的。实施情况往往容易让人失望,大多数“工作经验”都不具备普适性,都是在特定业务、特定时期、特定人群上得到的结论,换个岗位换家公司,这些结论可能都会被推翻。推荐算法工程师要保持开放的思维方式和态度,尽可能去更多的场景尝试工作,总结积累有一定通用价值的经验。
2.2 推荐算法业务目标优化迭代的节奏
对于业务目标不同、场景不同、发展阶段不同的推荐系统,有没有共通的优化方法论呢?答案是肯定的。在《业务驱动的推荐系统:方法与实践》第6章我们提到了根据漏斗效应分析具体问题的方法论,在绝大多数的主流推荐系统中,内容池-召回-粗排-精排形成了最常见的漏斗关系,而整个系统的优化基本方法论就围绕这一漏斗展开。
内容池的作用在于去劣存精,优化选货规则是推荐算法工程师常常忽视但又极其重要的部分。不断纳入品类更广、质量更高的内容是扩大场景手中的根本手段,而内容池的质量决定了召回算法模块的上线。圈货排差除了人工规则,也可以有算法指导,可以利用类似第10章的决策职能算法思想进行辅助。
内容池的下一层漏斗就是召回,决定召回模块效果的因素有两个,一个是召回算法的召回率,另一个是召回算法的召回量。在召回量固定的情况下,相关兴趣内容召回率越高,算法向下游输送的候选内容质量越高;在召回率难以继续优化的时候,扩大召回量就可以让更多相关的内容被囊括至召回结果中,但会给下游的计算量增加负担。需要对链路整体的计算效率进行优化,例如采用模型网络压缩的方法加速计算;使用更高效的近似近邻检索算法加快搜索速度。
召回模块的下一层漏斗是排序模块。同样,排序也遵循类似召回的优化原则,要么,提升粗排、精排的准确度;要么,让粗排向下游的精排输送更多的内容,增大候选空间。
最终,当精排模型效能大幅度提升以后,系统与用户交互的数据分布就会进一步产生显著的迁移。在数据分布发生迁移后,内容池的选货规则又会需要进一步适应。由此,又需要新一轮的漏斗优化。我们可以发现,推荐系统优化是一个循环往复、螺旋上升的动态过程,其中,蕴含了大量的人工经验。注意,实际操作时的优化顺序并不一定是自下向上的,本节中的阐述顺序只为了便于读者理解。
漏斗的调节是为了“优”,而用户体验机制化的另一个侧面就是快。从T+1更新,到小时级更新,到分钟级更新,再到端智能实时化,每一步都是为了更迅速地捕捉用户兴趣的动态变化。而随着系统响应速度的提升,系统内容的分布也会发生极大的变化。例如,在这一过程中,短视频推荐场景中曝光占比最高的内容会逐步从一月内,集中到14天内,再集中到3天内,甚至能在小时内孵化出爆款。
推荐算法工程师的职责就是清醒地认知自己所服务的系统的生命周期与未来优化方向,配合业务的战略节奏,对系统的内容和系统的技术不断升级迭代。
大约在2013年前后,软件工程师这个岗位产生了分化,进一步细分为算法工程师和开发工程师。推荐算法工程师的待遇水准随着人工智能、深度学习带来的红利水涨船高,也随着在2020年深度学习瓶颈尽显迎来了退潮。
曾经在软件行业的舆论中,算法工程师一度被讽刺为深度学习“调包侠”,即这个岗位充斥着各种只懂得调用别人开发好的现成接口,而独立完成系统性功能能力几乎为零的人。实际上,算法工程师和开发工程师的岗位需求区别,仅仅是在软件开发核心能力的基础上,向算法能力侧重还是向架构能力侧重而已。本节讨论这个问题,目的是帮助读者形成正确的推荐算法工程师能力模型的概念,进而更好地理解业务和业务背景下的技术选型决策。
3.1 推荐算法工程师的工作日常
很多校招的应聘者会在面试的时候问算法工程师的日常工作是什么,而我的回答往往出乎他们意料。算法工程师的真实日常,并不是90%的时间调试模型、做算法实验,而是在做以下工作。
1)推荐算法工程师需要时间进行业务沟通。由于立场不同、思维模式不同,在沟通中寻求理解是一件很不容易的事情。只有充分理解业务诉求,才可以找到合适的解决方案,规避项目交付风险。
2)推荐算法工程师需要时间进行数据处理。绝大多数情况下,推荐算法工程师可以直接获取的数据是原始的日志数据,以及质量较差、存在大量缺失的内容数据。
3)推荐算法工程师需要时间进行数据分析。一方面,在大多数情况下,推荐系统优化无法通过学术界不断改进模型结构的方式获得效果。由于系统问题的复杂性,模型的迭代只能解决一小部分问题。针对其他问题,首先需要进行大量的数据分析工作,找到优化点,然后设计解决方案。另一方面,日志系统中的日志,只是最原始的数据,存在大量的噪声、脏数据,把这些日志转化成有价值的数据,也是算法工程师的日常工作。
4)推荐算法工程师需要时间实现业务策略。推荐系统不是一个完全自动化的机器学习系统,而是需要人工干预和自动化算法同时生效的复杂系统。人工干预策略往往是解决眼下紧急的、可控性需求强的、无法通过模型优化在短期内解决的业务诉求。而算法工程师,需要在不影响系统可持续性、可扩展性的前提下,实现这些需求,或者拒绝不合理需求,或者寻找业务方、支持方都可以接受的折中方案。
5)推荐算法工程师需要时间做产品的用户体验官。在从事科研以及论文写作的时候,推荐领域的研究者和学生群体形成了数据指标驱动的算法优化的方法论。作为解决实际推荐问题的工程师,不可以只盯着离线、在线优化的数据指标,而是 要站在用户体的角度,体验产品,频繁使用自己开发的产品和业务场景,从用户的视角和细节中发现问题和优化方向。
6)推荐算法工程师可能只有20%的时间在做纯粹的算法优化。这甚至是一个比较乐观的估计,应该成为每个算法工程师坚持的底线,因为密集的业务需求会不断压缩思考算法的时间。在业务支持的过程中,频繁实现“短平快”的策略解决方案的同时,也要去思考如何通过算法来解决这个问题。策略的优势在于可控可解释,劣势则在于它们往往只能解决头部问题,而无法很好地解决长尾问题。
3.2 优秀的推荐算法工程师的特征
我们可以通过几个维度去拆解这个岗位的能力模型、品质模型。这几个维度是岗位入门的诉求,也是推荐算法工程师在晋升成长路上需要反复思考的里程碑。
1.形成业务驱动的方法论
业务驱动包含两层含义。
推荐算法工程师不仅要成为一名合格的技术人员,也要成为自己所支持的业务领域知识的专业人员。
推荐算法工程师要养成问题驱动的思维习惯和方法论。
从事过推荐领域或者机器学习相关领域研究工作的读者可能或多或少见过一种“创新模式”,即在A领域发明的某种技术,搬运到B领域稍作修改,就可以成就一篇还不错的科研论文。这种创新模式是一种拿着锤子找钉子的思维方式,其特点在于创新难度低、成果转化相对容易。这种模式并不适合 面向业务优化的推荐算法工程师,工业界遇到的推荐问题其实并不存在通用的解决方法,甚至不一定是当前机器学习领域的前沿方法可以解决的问题。
推荐算法工程师一定要养成问题驱动的思维方式,从问题出发,理解问题,抽象问题,形成尽可能可扩展的解决方案。
2.有较强的业务抽象能力和资源统合规划能力
业务会随着公司战略、市场环境的变化快速更迭,推荐系统需要有面向不同业务的可扩展性。推荐算法工程师在设计推荐系统的时候,不要只盯着眼前的需求,要为未来的潜在需求留出设计空间,也要有宏观的视角,合理安排不同模块的迭代节奏,防止依赖式串行开发迭代,并且能形成多模块之间的联动效应。
3.保持好奇心,不断丰富自己的技术栈
对商业公司来讲,商场如战场,每一个新的商业机会都需要有足够的执行力去攻城略地。推荐算法工程师面临的工作环境不仅是锦上添花,很多时候也要平地起高楼。
算法工程师的技术栈、工具栈也要够宽。除了平时要解决的模型问题、优化问题所需要的领域前沿知识库、基础数学知识,还需要了解诸如Map-Reduce的原理,熟悉Hadoop、Hive等工具的使用;根据推荐服务框架的依赖情况,具备除Python以外的C++、Java或者Go语言的开发能力;需要熟悉MySQL等数据库以及具备使用SQL脚本进行数据分析的能力;具备基本的英文学术阅读以及写作能力,能够跟随学术界的前沿方向和技术,将自己的创新成果转化为专利或论文。
4.有良好的沟通技巧
推荐算法工程师需要具备过硬的沟通技巧来保证日常工作的顺利展开。例如,在业务需求沟通中,常常需要跨越领域知识的障碍,明确需求的最终效果,明确权责边界和工期风险;在跨团队协作的时候,要以利他的心态和策略促成写作和共同利益的最大化。
5.有较强的抗压能力
推荐算法工程师在系统迭代的过程中,经常会面临到底是用简单的策略快速解决问题,还是给算法模型优化留出充足的时间。我们做出合理的选择,扛住短时间内可能出现的一些造成用户负面体验的压力,不要因为一时的压力,限制了算法优化的时机。
3.3 在自证价值和技术沉淀中寻求平衡
就任何一种职业,追求个人成长的优先级都应当高于实现公司对个人的要求。完成本职工作是本分,在工作中沉淀升华自身能力应当是不懈的追求。推荐算法工程师作为软件工程师的一个细分职业,其算法能力会成为岗位需求的附加维度。
在同一家公司积累再多需求开发的经验,换了公司以后也可能成为毫无价值的经历。从个人价值的角度出发,推荐算法工程师对算法的理解,如果有具像化的形式,那只能是专利或者论文。对系统的理解,如果有具像化的形式,那就是在系统不同模块上的开发设计经验。在岗位上证明自己的工作价值是基本盘。每一个推荐算法工程师在工作之余,需要思考的是还能有哪些突破和创新。
本文摘编自《业务驱动的推荐系统:方法与实践》,经出版方授权发布。(ISBN:978-7-111-72093-5)
延伸阅读
关注下方视频号MLNLP,后台回复推荐系统,抽奖选出6名同学,包邮送出《业务驱动的推荐系统:方法与实践》。
微信扫码关注该文公众号作者