19位算法工程师总结:机器学习项目成功落地的三条秘诀

00eb0d5e873fa9723bbbc5b543aa26e9.png

文 | 天于刀刀

又是一年金九银十,前几天小编刀刀在一次电话面试过程中被HR 的一个问题问得差点闪了腰。

当时情况是这样的,在流利地介绍完之前的几个项目后,招聘小姐姐打断了我后续的(忽悠)节奏,郑重其事地反问了一句:

"请问您的这些项目都已经落地了吗?"

当时我只觉得莫名其妙,这别不是来套方案的吧。

9087ee7d001bf2366960a0c447e11a5b.png

落地?这当然落地了啊!

随后我就挑着框架性的东西和小姐姐解释了一番后,这个问题也算是过关了,顺利进入下一轮。

转眼间这场面试已经过去几天,我也逐渐遗忘了其中的大部分细节,直到最近一个 twitter 上热议的话题 [1][2] 刷新了我之前浅薄的观点。

3858a3ec6b3fbc1dcb6a9d3eab24b301.jpeg

只有完成从数据收集、模型实现、评估部署和在线检测这四个循环步骤的机器学习任务才算是真正的落了地!

简而言之,在业务上落地的工作也包含了后续迭代的能力和相关的扩展性。

而这份工作被称作为 Machine Learning Operations (MLOps),由企业中的 Machine Learning Engineers (MLEs) 完成。

读完全文,小编非常推荐之前没有模型部署和落地经验的新同学去学习一下其中的方法论和概念。或许这个不能帮你在老板面前 show off,但是快速入门则完全没有问题。

此外对于有经验的从业者,你也能从文中丰富的受访者案例中收获一些同感。

在文中作者采访了19位来自不同公司不同机器学习岗位的工程师,将他们日常工作中的一些流程和方法论进行了归纳,总结出能让机器学习真正落地取得成功的三点要素:

  1. 敏捷开发( Velocity )

  2. 系统验证( Validation )

  3. 多个版本( Versioning )

首先,敏捷开发可能相当一部分工作的小伙伴都有所耳闻(加班泪),它的核心要素就是尽可能地缩短需求到交付之间的时间成本。

而在机器学习任务中大多数的 bad case 改进和 idea 的实现都需要做实验来最终确定是否有效,因此作者认为在落地环节中,迭代是非常重要的一块工作。常见的迭代技巧有:数据迭代、灰度测试等。

受访者 P11:我往往会从一个已经存在的模型开始训练,因为这意味着更快速的迭代。通常,从我们的经验来看,数据能够帮助突破瓶颈......显然这并不是说“永远不会修改模型”,只是这不应该是我们在处理实际问题时的第一步。

其次,一个动态的、规范的、多样的和紧贴实际业务的验证集是非常有必要的。构建一个完备的验证集,我们往往希望它:(1)尽可能地贴近业务的数据分布;(2)加入代表性的数据防止 bad case 再次出现。

一位来自小公司的 NLP 岗位受访者在文中提到,他会专门收集业务中遇到的“失败”案例,形成并维护一个专门的验证集,并且在未来的模型升级运维过程中反复地使用它。

同时验证集中的指标也应该尽可能地和业务产品挂钩——工作!=科研,老板也不一定是 AI 技术人员。

我们需要业务导向的 KPI 设计,例如对于机器翻译任务,在2020新冠元年,相对于和老板报告 BLEU 又提升了多少多少,你还不如早点确保“新冠”别再被翻译成“new crown”来得实在。

受访者 P11:将模型的表现定为 KPI 是一件非常重要的事。但这件事的重点是,你需要指出真正重要的是什么。坦白地说我认为这才是人们进行 AI 工作的方法。不是简单的:“嘿!让我们搞点实验整点好看的 precision 和 recall 给老板展示吧!”而是:“嘿,让我们讨论下每个人各自负责的业务指标吧!”

最后,维护一个模型需要深思熟虑的软件工程和组织性的实践。这意味着 MLOps 需要不停地标注新数据,并且周期性地基于新数据训练新模型。

