机智的叉烧 - 工作经验

reference:
机智的叉烧:https://www.zhihu.com/column/c_127266200
厂妹:https://www.zhihu.com/question/264459321/answer/1229259352

1. 算法工程师的工程能力

工程能力,对于一个算法/策略需求,你能从无到有地建立好模型/设计好策略,并将其投入实际应用,包括后续的监控迭代的能力。包括:

1) 数据的操纵能力
一个是,懂得数据的操作,能够规范化,整理成模型需要的格式,甚至包括写SQL,确认数据的来源等等;第二个层面,能够更高效的完成上面的功能,你需要有一定的算法常识,找到操作的空间和时间复杂度尽可能低的方法,从而让程序更加高效的运行。

2)模型的设计与开发能力
模型的优化能力不仅限于模型选择和架构调整。还可以:

  • 看看数据质量、数据量怎么样要不要提升。
  • 看看特征是否足够表征个体。标注是否正确。
  • 模型特性是否符合问题(例如RNN和CNN的适用场景)等等。
    尤其是在NLP领域,整体非常黑盒,整个模型的流程相对固定,基本没有什么干预措施,所以你的选择会变得更少,如何能进一步提升结果,(新增人工特征、优化数据集、优化模型等)这个需要的是你的智慧和经验了。顺风局谁都会打,逆风局如何化腐朽为神奇才是高手该体现的能力。

模型和非模型的权衡:

模型不是尽善尽美,规则也不是,两者的有机结合才是更好的解决问题,模型能覆盖大部分的情况,规则再根据一些特定的问题进行快速解决,此后,规则可以尽可能抽象逐步融到模型里面去,例如一个根据某些性质做的if else可以通过特征的方式加入模型,一些根据用户行为历史的方案,可以通过特定的特征积木加入到模型中,例如用户点击序列可以转化为word2vector特征,但另外规则词典的维护仍要保持,对于在线的风险状况,我们仍然能通过这个角度来快速控制,整个系统能稳定高效地运转起来。模型和非模型,是存在桥梁,互相转化互相补充的。

走出自己的路:

新旧、强弱方法兼容并包,深入理解内化于心。因地制宜,根据方案综合选择方法。要能因地制宜的前提是,对“地”有充分的理解,即问题的理解能力。说个例子(首先说明没有黑的意思),很多人可能会吹说阿里提出的推荐系统模型很厉害,说实话是真的厉害,能考虑用户各种行为特点,表征后用于ctr预估等问题下有很好的效果,于是很多人开始用,然而很多人可能会说效果不好,经过一些讨论发现,其实效果不好不一定是阿里的结果小动作,更多的其实在于很多场景对应的用户,不具备这些行为,或者用户数量不足,导致这些行为特征没有体现,或者说当前产品的主要问题不在这种特征下,那用这个模型、用这个特征提取方案没用不就很正常了吗。看完这个例子反思一下,我们在解决一个问题之前,有没有对问题有充分的理解,有没有对想用的方法有充分的理解。

工程考量:
这个概念有点模糊,简单举几个例子吧:

  • 你的算法耗时多少,是否具备多线程的能力。(例如一般而言RNN系列模型的耗时都偏长)
  • 算法如何部署,在线部分特征怎么构建和传入。
  • 你写的算法复杂度多少,有没有优化空间。(例如用Trie树代替便利词表实现检索功能)
  • 模型的更新是热更新还是需要重启服务,生效时长等。

3)项目的部署和监控能力。
模型做完了,要上线,这里的上线,危险程度就会提升,所以过程也就会根本更加谨慎。

对于模型,是否有不可容忍的bad case。
上线流程是都规范,如果是大项目,你的模块的更新是否会对有关模块产生影响。
AB实验,实验的目标、内容以及检测的内容。
检测线上是否有问题,检测内容。
线上有问题后,是否有可马上回滚的方案。
埋点,一方面确认你的程序正常运行(监控),另一方面记录必要的数据,方便日后还可能要使用(迭代)。

2. 算法工作一天都要干什么

https://zhuanlan.zhihu.com/p/95922161

很多人可能再想想着每天在研究模型,看论文,实现模型之类的,这方面虽然非常重要,但是实际上并非如此。每天这些时间会花的更多:

和产品沟通,技术方案设计。
数据层面花费的时间最多。
需要什么样的数据。
写SQL。
检查数据质量,空的、错的、不合法的。
特征工程。
有监督学习,需要标注数据,怎么标,标注本身是否可靠。
模型选择与开发。这块可以这么说,随着工作经验提升,这块时间会越来越少。
模型选择的话,把问题抽象出来,其实都比较好选,第一版模型一般是业内基线或者最简单的模型,像我,二分类先搞LR(logistic regression),序列标注就是CRF。
模型开发也基本不耗时,LR和CRF之类的其实都有现成的东西。
结果分析和诊断。
评价指标设计。
分析上述模型是否生效。
不生效的原因是什么。
怎么解决。
模型层面还是规则层面解决。
解决方案的影响面是多少,会不会导致出现新的问题。
上面都是自评,可能还要交给测试、产品之类的评价
工程化上线。
模型上线,需要特征生产、AB实验、部署之类的操作。
如果你熟悉在线跑的代码,例如Java、c++之类的,这块的时间会比较少。
提测,提交给测试人员测试。
评估上线。
这是一个算法工程师基本的工作内容,当然的,会随着你的业务不同会有一些不同,但是点上都是一样的。

特别的经验
工作也一年了,有一些比较有意思的经验。

