我和NLP的故事

作者:裴文哲 ,北京大学计算语言学研究所硕士,就读期间在NLP领域顶会发表论文数篇,也是前WI输入法开发组成员。微博:http://weibo.com/williammed
小编: 文哲是NLP方向的硕士,短短几年内研究成果颇丰,已在顶会上发表数篇文章,令不少小硕甚至博士羡慕。但他异常低调,很谦逊,对自己的成绩没有太多的在意和满足。龙星能邀请到这样的青年才俊分享一下研究体会和求学经历,倍感荣幸。也特别希望更多的青年学子能做到同样优秀的成绩。

正值ACL录用结果发布,国内的老师和同学们又是一次大丰收,在这里再次恭喜所有论文被录用的老师和同学们!我人品爆发,也收获了自己硕士阶段的第二篇ACL论文。本来只是想单纯分享下自己中论文的喜悦,但没成想收到这么多老师和同学的祝贺与鼓励,实在是受宠若惊,在这里也再次感谢各位老师和同学,期待与大家在ACL进行面对面的交流。 我的微博发布后,龙星镖局大神发来邀请,希望我能写一篇小文讲一讲自己的研究。但作为一个小硕士生诚然没什么拿的出手的成果,思来想去,就讲一讲这几年来做NLP研究的经历与感受好了,希望能够对在国内读研的,和我同样迷茫过的同学有一些帮助。

第一次接触自然语言处理是在本科三年级的时候,那时候我在哈尔滨工业大学网络智能实验室跟关毅老师做WI输入法,当时我负责做的是拼音输入法的智能纠错功能。在这期间了解到了语言模型和隐马尔科夫模型的概念。尽管当时还没有很深入的理解其背后深刻的原理,但我立刻就被其背后所蕴藏的智慧迷住了,从此决定这就是我要研究的方向。到了大四的时候,收到了百度NLP部门实习的offer,这次实习对我的人生规划产生了巨大的影响。尽管当时已经保研到北大,但是和大多数同龄人一样,开始怀疑是继续读书好还是直接工作好。带着试试看的思想,决定先去实习感受一下。当时实习所在的部门大牛云集,包括NLP界顶顶有名的王海峰老师,吴华老师等等,各种PhD、大神就更数不胜数了。随着实习的进行,我进一步感受到了NLP的魅力,我希望有一天我也能够设计自己的模型,希望我的模型能够上线改变亿万人的生活。但理想很丰满,现实很骨感,我开始意识到自己的知识储备是多么不足。于是我坚定了自己的决定:读研

既然选择了读研,就要为读研做充分的准备。在本科毕业后的暑假,我没有选择到处旅游,而是选择把自己关在家里补充各种知识。当时看了Andrew Ng斯坦福的公开课以及Coursera的公开课,看完了大半本英文原版的《Speech Recognition and Language Processing》,看了一遍《Pattern Recognition and Machine Learning》。当然,这两本书我看完第一遍后也就看懂了其中30%的内容,所以后续读研后又读了很多遍。一直到现在,PRML我大概总共读了4遍,但说实话,这本圣经可能我到现在也只能真正理解其中60%--70%的内容。当然,这对于我来说也足够了,因为我并没有想成为ML领域的专家,所以很多内容就没有细细研究。

由于实习时受的“刺激”,开始读研时就踌躇满志一定要利用好研究生三年做最顶级的研究,所以在开学的第一天我就给导师发了封邮件,立志要在硕士期间发表一篇顶级会议论文。这个目标当时对我来说简直是痴人说梦,因为实验室的历史上几乎没有硕士生能够在读研期间发表顶级论文。在这里不得不提一下我的导师常宝宝老师,如果没有他我的目标不可能实现。在我发完那封慷慨激昂的邮件后,导师表示非常鼓励。和国内大多数的导师不同,常老师从来没有对我们的研究内容做强制规定,也从来没有要求我们去做外面的项目,相反,他鼓励我们寻找我们自己的研究方向,做自己感兴趣的内容。同时,他的学术水平也非常高,能在我遇到困难的时候给予非常细节的指导。这些外界的优良条件为后续的研究铺平了道路。

