机智的叉烧

目前尚属新人,看到的比较少,但是工作了接近一年,大概知道自己和大佬们的差距在何处,这些其实就是自己不足的地方。来一份自己目前比较高赞的总结:

ML&DEV[8] | 算法在岗一年的经验总结

下面部分内容可能不局限在 NLP 上,而是整个算法圈子工程师的竞争力体现,当然还有针对 NLP 本身的。

现状

现状先说说现状吧,从我 18 年两次校招(额,比较久远了)来看,很多有竞争力的应聘者已经具备基本模型的理解和开发能力,说白了就是算得上“算法工程师”的选手,对认识的模型基本有一定的见解,开发能力虽不如专业的后端、服务端高手,但是学学也是能写几行实现代码,完成实验。所以说自己模型理解有多厉害,多会写代码其实都不能称为所谓的优势,毕竟这些方面不及格的人,其实在这行找到工作都非常困难。

问题的解决能力

问题的解决能力大部分入门的算法都容易把精力集中在模型上,无论是理论还是实践,但是却背离了算法本身所依托的背景。作为工程师而非科研人员,其核心价值在于解决问题而非研究模型,当一个问题能使用简单的规则策略去解决的时候,我们并不应该使用训练时间长、结果不可控、效果风险不明确的模型作为解决方案。

举例子,客服机器人大家都知道,对于算法而言可能就会开始看文本生成、对话机器人的知识了,但是实质上,一个“触发词-回答”的词典就能达到初版上线要求。命名实体识别在很多场景其实没有标注数据,模型根本无用武之地,语言模板规则、词典最大逆向匹配都是很好的方法,不必纠结于模型。

另一方面,解决问题的能力还要体现在逆境上,数据不全、数据质量不高、缺乏训练数据的时候,你要提出你的解决方案,尤其是在新项目下,这种场景很常见,能开天辟地的往往是高手,你具备这些能力才能够进一步进阶,除了研究模型本身,多想想类似“万一有 XXX 情况,这个方法还是否可行,不可行怎么办。

记住,用户对实现方法的高端低端是没有任何感知的,老板也是。

模型的优化能力

算法工程师的工作看着很简单,问题一来加模型调结构上线。

但问题是,如果模型效果不好,你该怎么办?换一个模型,调参?基本也是差不多的效果,大家看论文其实可以看到,在论文里模型的提升基本不会超过 10 个点对吧,所以换模型只能存在于微调中。那你就没辙了?这就是体现算法工程师优势的能力所在。

你可以:看看数据质量、数据量怎么样要不要提升。看看特征是否足够表征个体。标注是否正确。模型特性是否符合问题(例如 RNN 和 CNN 的适用场景)等等。

尤其是在 NLP 领域,整体非常黑盒,整个模型的流程相对固定,基本没有什么干预措施,所以你的选择会变得更少,如何能进一步提升结果,(新增人工特征、优化数据集、优化模型等)这个需要的是你的智慧和经验了。

顺风局谁都会打,逆风局如何化腐朽为神奇才是高手该体现的能力。

工程能力

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

  • 你的算法耗时多少,是否具备多线程的能力。(例如一般而言 RNN 系列模型的耗时都偏长)
  • 算法如何部署,在线部分特征怎么构建和传入。