此外,一个针对生产环境中模型的审查系统也应该被建立,用于监控在线模型的表现。

通过对比离线实验数据的模型效果和在线生产模型的效果,我们应当能够回答“为什么模型表现降低了?哦,这也许是因为用户数据和训练数据之间存在漂移(data swift)”。

受访者 P7:...所以我可以通过分析研究后告诉别人模型效果为什么(在生产环境中)下降。那么我能不能提前避免此类问题呢?应该不行。那么我的分析算是有用的吗?可能不是。

1f07f45d0730a2ed20d5983f0778e734.png

直白地说,模型运维( MLOps )的工作都是一些“琐碎的脏活累活”,并且目前看来存在着许多的问题:

  • 不科学的训练集设置可能会导致数据泄露等问题;

  • 开发时极度依赖 Jupyter Notebook,需要花费精力进行 pipeline 重构迁移;

  • 不太好做 code review,因为可能存在一些拍脑袋的操作。

可以看到,在工作中不仅仅需要涉及到大量的数据维护、模型试验、A/B测试等一系列不那么 AI 的工作,同时还会面临标注团队的管理、产品团队的刁难和测试团队的质疑。

而在一些小公司里,顶着“算法工程师” title 的同学甚至可能会身兼数职,既是数分又干产品,偶尔标个数据写个测试程序啥的也不在话下。

这些就导致了这个岗位要求一个能打通上下游任务的机器学习抗压全才,同时还极有可能因为某一个未知的小错随时被 pua 。(虽说是否需要抗压取决于公司文化,但是我想应该没有人喜欢自己的模型在之前没想到的地方出岔子)

63cb194cd6bd8b419fb7a08ccd7d4cab.png

为了解决这个问题,作者提出了或许可以设计一个专门的 ML 运维平台,去减少一些工程师的重复性劳动。

例如平台可以轻松地维护不同版本的数据集和对应的模型,帮助工程师进行代码审查,以及完成后续在线生产环境中实时的指标监控。

同时平台最好也能支持多个数据集或多模型并行训练、开发和部署的能力,从而减少工程师浪费的重复工作,帮助他们直接获取一个想法的端到端收益。

受访者 P18:产品的指标是会随着公司规划而变化的。也许之前公司关心的是多少收益率,但现在可能他们更希望有更多的装机量。公司和产品的目标一直在变,如何将其量化为模型的指标也是一个问题。

在本文的最后,小编打算分享一下受访者 P1 大哥的几个让我感同身受的案例。P1 是一家大型公司的机器学习管理者,他在论文里分享了许多工作中遇到的轶事。

受访者 P1:我记得有一个 PR,它添加了许多数据增强相关的代码和资源。但如果不是当时有人在代码审查中因为好奇随手点开了数据加载的源码,之后几乎不可能发现其实数据中的 ground truth 被翻转过了。如果这个问题没被识别,那么也许最后模型的准确率只会稍稍下跌。

受访者 P1:还有个例子,我们的 AI 团队花费了大量的精力和成本用于优化模型,但是最终产品的表现却几乎没有什么提升。所有人都很沮丧,直到一个非 AI 团队的人在工作流中调整了一个不影响模型的参数,这个产品的运行一下子变得顺畅很多。没有人知道为什么。

受访者 P1:很多人在做机器学习的时候都声称他们了解原理,知道为什么要做某件事,并且为什么它有效。但事实上人们只是通过直觉尝试了所有的东西,然后补充了一些好听的解释来让别人相信他确实是有效的。因此我产出最多的同事往往是那个实验速度最快的人——他总是在做实验,什么都尝试。

2f981aa7e86762c153e195f5e99db689.png

卖萌屋作者:天于刀刀

注重 WLB 的工业界反卷斗士,未进化的 NLP 咸鱼一条。专注于研究在各个场景中算法模型的落地情况,希望自己编写的算法有朝一日可以改变世界。目前的兴趣点在于:假新闻检测、深度学习模型可解释性等。

作品推荐

1.腾讯薪酬改革来了!晋升≠加薪?员工到底为何工作?

2.从 Google AI 离职了,这里让我爱不起来

