文 | 夕小瑶
从不拖稿的小夕今天在知乎上刷到一个问题:
哈?一向求真务实、高逼格讨论的知乎画风怎么突然就不一样了。
我以为回答区会有这张图:
▲如来神掌
结果竟然没有!知乎果然没有让我失望,还是一如既往的认真、严谨、有逼格。咳咳,作为一枚知乎算法圈的老司机小可爱,感觉自己有必要来添砖加瓦一下。
相信我,深刻理解数据的重要性与数据构造&迭代&使用技术,你会从算法小白突飞猛进到即将入门!(认真脸
首先贴出我的算法工程师升级打怪路线:
- 最菜的算法工程师靠调学习率
- 次菜的算法工程师靠试新模型
- 合格的算法工程师会懂得做数据
- 不错的算法工程师还会用新paper优化实际问题
- 优秀的算法工程师能数据、模型、策略joint design&iterate
- 顶级的算法工程师能颠覆行业方法论
仅供参考,请勿对号入座! 尤其是正在看本文的技术leader们,不要将自己的小弟对号入座,毕竟从1到6的形状是个倒金字塔╮(╯▽╰)╭
其实从这里可以看出,1和2其实大部分实习生和应届校招生都能做到,而3就是完成学校->工业界的重要转折点,也就是做数据。
关于数据
学生思维中的算法工程师日常可能是这样的:
天上掉下来/老板拍过来/网上download下来一个训练集、测试集,然后我开始调模型&调参,调好了就上线了。
尤其是那些整天吹嘘算法岗门槛低,以为跑个BERT刷个榜单就入门了nlp的人,不是学生就是半路转行的调参侠。
当你开始意识到数据的重要性了,不敢说技术突飞猛进吧,至少可以承认你马上要入门这一行了。比如你开始有以下意识:
- 嗯,我不能只关注离线测试集指标涨不涨,我还要判断测试集靠不靠谱,包括采样/数据分布的线上一致性、时效性、标注正确率、评测方差/置信度等。
- 嗯,我不能对着同一个测试集做大量没道理的炼丹,比如暴力调参、疯狂改随机种子、暴力乱加策略、暴力魔改、暴力增删改查等。我知道大量的无意义超参调整,只会变相的让模型用超参过拟合这个测试集。最终结果往往是,向上汇报猛如虎,线上用户用脚投票。
- wok,准确率从90%一下子涨到99%了!肯定不是我nb,绝对是出bug或者标签泄漏了!
- 嗯,新老方法都有其存在的意义和发挥作用的阶段,都是不可缺的。
- 嗯,从1到2与从0到1的解法有很大区别。
就至少跟200元/天的实习生划清界限了。。。
那么,具体来说,做数据具体要怎么做呢?或者说需要积累哪方面的能力/经验呢?
简单来讲:
- 标注标准
- 采样策略
关于标注标准,这其实是个比较吃业务经验的事情。
真实的业务场景数据是非常dirty的,即使是情感分类这种看起来非黑即白的NLP任务,在流量大的真实业务场景中,都会面临大量的边界样本和人都要分辨半天,甚至需要足够学历、阅历才能分辨出情感极性的样本(想象一下知乎评论区那些“阴阳怪气”的评论,可能你都不知道对方是在骂你还是夸你)。
此外,哪怕是同一条样本,同样的分类任务,业务场景稍有变化,那么你期待的标签可能会完全相反。比如,句子“oppo最新款手机多少钱”与句子“vivo最新款手机多少钱”的文本相关性,在搜索场景,就是妥妥的负例,因为用户的出发点是获取真实知识,你如果给用户返回vivo的价格,那用户会有一种被欺骗感。
但是,在搜索广告场景,却完全可以作为正例,因为本身vivo和oppo的大众认知相对比较近,用户在搜索广告场景的出发点可能是买一部不错的安卓机,并且用户觉得oppo可能是不错的选择,那这时候你给出vivo的信息,用户往往不会反感,甚至可能因为发现vivo更合适而下单。
当然了,这种品牌实体的替换导致的文本相关性结论并不是永久成立的,比如同样搜索广告,用户问“劳斯莱斯最新款多少钱”,结果你出了一条“五菱最新款价格”,那用户就会感觉受到了侮辱。。所以深刻理解具体业务场景的优化目标,对于制定正确的标注标准是十分必要的。当然,标注标准很大程度上取决于产品标准,而你就是要将这个产品标准深刻理解且转变成众包平台人员也能轻松看懂的标注标准。
一旦标注标准导向错了,坐拥百万标注数据和100层的预训练模型也可能原地踏步。相反地说,如果标准做得好,那将大大提升标注数据的有效性,每周新返回的标注数据带来的增益可能比你花式炼丹一个月都来的有效。
关于采样策略,这个则同时跟业务目标、技术选型与模型水平相关,在不同的场景有不同的策略。
比如你到了要端到端解决问题的阶段,又能做到大规模标注,那可以考虑直接对齐线上真实分布做同分布采样+端到端标注。但是大部分复杂业务,往往是pipeline的方式,则要考虑对齐上一级分布。涉及到具体场景和阶段时,又会根据这个大原则去微调采样策略,比如精排问题中如何mining负例,多路召回时如何采样来优化下游粗排等,在真实分布的基础上做些微调同样可能带来肉眼可见的提升。
除了标准和采样问题外,数据问题上还可以组合大量预处理策略和训练策略,耦合上模型的特点和输入分布偏好,又是一波空间。总之,在当前的大框架下,数据空间往往比模型空间大得多,这也是当下算法工程师炼丹水平高低的一个重要分水岭。
更进一步
说完了倒金字塔最重要的一层,我们继续往下深入。
3到4的过程相对来说不是很难。如果你有刷paper的习惯,配合着高手速,脑子别太笨,那剩下的20%的疑难问题你也能解的七七八八了。即使不怎么刷paper,在靠谱的算法团队里苟着,通过耳濡目染也能get到不少求解疑难算法问题的高端姿势(误)。能做到这一步的,在大厂核心团队里也称得上不错了。如果再有一些软实力加成,至少不会担心没人要。
而4到5的过程,则需要一些顶层设计能力和工作年限积累。首先要做有挑战性的大业务,那些挖个字典、跑跑textcnn、finetune下BERT就完成目标的业务,说难听点都是demo,至少算法肯定不是这个业务的核心竞争力。当然了,这种挑战大的场景主要集中在搜索、推荐、广告等核心赛道上,顶层设计能力纯靠聪明、看paper和小打小闹的业务是学不来的。怎样的策略方案会预期达到怎样的业务效果,消耗多少成本,有哪些风险,甚至这个事情当下能不能做,应不应该做,前置环节是什么,下个阶段要做什么等,这些问题都要有足够的判断力。毕竟,哪个老板愿意拿着几百上千万的年薪让你去他的命根子业务上成长试错呢?
而5到6的过程,多拍脑袋吧,也需要环境、机遇。如果你做到了,记得回来留个言,给小夕留个好友位。。。