推荐系统三十六式学习笔记:产品篇36 | 组建推荐团队及工程师的学习路径

目录

  • 团队组建
  • 个人成长
  • 总结

如果你是老板,或者是公司里的推荐系统包工头,那么你一定会关心:要凑齐多少人才能开始搬砖?

一个推荐系统复杂度没有上限,但是有最低标准,所以下面在估算推荐系统团队规模时,按照下限来估计,照这个方式建立的团队就叫做“有下限的团队”。

团队组建

我们先定义团队的角色,这里既然是组建“有下限团队”,当然按照能省则省的原则。

  1. 算法工程师,承担的是数据科学家和机器学习工程师的双重职责,主要职责是清洗数据,训练离线推荐模型,开发算法接口,评估指标。
  2. 软件开发工程师,承担算法之外的开发任务,例如数据库的搭建维护,API接口的开发,日志的收集,在线系统的高可用等,当然“有下限的团队”可以适当简陋些,不用考虑高性能。
  3. 其他非技术角色,如果是“有下限团队”的话,这一项也可以省略,如果涉及了跨部门合作,或者你不幸被老板提出各种“推得不准”的伪Bug,那么你就需要一个这样的角色去充当工程师港湾,来阻挡外界的风雨。

接下来,估计一下每个角色的数量。这里主要是估计工程师的数量。

关于算法工程师,最低配需要2位,一位三年左右经验的算法工程师负责数据分析,数据清洗,推荐模型训练,评估和上线,外带一位三年以下经验的初级工程师,从中辅助分担琐碎工作。

为什么说有经验的算法工程师一位就够了,假如你使用矩阵分解作为推荐系统第一版核心算法,那么推荐使用Quora开源的QMF工具。它能在一台32核、244G、640G固态硬盘的服务器上用20分钟完成10亿非零元素,千万用户和物品的矩阵分解。工具简单易用,一个有经验的工程师足够让其运转起来。

那么核心问题就是,一台机器是不是撑得起你老板的野心?我认为,撑得起,具体的估算如下。

根据我前文中对注意力的定义:内容消耗的加速度乘以内容的消耗难度。当注意力为正数时,是上马推荐系统的好时机。

因为这说明平台方已经有了注意力的原始积累,只需要加上推荐系统将它保存下来并加以扩大即可。那么组建的这个“有下限团队”最低要求就是能留住当前的注意力。

注意力为正时,每天的用户消耗内容数量应该是指数级别,比如

f ( a , t ) = t a ( a > = 2 ) f(a,t)=t^a (a >= 2) f(a,t)=ta(a>=2)。其中t是时间,a大于2时才会有正的注意力。因为它的二阶导数为: a ( a − 1 ) t ( a − 2 ) a(a−1)t^{(a−2)} a(a1)t(a2)。当然,这个数学推导不重要,只是举个例子。

每天的内容消耗量,其实就是用户产生的行为数据条数,至少是正比关系,这里从简考虑,认为二者等同。假如a=2,t的单位是天。那么在t天后,累计产生的日志数量是:

∑ i = 1 T i 2 = T ∗ ( T + 1 ) ∗ ( 2 T + 1 ) 6 \sum_{i=1}^T{i^2}=\frac{T*(T+1)*(2T+1)}{6} i=1Ti2=6T(T+1)(2T+1)


现在看看,如果你公司使用的服务器和Quora评测QMF时所用服务器一样的配置,用单机运行QMF,极限是撑多久?我简单列个方程。

T ∗ ( T + 1 ) ∗ ( 2 T + 1 ) 6 = 6000000000 \frac{T*(T+1)*(2T+1)}{6} =6000000000 6T(T+1)(2T+1)=6000000000。方程右边就是QMF评测时处理的60亿非零元素。解这个一元三次方程,得到唯一的实数解是

1441.75天,也就是3.9年。

所以告诉你的老板,你一个人可以撑四年,只管定期加工资就可以了,不用加人。

那么为什么明明一位算法工程师就可以,还要外带一位,这主要是考虑,团队人才应该有梯度和备份。

