科研和落地之间的差别
每天给你送来NLP技术干货!
对我们领域比较熟悉的朋友多少都会发现,科研和技术落地之间,是存在很大gap的,很多科研里面聊的红红火火的东西,到了现实应用的时候,就会有各种各样的问题,甚至最近在知乎里也有类似“你是什么时候对深度学习失去兴趣的”之类的问题,适逢国庆假期,就来聊一些轻松的,来探索这种差别背后的逻辑以及我们应对的办法。
叠个甲,这里会指出论文中可能存在的缺点,有点扎心,求大家轻喷。
科研和论文的特点
首先,科研,从论文角度,有一个很难避开的槛,就是创新,如果一个研究不够“新”,是没有发表意义的,所以很多研究者,包括学生时代的我们,为了发论文,会绞尽脑汁的去思考创新点,方案思路要创新,最后的预测效果也要有提升,这个思路其实没什么毛病,毕竟科研就是要探索,有尝试性的创新才会推动整个领域发展。
其次,科研是更关注优点的,一个是优,一个是点。所谓的优,强调的是,需要比原来的方案优秀,这就是所谓创新所需要围绕的关键,而隐含的另一点,却是个问题,那就是这个“点”字,科研并不要求全面领先,而只要求在某个方面优于原有的方案,例如现在我们领域里非常关注的一些效果指标,准确率、AUC、相关系数等,这会导致,为了某个方面的提升,而牺牲了其他方面,例如预训练模型需要牺牲性能等其他问题,这是论文很难避免的局限性;另一个角度,有些问题,可能已经被发现并且已经解决,但是因为这些指标不高,很可能就发表不了,毕竟指标没有提升,这个没有提升不见得是因为方法不够好,而是这个数据集或者指标不能体现这方面的优势,又受限于这些所谓的标准数据集,其实就很尴尬。
第三,这是人群导致的问题,科研人绝大部分来自在校的老师,甚至是学生(帮老师审过文章的都懂),这一批人有一个比较尴尬的局限性,就是很少有经过特定领域的实践经验,这导致他们很难发现一些落地场景下遇到的问题,取而代之的,更多是关注指标的提升,于是开始千方百计尝试各种方式来提升这些指标,当然这种方式的优势是有的,毕竟能进一步探索模型在某个方向上的极致,但缺点同样明显。
科研在落地上存在局限性
因为上面的问题,科研成果在落地的尝试中,是存在一定的局限性的,这些问题最直接的,是可能会导致这个方案无法落地到现实场景的。
就以我现在关注的比较多的NLP领域而言,大部分的研究,尤其是比较成熟的领域,都非常关注开源数据集及其对应的和准确相关的指标,如果开放数据集下的指标没有提升,注意只是没提升而已,根本无法发表。但是在现实的技术中,一方面,我们不会遇到很标准的数据集,数据里面被下了一堆毒,需要清洗和优化,另一方面,我们并不只是关注最终的准确与否,还有很多落地的限制,这是论文里所没有体现的。
先来聊聊数据,之前其实我有在一篇文章里面聊过(心法利器[68] | 数据指导技术优化与提升),数据集其实是在牵引技术发展的,在现在大部分人其实都在追分,追分的同时大家其实会研究各种数据内存在的问题,如果数据内存在迫切需要解决的问题,则指标的提升其实非常有效,然而如果是只追这些分,就会忽略很多其他的问题,用我们算法的说法,其实就是“过拟合”,只关注眼前的数据集了,甚至数据集里面一些标错的样本,也会被模型学到,从而使得指标提升,这就不健康了。另外,所谓的分,如果没有关心到一些现实场景其实很重要的东西,就会出现梦想很丰满,现实很骨感的情况。
再者,科研的创新往往是比较细小的一个点,追求某一个方面的极致,而现实的落地,需要关注的东西会更多,在保证综合可行性是最根本的,耗时、内存不达标,那就是上不了,这点是无法考虑的。
算法工程师该怎么看论文
科研上因为一些客观因素,确实会存在一些问题,但是,我们借助论文进行学习,是非常有效的,主要是这几个原因:
科研所代表的是最前沿的东西,好坏是需要多次试验验证的,但是新的想法总归会和我们产生碰撞,产生新的想法。 论文前面的文献综述和介绍,能把目前相关领域的情况给解释清楚,我们通过学习,其实能了解到更多方案。 最终的实验,其实仔细看里面的数据,能了解各个方案的差异,也可以为自己进行方案选择提供参考。 那些经常被用来当靶子的方案,很可能是非常靠谱的。
因此,我们还是需要进行论文阅读。那么,论文的过程,我们需要注意些什么:
有关论文的核心亮点: 明确该篇论文的创新点以及创新点的来源和思路历程。 该方案可能的优点和缺点。 对应领域的研究现状,看哪些论文工作会被提到最高,后续有机会也读一读。 关心一下现在的科研现状,大家所在的领域都在关心什么问题。 实验结果,看和现在主流方案的优化程度。
如果能吸收这些东西,其实一篇论文我们就算啃的比较干净了。
如何从论文到落地
如果我们开始有想把论文的一些方案用在现实场景中,因为实验是场景和应用场景终究存在一些差距,我的建议是考虑以下几个问题:
明确目前的方案的短板在哪里,是否明确。而论文方案是否对症。 论文方案的缺点是什么,这个方案的缺点是否会影响到自己的最终实施。 例如耗时、内存之类的要求,最好提前试试,这个类型的缺点,很可能不会提及。 仔细分析论文中使用的数据和方案,和自己的数据是否有差距,是否很大,越大,用起来没什么用的风险更高。 确认好自己的数据,一些类似数据质量之类的问题没解决之前,最好不要考虑太前沿的方案了。
然后就是自己尝试重现并利用了,一般地自己都会有一个比较标准的pipeline进行训练和效果评估,一般会比较快速有一个结论,然后就可以开始考虑部署上线了,这个流程反而是比较快速的,难的是前期的预判,后续的效果和上线前的评估。
我的想法
我的个人想法吧,现实应用本身不是一个炫技的舞台,考验的更多应该是我们解决问题,最终提升效果的能力。论文中能够提炼出很多对我们有现实应用意义的想法,不应不由分说地接受或者拒绝,应该从实际出发来判断是否合适:
现在的主要问题就是模型方面的问题吗,数据质量和数量是否有问题。 如果质量和数量都有问题,那其实换谁来差距都不大。 甚至,换了更复杂的模型,有些错误被模型学了去,指标上看不出来,后患无穷。 大模型的性能问题,真的不得不防,已经看了不少人在这踩坑了,可依旧前赴后继。 KPI导向和晋升导向,能理解,但是优先还是要解决关键的指标问题后再来考虑炫技,否则只能是花拳绣腿了。
但是使用和了解又是需要分开来看的。平时的学习,是需要我们了解更多的方案,以便我们在真正解决问题的时候能多点选择,但是在使用的时候,实事求是,从简单和实用出发,才是最扎实的。
微信扫码关注该文公众号作者