对新技术保持好奇和开放的心态

在中文纠错任务上,目前的最好模型是利用最新的技术得到的。随着年龄的增长,多数人会趋向于利用经验去解决问题,这并没有什么错,很多时候或许正是自己价值的体现。但是对一种技术思路不要保持固执的心态,比如较早的工程师可能会痴迷于统计语言模型,痴迷于专家系统等,对深度学习的一些解决问题的方式持否定意见;比如一些语言学专家始终觉得统计自然语言处理是野路子,对理解语言本质并没有实质性的帮助;比如一些物理和数学背景的同学总是觉得工程化的事情显得比较弱等。互联网行业在国内的发展历史也不过短短几十年,技术大潮的更新一波接着一波,新论文每年的几个会议累计会贡献好几万的文章,且不谈各种期刊文章。快速的更迭,意味着无限的可能性,所以没有什么不可能。虽然我直到现在还是在用vim+pdb+tmux,但是该组合是真的提高了自己的写码效率吗?不一定。视觉领域的检测问题,一定需要bounding box吗?似乎也不一定。围绕纠错任务,目前相关的技术文章多是围绕统计思路来做的,这样一定是效果最好的吗?显然也是不一定的。

我能够觉察到自己目前身上会存在一些惯性,一些偏见。虽然目前并没有导致一些成本很昂贵的错误,但是希望自己还是能够自觉,自省。所谓的技术和研究品味是一个ill-defined的问题,会带来一些偏见,一些固执,同时也会带来一些力量,但是向前看,心态开放能够保证在多数场景下不会错的很离谱。

问题和模型的深度融合

是不是会经常听到类似这样的分析,“哦,这是一个分类问题,所以,与分类相关的各种模型都可以试一波!”,“用深度模型就对了,所谓深度学习一把梭啊!”等,自认为自己是从统计机器学习的路子走过,来到深度学习的路子上的,因此在做深度学习相关任务的早期,自己也会说出一些类似这样的话。虽然多数人认为深度学习解放了传统方法做特征工程的劳动力,但是其实是劳动力转移,转移到了参数和架构上而已。和传统的一些方法相比,在参数搜索的时候,大多数情况下是没有机会做grid search的,因此参数和架构的选择就非常依赖人的经验。但是,由于多数现有深度模型训练的机器和时间成本较高,因此尽最大可能减少试错空间是重要的。

为实现上述目标,将问题和模型做深度融合是方法之一。也就是加深自己对任务的思考粒度,不要神经大条。是不是只用word embedding作为输入,不使用其他linguistic特征做为输入就可以?attention在纠错任务中到底发挥了什么作用?为什么要将attention引入纠错任务?一个sequence labeling模型是可以用于所有类似任务吗?

比如,关于attention,关于conv,关于pooling等,总会有一些general的回答,所谓“捕获全局依赖,并行性,不变性”之类等等,但是和具体任务结合上的作用才是有趣的分析,同时能够提供更多的insight。在这点上,多数论文做的显然会比较好一些。但是在一些业务模型上,多做一些类似的思考可能也是有帮助的。

case分析和模型分析

现在的tutorial,课程和各类图书等多注重技术套路和框架的建立,但是做case分析能够帮助我们建立更加准确的对问题的直觉。这里谈的case分析,简单来说,包括对数据的理解和模型输出预测的理解。在一个文本分类任务中,统计一下文本长度,不平衡比等之类的就完事儿了吗?没有。这些多是为战略选择做准备,但是一些战术结论的得出还是要依托于对数据本身的认识和把玩。比如,能够花一些时间,多去和我们要去利用和处理的对象相处一下,或许会得到很多motivation。模型输出的预测多是针对basecase的分析,比如对纠错任务而言,误报发生的多数句子的特征是啥?为什么这种特征下会导致误报?漏报又是因为什么?当然,可以说数据量少,模型规模小,上下文捕获能力弱,参数没调好等各种原因,这些确实是重要的原因,但是似乎还是并不能为问题的解决带来最直观的思考。那么,回到数据本身,多去分析一些具体的例子,无所谓cherry-picked,无所谓badcase,可能为具体的改进方向提供指引。

当然,除了对case分析之外,对模型分析同样重要,这涉及到对模型的理解。goldberg最近的一个工作就是对bert是否能够学习到一些syntactic知识做了全面的分析和讨论。多数情况下,这些工作可能耗时耗力还很无趣,但是驯鹰之前多会有一个步骤熬鹰,所谓熬鹰就是驯鹰人和鹰呆在一块儿几天几夜,二者都不休息,直到把鹰熬到自己倒下,之后驯鹰的过程就会容易一些。你的模型,你的数据就是你的鹰。

思考的习惯:快速,深入

思考的目的为求理解,什么是理解?是否真切感受到的东西是理解。这个模型很强,这个trick很能够提升效果,为什么?纵然有很多直觉上的解释,但是是否感受到了?

所谓快速,就是当同学提出一个方案时,能够直接分析方案的优缺点和改进思路。个人觉得这并不是一个单纯的“你看过,你听过”能够解决的问题,很多时候需要的是generalization而不是memorization,纵然memorization是重要的。

所谓深入,首先要能够,其次才是深入。这里就与思考的习惯相关。比如实验对比中,出了一些实验结果,那么能够对结果进行自动且深入的分析是重要的。在写论文的时候,大家的意识都很强烈,因为这些本身就是论文的重要构成内容,但是在日常的做算法过程中呢?自己之前写周报,包括看过一些同学的周报,只写实验结果,没有对结果的分析和思考。虽然可能是由于呈现的方式导致不能写分析,但是是否去深入思考过想必也是很重要的吧。

后记:

在公司写完这篇杂谈,五一四天假期也就正式结束了。期间整理了一些课程,书籍和论文的笔记。观察一些模型的训练结果。在麦家理想谷读了《霍乱时期的爱情》的一个章节。冯友兰先生的《中国哲学简史》推进了四分之一。虽然似乎越来越搞不清楚为啥要读这些书了?但是越来越觉得要读书了,反而新论文倒是觉得越来越没必要跟了。去浙大打了球,吃了饭,看了好朋友强推的神作《守望者》,睡了懒觉写了周报,一切都挺好。