3.百万悬赏!寻找“模型越大,效果越差”的奇葩任务!

4.想通这点,治好 AI 打工人的精神内耗

c9b2d44cf12ac6b943d49f2c2874e104.jpeg后台回复关键词【入群

加入卖萌屋NLP、CV、搜广推与求职讨论群

38a72dd9cb391f3a84c47e135cbca3d0.png

[1] [Twitter] Operationalizing Machine Learning: An Interview Study, https://twitter.com/sh_reya/status/1572273917640970241?s=21&t=aSP2MK4BndRVjpQAEvYLeQ

[2] [Paper] Operationalizing Machine Learning: An Interview Study, https://arxiv.org/abs/2209.09125

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

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

相关文章

nodejs 获取cpu核心数量_用 NodeJS 充分利用多核 CPU 的资源[每日前端夜话0xCB]

每日前端夜话0xCA每日前端夜话,陪你聊前端。每天晚上18:00准时推送。正文共:1558 字预计阅读时间:7 分钟作者:Nick Major翻译:疯狂的技术宅来源:coderrocketfuel介绍单个 Node.js 程序的实例仅在一个线程上…

程序员面试金典 - 面试题 16.20. T9键盘(数组)

1. 题目 在老式手机上,用户通过数字键盘输入,手机将提供与这些数字相匹配的单词列表。 每个数字映射到0至4个字母。给定一个数字序列,实现一个算法来返回匹配单词的列表。 你会得到一张含有有效单词的列表。映射如下图所示: 示…

胃部不适,原来好辛苦!

这几天胃部都感觉不舒服,那种感觉很难形容,总之就非常辛苦,无胃口,浑身都不舒服,可能是之前几天早餐没吃饱,有几天很晚才入睡空着肚子的缘故吧,原来胃部不适是如此辛苦的,怕怕&#…

重磅!顶级一区期刊官宣:明年起将不再拒稿!

源 | 青塔学术、量子位等颠覆科学出版的“游戏规则”?10月20日,国际著名生物学综合期刊eLife官方宣布了一个重大决定:从2023年1月31日起,所有经过同行评审的文章,eLife都不会作出接受/拒绝的决定,而是直接发布在其网站…

EM(期望极大化)算法及其推广

文章目录1. EM算法2. EM算法收敛3. EM算法应用4. EM算法的推广5. sklearn.mixture.GaussianMixture概率模型有时既有观测变量(observable variable),又有隐变量或潜在变量(latent variable)如果概率模型的变量都是观测…

GridView 中添加删除确认提示框

在GridView中我们可以直接添加一个CommandField删除列来删除某行信息。但为了避免误操作引起的误删除&#xff0c;在删除操作者让操作者再确认下&#xff0c;完后再进行删除。 首先我们给我们的GridView 添加一个模板列&#xff0c;如下&#xff1a; <asp:TemplateField He…

终于有人喊出来:论文一稿多投是作者的合法权利!

文 | 马建平&#xff0c;三峡大学学报编辑源 | 现代出版一稿多投目前已演变为许多作者一种常态化的投稿方式。针对一稿多投现象&#xff0c;舆论似乎是一边倒的反对和谴责之声&#xff0c;认为它浪费了极为稀缺的出版资源&#xff0c;扰乱了报刊社正常的出版秩序&#xff0c;是…

python中pop用法_Python dict pop()用法及代码示例

Python语言为几乎所有容器(无论是列表容器还是集合容器)指定了pop()。这篇特别的文章着重说明Python词典提供的pop()方法。这种方法对于经常处理字典的程序员很有用。 用法&#xff1a;dict.pop(key, def) 参数&#xff1a; key:必须返回并删除其键值对的键。 def:如果指定的键…

桩训日记

2007年2月7日 弄了一天的模拟练习&#xff0c;挺累的&#xff0c;明天估计是练习 起步停车2007年2月8日 上午起步停车&#xff08;年龄挺大的李教练&#xff09;&#xff0c;临近中午开始倒库&#xff08;挺帅的尹教练&#xff09;&#xff0c;下午继续倒库&#xff0c;基本茫然…