规则应该首先使用,保证高准确,模型后续补充来提升泛化能力。
模型不求高端,只求实用和稳定。
与科研不同,很多时候科研只关注召回准确之类的指标,但是在现实应用下还需要考虑耗时、内存之类的因素。
把自己做的东西尽可能工具化,哪怕是保存下来,日后可能还会用。我也举几个例子。
日志工具。
mysql登录工具。
数据清洗工具,删标点,拼音转化,繁体转简体等。
特征工程的操作要多学学。有的时候对这些操作的理解依赖于你的数据敏感性。来举几个例子吧,这些都是在我工作的现实应用中有遇到的。
为什么数据有的时候要取对数。
调和平均、算术平均等平均计算有什么本质区别。
归一化有什么用,行归一和列归一。
不懂的问题,过一遍百度、谷歌、github、知乎再说。
坚持看论文,也别忘了最好还能看看源码,有大量的东西在论文里面不会提到,只会在源码里面体现。
复盘,会让你的经验更不容易流失。俗话说好了伤疤忘了疼,为了避免踩过的坑不再踩,必须经常进行复盘。
快速学习,工作导向,干完活后续整理的时候再来完善系统的学习。
严谨点说吧,干活的时候本想着高大上。
时刻记住,你做每一件事情的目标。
说几个细节经验吧。
CRF++的线程不安全,主要因为很多中间变量都会存在CRF自己的model类里面,所以要保证线程安全,必须把计算过程的中间变量保留在特征类里面,不能放在模型类里。
另外解决线程不安全的方法,还有一个比较丑的操作是创造和线程数一样多的模型,这样能解决,但是内存就会成倍增加。
LR、CRF之类的计算耗时都不长,RNN系的耗时会比较长,甚至比transformer还要长。
善用数据结构,能让你的计算效率成倍增加,近期的经验就是trie树和最大逆向匹配。
留意内存泄漏、内存复制之类的问题。
libsvm格式存稀疏数据。
mapreduce操作大数据量非常方便,可以经常用。

3. NLP工程上的地位和难点

NLP有哪些落地应用方向?

搜索:Item内容理解、Query理解、检索召回相似文档、还有text2sql 等;推荐:用户embedding、商品embedding。item的标题,描述,评论都是文本,user2vec,item2vec都是NLP方法,很多应用场景;问答:客服,FAQ,语音助手(尤其与智能硬件上),百科问答(知识图谱),闲聊,专业领域问答,记录与提醒;舆情:情感分析,热点分析,热点预测,预警监控;风控:聊天室广告屏蔽,黄赌毒内容审核,脏话过滤;信息抽取整理:各种UGC内容tag提取,主题分布按主题归档,政策惩罚抽取,法律判决抽取,公司主权结构抽取等;写文章,翻译,阅读理解:辅助新闻写作,广告文案生成,不同语言翻译,不同风格翻译,生成一大堆文档抽取主要事情;语音识别:这不用说吧;推理:法律知识图谱罪行推断,疾病知识图谱并发症推断,商业事理知识图谱等;预测:购买预测,点击预测,热点预测,爆款预测,疾病预测, …基于上面这些构建用户画像,感觉都以预测一下。

在我看来,目前nlp主要承担语义理解方面的功能,文本分类、实体识别、语义相似度等是我们目前最为常用的工作,他在很多大系统中有稳定的一席之地,如搜索(理解query含义)、推荐(理解文档内容)、对话(理解用户需求)等场景

至于难点,我列举一下:

  • 很多场景下数据其实并不支持我们使用模型,数据量问题、数据质量等。
  • 工程性能上,可能会不允许我们使用太过重型的模型,bert之类的真不是谁都跑得起、训的起的。
  • 由于调研时间不定,很容易成为团队项目安排上时间拖后腿的角色,尤其是NLP这种黑盒性比较强的任务上。
  • 边缘case更加多又更突出,如“我想过过过儿过过的生活”,这种case非常常见。

然后一一来对应上面难点,提炼出我们需要的能力:

  • 无模型或轻量模型下解决问题的能力。(12)
  • 工程上举一反三的能力。(3)
  • 任务的取舍能力与安排能力。(34)

4. 搜索的流程

系统架构本身比较复杂,说白了就是要协调上面各个工作的合作模式,使他们更好的工作,更加高效。

  1. 分析query:
    理解用户在搜索框里面输入的query — 涉及文本分类,多任务

  2. 在数据库里召回答案库:
    数据库里面肯定已经有处理好的各种数据了,这里的处理用的是大数据技术,其中一个解决方案就是hadoop全家桶。
    Elastic search,一种搜索引擎。我的理解是一种查询优化的工具,专业说法就是索引建立工具,数据库之上需要这么一个东西加入搜索。

  3. 排序:
    在这些数据库查到了很多结果,爱奇艺电影,腾讯视频网剧,下面还有豆瓣评论,然后我们就要对这些结果进行排序了,这里涉及热度,用户点击率,文本相关性多个因素,通过机器学习的方法实现算分和排序。
    排序TopN答案: — 训练一个y = f(x),有一个输入x,一个输出y,输入是条目,输出是每个条目的排序打分。

  4. 展示结果给用户

5. 搜索系统中涉及的算法问题

https://zhuanlan.zhihu.com/p/95921738

6. Query理解和分析

https://zhuanlan.zhihu.com/p/136313695

query理解是整个搜索系统中最上游的一环,负责的是从query中提取信息,从而了解用户希望通过这个query搜索出什么query理解,决定了下游的搜索召回策略。底层数据从技术上,有各种类型的数据库需要检索;从算法策略上,也有多种召回的方案,例如高准确的、高召回的等等,要用什么策略,这要取决于query理解的结论。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值