关于软件开发工程师,至少需要四位,是的,你猜到了,我要证明的是需要两位,还有两位是为了人才梯度和冗余备份。分工是这样的:
1、推荐服务输出,一位三年及以上经验的后端开发工程师,外带一位三年 以下的初级工程师。负责调用推荐RPC服务,开发必要的过滤逻辑,填充详情字段等;
2、反馈数据搜集和管理,一位三年以上经验的运维工程师,外带一位三年以下的初级工程师,负责回收用户反馈数据,统一存储日志数据。

以上就是一个最低配推荐系统的配置。当然,如果能复用现有团队的部门工程师,则灵活处理。上面的估算也只是一个示例。

个人成长

下面来说说,工程师个人该如何学习和成长的问题。

推荐系统工程师和一般意义的软件工程师相比,看上去无需像IOS或者Android工程师写大量的代码;也无需像研究院的研究员那样,
非得憋出漂亮的数学模型才能工作更无需像数据分析师绘制出漂亮的图表。那推荐系统工程师的定位是什么呢?

实际上,这里所的几个“看上去无需”,并不是降低了推荐系统工程师的要求,而是提高了要求。因为你得具备三个核心素质:
1.有较强的工程能力,能快速交付高效率少Bug的算法实现,虽然项目中不一定要写非常大量的代码;
2.有较强的理论基础,能看懂最新的论文,虽然不一定要原创出漂亮的数学模型;
3.有较好的可视化思维,能将不直观的数据规律直观地呈现出来,向非工程师解释清楚问题所在,原理所在。

首先,虽然世人目光都聚焦在高大上的推荐算法上,然而算法模块确实是容易标准化的,开源算法实现一般也能满足中小厂的第一版所需,而实现整个推荐系统的路径却不可复制,这个实现路径就是工程。

可以说,是工程能力决定了推荐系统的上限。如何提高工程能力,无他,就是反复刻意练习。但是对于入行不同年限的人来说,提高的办法则各不相同。

对于在校生,一个比较好的办法是,将看到的任何算法知识、论文或者图书,都亲手转换成代码,一个简单的算法,从你看懂到你无Bug地实现出来,其实还有很远的距离,在实现完成后,去阅读对应的热门开源应用,阅读它的实现方法,对照自己的,总结差距。

对于刚工作的新人,这时候你已经有一定的工程基础,并且没有太多的整块时间,那么就要好好把握工作中的项目实战。

避免重复造轮子的前提是知道有轮子,且知道轮子好在哪,这要求你熟读现有轮子的各种,对它性能、实现方法了如指掌,如此才能在不重复造轮子的基础上安心实施拿来主义,并且可以进一步将轮子 按照实际使用的所需问题进行改良。

对于工作一定年限的人,这时候你已经熟知各种轮子及其弊端,也能改进了,那么在业务逐渐增长后,需要考虑将系统中部分模块中所使用的开源加上补丁,整体升级为自研系统。这个开发可以从一些风险不高的模块着手,逐渐锻炼。

上述三个大的阶段,比较粗略。但是核心思想就是:爱动手,爱思考,爱阅读,爱总结。

第二,是理论基础。对于一个从事推荐系统的工程师来说,一定需要有数理基础。高等数学、概率统计、线性代数这些大学基础课一定还在自 己心中,没有还给老师。

如果不幸还给老师,你需要重新捡起来,因为整个机器学习都是建立在高等数学基础上的。另外,有一个学科我个人认为很重要,甚至成为人生的指南,那就是信息论。信息论用量化方式确定了什么是信息,很多算法问题也因此可以从通信角度考虑。

第三,数据可视化思维,在做数据分析和清洗工作时,需要想办法直观地呈现出来,在工具面,掌握一些常用的绘图工具就很有必要了。Python中的Matplotib, R语言中的ggplot2, Linux命令 里面的Gnuplot, Windows里的ExceI等等都是非常常用的绘图工具。

掌握工具并不难,还需要有show的冲动,直观方式呈现出数据规律不但对自己优化算法和系统有非常大的作用,还可以与合作伙伴快速达成任务共识,节省沟通成本。

这三个能力,建立起来的难度逐渐增加,需要持之以恒,与《卖油翁》那句著名的“无他,但手熟尔”,规律相同。

除此之外,还有一-些非典型工程师的加分项。