LeetCode 912. 排序数组(10种排序)

文章目录1. 题目2. 解题2.1 插入排序2.2 冒泡排序2.3 选择排序2.4 希尔排序2.5 归并排序2.6 快速排序2.7 堆排序2.8 计数排序2.9 桶排序2.10 基数排序3. 复杂度表1. 题目 给你一个整数数组 nums&#xff0c;将该数组升序排列。 示例 1&#xff1a; 输入&#xff1a;nums [5,…

顶会审稿人谈论文中稿“潜规则”

科研论文&#xff0c;不同于毕业论文之处在于——科研论文是根据有价值的生产实践或科研课题写作的&#xff0c;具有原创性和独到性的论文。在学术界&#xff0c;有人写论文是为了升硕士&#xff0c;升博士或者研究生博士顺利毕业。毕竟在学术界论文是工作和科研水平的直观体现…

python asyncio_如何使用Python中的asyncio?

【51CTO.com快译】Python的异步编程功能(简称async)让你可以编写不必等待独立任务完成就可以完成更多工作的程序。Python附带的asyncio库为你提供了使用async处理磁盘或网络I/O、无需其他方面等待的工具。 asyncio提供了两种处理异步操作的API&#xff1a;高级和低级。高级API用…

程序员面试金典 - 面试题 08.05. 递归乘法(位运算)

1. 题目 递归乘法。 写一个递归函数&#xff0c;不使用 * 运算符&#xff0c; 实现两个正整数的相乘。 可以使用加号、减号、位移&#xff0c;但要吝啬一些。 示例1:输入&#xff1a;A 1, B 10输出&#xff1a;10示例2:输入&#xff1a;A 3, B 4输出&#xff1a;12提示: …

最新整理完成

终于把主站做完了&#xff0c;用了一个小型的cms系统&#xff0c;因为买不起asp.net的空间&#xff0c;而且因为买的时候没问清楚&#xff0c;后来才知道限制cpu4%以内&#xff0c;才知道频繁的server unavaliable是多么的痛苦。我现在把修正后的新闻系统重新提供下载&#xff…

PromptCLUE:大规模多任务Prompt预训练中文开源模型

简介PromptCLUE&#xff1a;大规模多任务Prompt预训练中文开源模型。中文上的三大统一&#xff1a;统一模型框架&#xff0c;统一任务形式&#xff0c;统一应用方式。支持几十个不同类型的任务&#xff0c;具有较好的零样本学习能力和少样本学习能力。针对理解类任务&#xff0…

JS基础知识总结

前几天在网上看到的一个总结&#xff0c;觉得挺好的&#xff0c;所以记录了下来&#xff0c;以备查用。1 创建脚本块 1: <script language”JavaScript”>2: JavaScript code goes here3: </script> 2 隐藏脚本代码 1: <script language”JavaScript”>2: &…

程序员面试金典 - 面试题 10.02. 变位词组(哈希map)

1. 题目 编写一种方法&#xff0c;对字符串数组进行排序&#xff0c;将所有变位词组合在一起。 变位词是指字母相同&#xff0c;但排列不同的字符串。 示例: 输入: ["eat", "tea", "tan", "ate", "nat", "bat"]…

python3.7安装wordcloud_Python中的wordcloud库安装问题及解决方法

今天下载wordcloud的时候出现了很多问题&#xff0c;在此总结总结 1.问题一&#xff1a;You are using pip version 19.0.3, however version 20.0.2 is available…问题解决方法&#xff1a; 打开cmd输入如下命令 python -m pip install -U pip 2.问题二&#xff1a;error: Mi…

互联网最值得加入的173家国企汇总

文 | 重庆搬砖喵、王二源 | 知乎今年的就业形势&#xff0c;实在是严峻。社招都这样&#xff0c;更别说应届生。虽然有一些垃圾国企&#xff0c;但仍然有非常多值得考虑的国企&#xff0c;毕竟优质的国企很稳定&#xff0c;不会像互联网一样担忧年纪大被裁员的情况发生&#xf…