研一上的时候因为知识储备有限,所以和导师讨论了下研究内容,导师决定做Topic Model相关的内容。因为相对来讲Topic Model比较好入门。经过几番讨论后,形成了人生中第一个idea并很快完成了代码的编写,实验效果也很不错。于是在研一上学期我就迎来了自己人生中第一次投稿——ACL2013。我的英文写作能力其实并不好,当时写完论文后,导师几乎是全部推翻了重写了一遍。那时候还正好赶上过年,我深刻的记得初一的晚上,我和导师在电话里远程讨论如何修改论文。经过无数次的雕琢,我的第一篇paper《Inducing Word Sense with Automatically Learned Hidden Concepts》就这样诞生了。我兴致冲冲的投了稿,期待结果,但最终结果是:reject。论文被拒心情自然是沮丧的,我一直认为审稿人并没有理解我们论文的核心思想,于是心中怒骂审稿人。但常老师教导我无论结果如何,都要以平和的心态面对,积极修改论文。就这样,我的研一上以一篇被reject的论文结束了。

研一下的时候继续修改了这篇论文,并且随着上课和平常读论文的积累,知识量有了进一步的提升,也提出了自己的一个idea,实验效果也不错。因为上次被拒的阴影,决定先从国内的会议试试,导师也表示支持。于是写了篇CCL投了。同时和大四保研的师弟一起进一步改进了那篇被拒的论文,增加了新的模型,投了EMNLP。结果是CCL录用了,EMNLP又被拒了。迎来了自己人生中第一篇论文录用当然甚是开心,但离自己中顶会的目标还差很远,自然心有不甘。这时的心情相对来讲还是很沮丧的,论文连续两次被拒让我怀疑idea是不是真是的是有问题,以至于我开始渐渐对这篇论文失去了信心,所以也没有进一步去改这篇论文。研一眼看着就要结束了,自己还没有一个独特的研究方向,就开始各种广泛的阅读文献。就在这时我看到了深度学习的一些内容。当时深度学习的内容还没有今天这么全面爆发,我觉得这个这应该是一次千载难逢的机会,于是开始专注与深度学习方面文献的阅读。

研二上学期是欢乐的一学期。我的师兄的一篇论文被IJCNLP录用,但师兄已经毕业不能开会,于是老师决定派我去参加,就这样我迎来了自己人生中第一次国际会议以及自己人生中第一次oral presentation。会议是在日本开,各种吃喝玩乐自然就不用说了,但给我最大快感的是和同行老师、同学们交流。我感受到了出国开会并和领域的大牛们交流idea是多么爽的一件事,所以这次会议更加坚定了我要发一篇属于自己的顶会论文的决心。开会回来后趁着兴奋劲产生了自己在深度学习方面的第一个idea,基于深度学习的分词模型。当时,包括现在,深度学习在结构化模型中的应用还是很少。所谓的结构化模型就是模型的输出不是简单的分类,而是一个具体的结构。例如序列标注模型、句法分析都属于结构化模型范围内。当时阅读了大量这方面的文献,觉得既然最大熵可以扩展为CRF,普通感知机模型可以扩展为结构化感知机模型,那神经网络也一定可以扩展为结构化的神经网络模型。分词当然是最简单的序列标注模型,于是我针对序列模型的特点,提出了Max Margin Tensor Neural Network,这个工作也是受到深度学习界的大牛Richard Socher的启发。有了研一写文章的经验,这篇文章很快就完成了,当然又是几经修改,最后在deadline之前和之前那篇屡投屡拒的文章一起投了ACL2014.

研二下学期是丰收的一学期。我迎来了自己第一篇ACL论文《Max Margin Tensor Neural Network for Chinese Word Segmentation》,论文的来之不易可能只有投过稿的人才能体会到吧。。。。从写论文,改论文,投稿,出review,到揣测审稿人心思,到response,再到焦虑的等待。当打开邮件,看到delighted的那一刹那,我怒吼了一声“我X!中了!“,当时真的是眼泪都出来了,然后跑向导师办公室向导师报喜。至于另外一篇,依旧是被拒。。。。导师和我基本上已经放弃了那篇,于是改也没改就又投了COLING,没想到也中了(或许真是人品攒够了)。这学期还和师弟一起搞了一个无监督分词的模型,后来投到EMNLP也被录用了。第一次参加ACL、COLING的我被各路大神吓的都不敢说话,但后来鼓起勇气走上前和之前只有在paper和公开课里才能见到的大牛们交流时,发现他们都非常和蔼,而且会非常鼓励我们这些年轻的研究者。IJCNLP,ACL,COLING这三次会议让我的眼界大开,也极大地提高了我的交流能力,这对我后来面试facebook也起到了很重要的作用,当然这就是题外话了。