1.学习能力:虽然缓慢,但是科学一直在突破边界,技术更是日新月异地升级了一代又一代,而文化的进化则远远快于人类基因的进化,这些变化,都要求你我要有不断学习的意识,还要有会学习的能力。

2.沟通能力:在一些中大型厂,一些数据资源分散在不同部门,在技术之外需要去整合这些资源,这需要沟通能力。

3.表达能力:能把一件事情讲清楚,最直接的好处是在团队内部减少无效的沟通,提高工作效率。

总结

今天我主要谈的是推荐系统中人的因素,包括了团队和个人,这部分内容本来和技术干货内容相比,就有点形而上,但是事实上却又绕不开这部分内容。

因此,我先用一个例子呈现一个有下线团队应该有多少人。这里没有考虑人的个人能力差别,这里就假设大家智商都一样。
很多时候,其实单机就能搞定很多看上去很复杂的事情,这是我不太推崇分布式的原因,因为多数时候没必要。

最后,我谈了我对推荐系统工程师的能力看法,一共有三个层次,建设起来由易到难,需要不断刻意练习,才可能有较大的能力进步,这一点我和你共勉。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/52427.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

SpringBoot (面试篇)

什么是SpringBoot 通过SpringBoot,可以轻松的创建独立的,基于生产级别的Spring的应用程序,您可以“运行”它们。大多数SpringBoot应用程序要最少的Sprig配置 为什么要用SpringBoot 快速开发 快速整合 配置简化 内嵌服务容器 SpringBoot与…

Verilog刷题笔记59

题目: Exams/m2014 q6c 解题: module top_module (input [6:1] y,input w,output Y2,output Y4);assign Y2y[1]&w0;assign Y4(y[2]&w1)|(y[3]&w1)|(y[5]&w1)|(y[6]&w1);endmodule结果正确: 注意点: 起初,我的代码有错误,代码如下…

9 正则表达式:Java爬虫和正则表达式、String中的正则表达式方法(基本语法7)

