深度学习时代对推荐工程师的要求--王喆

一名推荐工程师的“自我修养”

在我刚进入推荐系统这个行业的时候,我心中对这个行业的初步印象是,认为这个行业就是一群搞机器学习的研究者在不断地改进模型、训练模型和提高效果,所以,我卯足了劲要成为那个能提出新的模型架构,让全公司都采用我模型的“年轻人”。

当我工作了三年之后,我终于明白,模型的工作固然重要,但它仅仅是推荐系统的一个部分,还有其他很多重要的子系统、子模块可以进行深入研究。当我工作了五年之后,我又意识到,原来能够全盘考虑推荐系统的模型、工程、业务,对它们进行整体优化的工程师才是最优秀的那一拨人。

工作八年后,我开始思考一个优秀推荐工程师的“自我修养”到底是什么,换句话说就是他该具备什么能力。下面我就把我的思考分享给你。我认为一名推荐工程师的技术能力基本可以拆解成 4 个维度:知识、工具、逻辑、业务。我们一一来看。

“知识”代表了推荐工程师应该具备的推荐系统和机器学习领域的相关知识,比如我在推荐模型篇中就强调过,我们一定要建立起自己的推荐模型演化框架,厘清各个模型之间的关系,从整体上建立起推荐系统的知识体系。

而“工具”指的是我们的工程实践能力,掌握推荐系统相关的工程实践工具的使用方法。我在这门课程中讲了很多推荐系统相关的工具、平台,包括 Spark、TensorFlow、Flink、Redis 等等,就是希望你能够具备推荐系统知识的落地能力,把脑海中的专业领域知识转化成实际的能够支持公司业务的推荐系统。

“逻辑”指的是我们作为一名程序员的基本功,包括算法和数据结构基础,以及梳理高质量系统框架的能力。

至于“业务”,我想是推荐工程师跟其他后端工程师区别最大的地方了。在业务维度,推荐工程师需要把自己当成半个产品经理,从业务场景的角度来思考用户到底喜欢什么,他们的习惯到底什么样。只有这样,我们才能够不断发现改进模型的动机,持续地迭代模型。这一点,阿里模型的演进过程,就是一种展示。

 

面试考查

1. 对知识的考察

面试官最关心的就是你对这个领域的知识储备,以及你对一些技术细节的理解。一般来说,他们会按照由广入深,层层递进地方式来考察你的掌握程度。比如说,在知识广度方面,面试官可能会让你说说主流的推荐模型有哪些,主流的 Embedding 方法有哪些,然后,再根据你的回答挑一到两点继续深入。假设,你有提到你对 DIN 模型比较熟悉,那么接下来的问题可能是:注意力机制具体指的是什么?DIN 中注意力单元的具体结构是什么?能否写出注意力单元的形式化定义,并推导它的梯度下降更新过程?所以,在面试之前,对于你自己熟悉的领域,一定要深入理解每一个细节,切忌浅尝辄止,临时抱佛脚。

2. 对逻辑的考察

面试官对“逻辑思维能力”的考察方法就是做题,一般来说也会用两种方式。一种是直接出算法面试题,让你写一种排序算法,完成二叉树的构建、遍历、反转等等操作,或者任意类似的 LeetCode 面试题。这是所有 CS 相关职位都会检查的,因为一名推荐工程师首先需要是一名合格的、基础牢固的工程师。第二种方式是让你去设计一个推荐系统的工程架构,可能是根据某个推荐场景,设计一套合适的特征工程和推荐模型等等。这类系统设计题更能检查你严谨、全面的逻辑思考能力。对于逻辑能力的积累是一个长期的过程,不仅要求你在学生阶段打牢自己 CS 相关的知识基础,而且最好能在工作中面临实际问题的时候,多思考系统设计的问题,即使这部分功能不属于你的工作范畴,你也可以多想一想有哪些可行的设计方案,不断锻炼自己系统设计的能力。

3.  对“工具”使用能力的考察

其实,对工具的考察跟公司职位的实际需求最相关,特别是一些比较高级的职位。如果这个职位要求更强的大数据处理能力,面试官可能会考察你对 Spark 的运用情况,以及对 Spark 背后 Map Reduce 过程原理的理解情况;如果这个职位希望招一位对 TensorFlow,XGBoost 等建模工具应用熟练的同学,面试官就会重点考察你 TensorFlow 的基本概念,以及怎么处理训练过程中遇到的主要问题。对于这部分,我的建议是,你在了解所有工具基本使用方法的同时,一定要注意一到两个工具的深入实践和积累,争取成为一两个方向的专家。这样,你才能在一些高级职位的竞争中脱颖而出。

4.  对“业务”理解能力的考察

如果说前三项能力是一名合格推荐工程师的必备条件,那么业务能力则是你在合格基础上变得优秀的宝贵素质。只有对业务有深刻理解,我们才能够从完成项目的阶段进化到发现项目、领导项目的阶段,所以越高的职位,对业务理解能力的考察就越深刻。比如:对于 DIN 来说,最关键的点其实并不是用注意力机制来解决这个问题,而是发现用户行为历史和目标商品的相关性。对于 Wide&Deep 来说,最重要的也并不是这个模型结构,而是如何设计 Deep 特征和 Wide 特征,从而发挥出这个模型最大的“功力”;对于模型服务的部分,最重要的是如何设计它才既能满足业务需求,又能实现工程上的要求。除此之外,推荐系统中遇到的一些常见问题,如冷启动、多目标优化、探索与利用,也是面试常问的业务问题,你必须能说出自己的思考,充分地分析具体问题,提出有针对性的解决方案。“业务”方面的提高,虽然是一个长期的过程,但我还是要建议你,在平时的工作中,不要总是想着完成一个个工程任务,按部就班的执行上级的命令,而是多思考任务背后的逻辑,多提出自己的见解,这样才能真正的提高自己解决业务问题的能力。总的来说,“知识”和“逻辑”是一名推荐工程师的基本素质,“工具”和“业务”是影响你能不能获得高端职位的关键。但不管你处于职业生涯的任何阶段,都要注意平时的不断思考和持续学习,从“广度”和“深度”两个方面,不断提升自己的综合能力,这样才能在职业生涯的阶梯上不断前行。

 

未来 3-5 年业界最需要的是:能够站在机器学习“工程体系”的高度之上,综合考虑“业务特点”、“模型结构”、“工程限制”、“问题目标”的算法工程师。在算法工程师的发展之路上,切忌“好高骛远”,只追求“好看好听”的先进技术的学生思维,回到工程师思维上来,回到解决问题的本质上来,才能够逐渐成为一名优秀的算法工程师。

posted @ 2021-03-25 21:12  dalege  阅读(197)  评论(0编辑  收藏  举报