幸福来的太快,有种飘飘然的感觉。这时候导师找我谈话,希望能再接再励,不要骄傲,继续在深度学习领域发力。研三上学期开始尝试了很多idea,但大多数都夭折了,后来决定在dependency parsing领域尝试一下深度学习模型的效果,这也是我当初给自己选择的方向中一个重要的分支,即基于树结构的结构化模型。当时对dependency parsing只有基本概念的了解,对很多前人的工作都没有深入的研究。于是找来大量的文献,每天把自己扎在文献里,看前人的方法、看各种算法、实现前人的模型。后来也形成了自己初步的idea,然后实现了下发现效果确实不错,就这样我的第二篇ACL,也是这次ACL被录用的文章《An Effective Netural Network Model for Graph-based Dependency Parsing》诞生了。和往年一样,依旧是在大年三十的夜里反复的修改论文,直到最近论文被录用。

回首自己研究生的几年,能够完成自己的目标有两个不可或缺的原因:1、导师无私的支持 2、运气。我不想灌太多鸡汤,说些通过自己不断努力终于实现理想之类的。想实现自己的目标努力是不可或缺的必要条件,想不努力就成功是几乎不可能的。但努力不是充分条件,很多时候论文是否被录用,找工作是否能够拿到offer都取决于”天时地利人和“。所以即使我们被拒了也不要气馁,很可能就是这次运气稍稍差一点。当然有句话我一直很喜欢,那就是”越努力,越幸运“,所谓厚积薄发,我相信孜孜不倦努力的人是不会太倒霉的。抛去这些主观因素,这短短三年的研究也积累了一些客观的投稿的经验,写在这里分享给大家,希望能够对和我一样在国内读研的同学们有帮助吧:

  1. 文章不是越高深越容易中,相反,能够被录用的论文通常都讲的通俗易懂。最开始投稿的时候,我追求一些高大上的词汇,罗列显得高大上的公式,但事实证明,审稿人是不可能有时间细细地去看公式,揣测模型的。所以我们写论文时一定要用最通俗的语言,解释清我们的motivation,解释为什么我们的模型能够work
  2. 对于我们这些经验尚浅的研究人员,idea的来源无非两种:老方法新任务,老任务新方法。我采用的就是老任务新方法的策略,很幸运自己能够很早就赶上深度学习这个高潮,并及时做了一些改进和应用。
  3. 永远不要觉得自己的idea太水就不做了。其实大部分的工作都是increamental的,能够产生颠覆性影响的模型是很少的,只要有一定的改进思路,我们就可以尝试去做,并写成文章。很多时候,我们觉得我们的idea水是因为我们太了解自己的研究领域了,以至于觉得我们的idea显而易见。然而实际上,对于外人而言,很可能我们的idea是有其自身价值的。
  4. 没有idea时,大量阅读文献是一个非常好的方式,说不定某篇文章就会给我们很大的启发
  5. 要多读英文的参考资料,一方面大部分的资料都是直接用英语撰写的,看翻译过来的内容难免会有信息的丢失。另一方面,大量阅读英文的资料能够对我们的语感有很大帮助,在写论文时才能做到下笔有神,表意清晰。
  6. 审稿人的水平自然是参差不齐的,很多时候审稿人的确会提一些比较诡异的问题。即使这样,在response的时候也不要言辞激烈,觉得自己是上帝,审稿人都是XX。回复一定要不卑不亢,平下心回答好审稿人提出的问题,该承认错误就承认。一般来讲,审稿人都是刀子嘴豆腐心,可能最终的结果没有我们实际想象的那么坏

以上就是我作为国内一个普通研究生的研究经历,希望能够对和我一样的同学有所帮助。顶会的梦想其实并不是那么遥不可及,我相信我们国内的青年研究者只要肯努力都能够产出非常优秀的论文。还是那句话“越努力,越幸运”,祝所有人好运!

转载请注明:《 我和NLP的故事 | 我爱计算机

Leave a Reply

Your email address will not be published. Required fields are marked *