文章目录 前言一、正则表达式1 [ ] 语法(1)[ABC] 和 [^ABC](2)[A-Z]和[a-zA-Z]小总结2 特殊字符语法(\w 这些)3 数量符4 \ 、()、 |5 锚点 ^ 和 $,\b,\B6 (?i) : 忽略其后面的大小写 ---- 这个Java是可以的,其他语言我不知道(正则表达式虽然大多通用,但也有部分是…

视频检索技术为电子商务直播领域带来了前所未有的革新

视频检测在这个场景中指的是通过视频流实时识别和检索直播中销售人员展示的商品。这涉及到从连续的视频帧中分析和识别商品的视觉内容,通常与语音和文本数据结合,以提高识别准确性。 技术原理 文本引导的注意机制:这一机制通过直播中销售人员…

Prometheus学习

监控架构介绍: 基本架构: Prometheus 和 Zabbix 的对比: 安装和使用: Prometheus 采集、存储数据Grafana 用于图表展示alertmanager 用于接收 Prometheus 发送的警告信息node-exporter 用于收集操作系统和硬件信息的 metrics …

猫头虎 分享:Python库 Matplotlib 的简介、安装、用法详解入门教程

🐯 猫头虎 分享:Python库 Matplotlib 的简介、安装、用法详解入门教程 今天猫头虎 带大家一起探索一个非常重要的 Python 库——Matplotlib。这是一个强大的工具,广泛应用于数据科学、人工智能和机器学习等领域,用于创建静态、动…

Node.js中的pipe方法:深入解析与应用指南

在Node.js中,pipe方法是处理流(Stream)数据的一种非常高效的方式。它允许你将一个可读流(Readable Stream)的数据直接传输到一个可写流(Writable Stream)中,而无需手动编写读取和写入…

3、springboot时代背景

一、微服务 二、分布式 三、云原生 原生应用如何上云。 Cloud Native 上云的困难 服务自愈弹性伸缩服务隔离自动化部署灰度发布流量治理...... 上云的解决

怎样更改电脑的MAC地址?

怎样更改电脑的MAC地址? 电脑的机器码是可以修改的。 操作步骤: 1、通过按WINR键,调来电脑的接运行窗口,打开CMD命令来查看机器码。 2、命令提示符窗口里输入ipconfig /all,回车,即可显示出当前电脑的网…

wpf UniformGrid 动态加载数据

在WPF中,如果你想要在UniformGrid内部为每个Model对象放置一个Panel(比如StackPanel或Grid),并且这些Panel是通过数据绑定动态生成的,你需要结合使用ItemsControl、DataTemplate以及UniformGrid。但是,由于…

调试理解 NodeJS 模块机制

前言 通过断点调试理解 NodeJS & CommonJS 的模块机制,先说结论: NodeJS 中每个文件视作一个模块,每个模块默认可以访问 module、exports、require、__filename、__dirname 变量NodeJS 中通过将模块源码包裹在 Wrapper 函数中&#xff…

【每日一题】【素数筛板子题】又是一年毕业季 牛客小白月赛99 D题 C++

牛客小白月赛99 D题 又是一年毕业季 题目背景 牛客小白月赛99 题目描述 样例 #1 样例输入 #1 3 4 2 4 6 5 5 6 2 5 3 2333333 8 11 4 5 14 19 19 8 10样例输出 #1 3 7 2做题思路 首先观察到 即需要保证拍照的时刻 大于等于 2 那么就从2开始往上走,如果有人…

[CLIP-VIT-L + Qwen] 多模态大模型源码阅读 - 语言模型篇(2)

多模态学习笔记-语言模型篇(2) 参考repo:WatchTower-Liu/VLM-learning; url:vlm-learning 吐槽 今天的源码看的欲仙欲死,NTK(neural tangent kernel), rotary_position_embedding这些在之前的学习中完全闻所未闻,导致看的时候一…

红黑树、B+Tree、B—Tree

红黑树 B-Tree 这三个通常都是把内存全部加载到内存里,然后再内存中进行处理的,数据量通常不会很大。 内存一般容量都在GB级别,比如说现在常见的4G、8G或者16G。 如果要处理的数据规模非常大,大到内存根本存不下的时候。这个时候…

如何简单判断某个port是否被防火墙block

在存储系统中经常遇到要上传一些code到存储中做升级,但是通过客户网络死活搞不定的情况,其实很多时候是由于客户内部有防火墙的设置,某些端口是被block屏蔽的。本文就介绍几个命令用来快速判断是否这些port被客户做了block。如果确认是被bloc…

Spring Boot 集成 swagger 3.0 指南

Spring Boot 集成 swagger 3.0 指南 一、Swagger介绍1.springfox-swagger 22.SpringFox 3.0.0 发布 二、Spring Boot 集成 swagger 3.01. 添加Maven依赖2. 创建配置类配置Swagger2.1 创建SwaggerConfig 配置类2.1 创建TestInfoConfig信息配置类 3. 在你的Controller上添加swagg…

【思源笔记】思源笔记配置S3同步

本文首发于 ❄️慕雪的寒舍 文章目录 1. 写在前面2. 什么是思源笔记的S3/WEBDAV同步?2.1. 说明2.2. 思源的同步配置和工作空间2.3. 什么是S3协议? 3. 配置思源S3同步3.1. 初始化数据仓库密钥3.2. 思源S3同步界面3.3. 配置七牛云KODO3.4. 如何将同步配置导…

以GD32F103C8T6为例的核心板原理图PCB绘制学习笔记简单总结

目录 GD32F103C8T6核心板 设计流程 基础知识 部分原理图解析 排针连接 (H1 - PZ254V-12-8P): 晶振 封装 基础知识 C0603封装 C0805 F1210封装 保险丝 L0603 贴片电感 LED-0603 R0603 HDR-TH_8P-P2.54-V-M-R2-C4-S2.54 排针 按键(SW-SMD-T6X…

Python(PyTorch)物理变化可微分神经算法

🎯要点 🎯使用受控物理变换序列实现可训练分层物理计算 | 🎯多模机械振荡、非线性电子振荡器和光学二次谐波生成神经算法验证 | 🎯训练输入数据,物理系统变换产生输出和可微分数字模型估计损失的梯度 | 🎯…

Code Practice Journal | Day52_Graph03

KamaCoder 101. 孤岛的总面积 题目:101. 孤岛的总面积 (kamacoder.com) 题解:代码随想录 (programmercarl.com) solution namespace ACMModeExample {class Program{static void Main(string[] args){// 读取矩阵的行数和列数string[] dimensions Cons…