我和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。回复一定要不卑不亢,平下心回答好审稿人提出的问题,该承认错误就承认。一般来讲,审稿人都是刀子嘴豆腐心,可能最终的结果没有我们实际想象的那么坏

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

时间: 2024-10-12 17:31:47

我和NLP的故事(转载)的相关文章

用Python做自然语言处理必知的八个工具【转载】

Python以其清晰简洁的语法.易用和可扩展性以及丰富庞大的库深受广大开发者喜爱.其内置的非常强大的机器学习代码库和数学库,使Python理所当然成为自然语言处理的开发利器. 那么使用Python进行自然语言处理,要是不知道这8个工具就真的Out了. NLTK NLTK是使用Python处理语言数据的领先平台.它为像WordNet这样的词汇资源提供了简便易用的界面.它还具有为文本分类(classification).文本标记(tokenization).词干提取(stemming).词性标记(t

机器学习和深度学习资料合集

机器学习和深度学习资料合集 注:机器学习资料篇目一共500条,篇目二开始更新 希望转载的朋友,你可以不用联系我.但是一定要保留原文链接,因为这个项目还在继续也在不定期更新.希望看到文章的朋友能够学到更多.此外:某些资料在中国访问需要梯子. <Brief History of Machine Learning> 介绍:这是一篇介绍机器学习历史的文章,介绍很全面,从感知机.神经网络.决策树.SVM.Adaboost到随机森林.Deep Learning. <Deep Learning in

[转]机器学习和深度学习资料汇总【01】

本文转自:http://blog.csdn.net/sinat_34707539/article/details/52105681 <Brief History of Machine Learning> 介绍:这是一篇介绍机器学习历史的文章,介绍很全面,从感知机.神经网络.决策树.SVM.Adaboost到随机森林.Deep Learning. <Deep Learning in Neural Networks: An Overview> 介绍:这是瑞士人工智能实验室Jurgen

程序员加入创业公司失败案例

今天看到一篇文章<万众传业,程序员的血泪史>里面讲了几个很典型的加入创业公司失败案例,值得每一个想找创业公司你程序员思考,现将故事转载如下. 故事一.少听『商业精英』讲故事,听多了中毒 首先你必须承认,创始人 CEO 都是特别能说的家伙.一个有判断能力的明智的程序员,首先需要具备的品质就是要保持冷静,不要轻易被人打鸡血. 下面是一朋友(因为隐私原因,他让我不提名字,我就直接 copy 故事了)的创业经历和总结反思,写得非常受用,我之前也转到过程序员客栈技术圈. 我的上一家公司 CEO 是个新加

探Java多线程Thread类和Runnable接口之间的联系

首先复习一下Java多线程实现机制,Java实现多线程方法有如下这么几种: 1.继承了(extends)Thread类 2.实现了(implements)Runnable接口 也就是说  有如下两种情况 情况1: 继承Thread类.重写其方法run() .    然后new之.调用Start()方法 1 public class TestThread 2 { 3 private int i; 4 public static void main(String[] args) 5 { 6 // T

[转载]傅里叶分析之掐死教程(完整版)更新于2014.06.06 - 与时间无关的故事 - 知乎专栏

  傅里叶分析之掐死教程(完整版)更新于2014.06.06 Heinrich 作 者:韩 昊 知 乎:Heinrich 微 博:@花生油工人 知乎专栏:与时间无关的故事 谨以此文献给大连海事大学的吴楠老师,柳晓鸣老师,王新年老师以及张晶泊老师. 转载的同学请保留上面这句话,谢谢.如果还能保留文章来源就更感激不尽了. --更新于2014.6.6,想直接看更新的同学可以直接跳到第四章---- 我保证这篇文章和你以前看过的所有文章都不同,这是12年还在果壳的时候写的,但是当时没有来得及写完就出国了-

转载--仿佛来自虚空,格洛腾迪克的故事

仿佛来自虚空(1) 每一门科学,当我们不是将它作为能力和统治力的工具,而是作为我们人类世代以来努力追求的对知识的冒险历程,不是别的,就是这样一种和谐,从一个时期到另一个时期,或多或少,巨大而又丰富:在不同的时代和世纪中,对于依次出现的不同的主题,它展现给我们微妙而精细的对应,仿佛来自虚空.  ——<收获与播种>,第20页 亚历山大-格洛腾迪克是一位对数学对象极度敏感,对它们之间复杂而优美的结构有着深刻认识的数学家.他生平中的两个制高点——他是高等科学研究院(IHES)的创始成员之一,并在196

(转载)人生中的20个故事 -(十几年来,鸡汤我只喝这一碗)

1.断箭 不相信自己的意志,永远也做不成将军. 春秋战国时代,一位父亲和他的儿子出征打战.父亲已做了将军,儿子还只是马前卒.又一阵号角吹响,战鼓雷鸣了,父亲庄严地托起一个箭囊,其中插着一只箭.父亲郑重对儿子说:"这是家袭宝箭,配带身边,力量无穷,但千万不可抽出来." 那是一个极其精美的箭囊,厚牛皮打制,镶着幽幽泛光的铜边儿,再看露出的箭尾.一眼便能认定用上等的孔雀羽毛制作.儿子喜上眉梢,贪婪地推想箭杆.箭头的模样,耳旁仿佛嗖嗖地箭声掠过,敌方的主帅应声折马而毙. 果然,配带宝箭的儿子英

(转载)你好,C++(4)2.1.3 我的父亲母亲:编译器和链接器 2.1.4 C++程序执行背后的故事

你好,C++(4)2.1.3 我的父亲母亲:编译器和链接器 2.1.4 C++程序执行背后的故事 2.1.3  我的父亲母亲:编译器和链接器 从表面上看,我是由Visual Studio创建的,而实际上,真正负责编译源代码创建生成可执行程序HelloWorld.exe的却是Visual Studio中集成的C++编译器cl.exe和链接器link.exe.他们二老,才是我的亲生爹妈. 为了便于人们的编写.阅读和维护,我们的源文件是使用C++这种人们可以理解的高级程序设计语言编写的.然而,计算机却