2006年9月25日

作研究的编码功底

近几日有幸和Google的几位工程师有了两次面对面的交流,感觉收获颇丰,不敢独享,欢迎拍砖!

对于作研究,编码能力需要到什么境界才算够用?这是我从2003年开始不如研究行当以来一直在思考而且长时间没有答案的问题。原本的认识是掌握一些基本的编程技术就够了,读博士需要的编码能力是很低的。自己在本科时代留下了莫大的遗憾,那就是没有做过ACM OJ的题目。想2004年的时候曾经打算开始在学校的ACM网站(http://acm.hit.edu.cn)上作些题目的,没想到废了九牛二虎之力(当时不知道1002可以用long long,硬是用加法拼接的方法完成)做完前两道题目后卡在第三题了。随后由于事务繁多便忘了这回事了。前一阵子,参加了一次学校ACM集训队的内部会议,在场上感受到了大家对ACM的执着和热情。昨天上午,学校Google Camp开营的上午是Google HCPC的比赛。我被营长桑俊俊叫去观战。在现场看到了如此壮观的场面。这是我第一次亲临ACM比赛现场。大家的那种对编程的执着深深的感染了我。又一次在老友刘禹的指点下,我开始了自己的ACM生涯(呵呵,从零开始),我给自己帐号的自我描述是“初学ACM!弥补多年的遗憾!”。还好昨天完成了两道题,今天又完成了两道。现在渐渐找到了自己在ACM上做题的感觉,希望自己能够坚持下去,至少每日一题。

呵呵,上面是自己对ACM的一个认识过程。在有幸和Google的三位工程师一起吃饭的时候,我了解到了他们对编程的看法,以及Google内部对于作研究需要掌握编程能力到何种境界的答案。和MSRA不一样的是,Google北京的研究和开发不是相对独立的,而是紧密结合在一起的。在那里的研发人员,每人都要求有非常高的编码能力。以C++为例,他们需要考虑C++的各个编码细节,甚至是代码的汇编指令以及对Cache的访问频度。对于Python那就抠得更细了。因为一个刚入门的人和一个高手写Python,实际的效果是一个在天上一个在地下的。对于Python我是有这个体验的。Google要求每位研发人员都是全能型的人员,从底层的编码实现,到顶层的产品推广,以及分析问题研究问题,甚至于最后的撰写论文。这种模式,使得Google的产品能够以较快的速度从迸发想法到最终呈现在用户面前。这样的要求是有好处的,因为只有熟知各个细节的人才能真正做好事情。我感觉对于作研究,编码的能力没有上限,越强越好。

每天练习一下编程对于作研究是有好处的。首先,它会使得你不会因为长时间没有写程序而忘掉那些常见的编程规发和编程细节。所谓温故而知新就是这个道理。其次,只有对编程保持敏感才能在做研究的时候不会因为卡在编码实现阶段而推迟研究成果的诞生。

作为计算机系的博士生,编码是一定要过关的,而且需要达到非常高的水平,否则亏对计算机系博士生的称呼呀!内心有愧,后悔自己本科时代以及研究生时代没有接触ACM。但是感觉现在还不算晚,保持对编程练习的热情和执着,每天继续下去。相信有一天我会渐渐向我的偶像陈儒和我的老友刘禹的编程水平靠拢吧。

引用亚杰和我常说的话:AZa AZa, Fighting!

2006年9月23日

东芝、北语、沈航专家来访

上午新技术楼618,北语的荀恩东老师和东芝的王海峰老师分别做了报告《应用二叉树剪枝识别韵律短语》、《东芝的自然语言、语音技术研究》。两位老师都是咱们哈工大计算机学院自然语言处理方向毕业的博士生。聆听同一方向上的校友报告,自然是一件分外高兴的事情。两个报告内容都非常精彩。除了学术上的报告外,我们还看到了很多非常有意思的Demo。高兴之余,深深佩服两位老师的科研和工程水平。

这里来说一下,我在两个报告中学习到的三点重要体会。

1。完成文语转换的时候可以先用语言学模型的方法来寻找可能的切分点。语言模型P(w) = a * Pg(w) + (1-a) * Pd(w)中前者是经典的三元语言模型,在正常的大规模语料中进行训练即可;后者是针对韵律切分的二元语言模型。两个模型融合到一起后可以对即将转换的句子采用二叉树的方法来简历树形结构的韵律切分。二叉树的建立方法是在树的建立过程中,每次对当前的语块求出最大概率的切分点,然后二分迭代。事实上,这样得到的二叉树和层次句法分析的方法类似。可以得到很好的效果。在二叉树的基础上,再进行文语合成时的可以很好的减少搜索空间,在最后的最大熵模型中应用效果也非常的显著。

这给我一个提示,可以借助一些很好的方法来实现搜索空间的优化,从而提高最终的效果。这个需要多多接触一些好的方法。恩,多读优秀论文是正道呀 :)


2。Word Alignment的时候在句对较少的情况下可以考虑用其它资源来进行增强。具体情况是这样的的。东芝公司在完成中日句对对齐的时候,中日句对比较少,很难达到好的效果。但是他们手头上有很多的中英句对,中英对齐上也达到了非常好的效果。为了解决中日对齐的问题,他们采用的策略是借助中英语料来实现。在词对齐模型中加入了一些新的特征,整合模型后得到了最终的中日对齐模型。事实上,最后的效果比只使用那些少量的中日句对的好得多。这个方法的相关论文发表在ACL2006上了。

提示:当一个问题很难解决的时候,可以绕绕道而行,从而最终解决这个问题。当然,其中如何绕道不是三两日可以学会的。还是那句话,需要多多学习优秀的论文。博览论文是正道!

3。作研究的工程化
王海峰老师的报告最后部分介绍了如何作研究。他们的步骤和策略如下:
1。选题--面向应用
2。综述--全面深入:包括方法、论文、专利、工具、评测、语料、存在问题
3。方法--切实有效
4。实验--量力而行
5。分析--自圆其说
6。撰写--深入浅出:对于中国人写英文论文要达到这一点很困难,需要不断的锻炼和提高。

提示:感觉这个过程总结得非常不错!其中的每个步骤又都需要深入的实现。对于热爱研究的我,需要好好的领会其中的含义。


两位老师昨天和机器翻译实验室的师生进行了亲切的交流,今天下午是和我们实验室的9位博士生进行交流的时候。我的报告是倒数第二个,主题是介绍我准备投入精力的四个共指消解方法。由于3月博士入学以来,我一直在忙于语言技术平台的开发,今天的报告只是结合自己本科和硕士阶段的些许工作和近10日来对共指消解的调查想到的几个粗浅的想法。荀恩东老师和吴华老师给予了一些建议。荀老师的建议是做这个工作需要结合语言的特点来完成。吴华老师对于我提到的术语共指消解的应用性有些疑问。的确,两位老师对于术语共指都感觉偏向工程,研究味儿不是很足。

刘老师最后给我们的一个指点是好好回想一下诸位老师对大家的指点,领会一下专家们的思维方式,然后好好的深入到自己的课题研究中。回顾今天的全部内容,我觉得最大的体会是需要好好阅读各种相关和不相关的国际优秀论文,从论文中戏曲营养,然后到论文中去。呵呵,这个观点有点向毛主席的从群众中来,到群众中去。还句话说就是从运动中来,到运动中去。哈哈,我自己也被绕糊涂了 :)

2006年9月22日

Python 2.5发布

"在上一个版本发布20个月以后Python 2.5发布了,这是python2.2发布以来意义最重大的一个版本。这个版本包含了标准库更新,语言扩展和性能优化。发布公告集锦新的特色。可在这里下载。"

2006年9月20日

IJCAI,祝贺我的朋友们!

早上看到诸位好友的Blog和相关新闻,得知IJCAI的录用通知出来了,世奇中了两篇,际洲中了一篇,蒋龙现在还不清楚。至此,去年一起在MSRA同一位Mentor名下的四位实习生,作研究的陈议、际洲、世奇的论文都中了,剩下的那位实习生就是我了。呵呵,首先热烈的祝贺我的朋友们,有付出终有回报,得知他们的喜讯,我深知为了这个他们在研究上付出了许多许多,羡慕之余,我也替他们由衷的高兴。

从他们的身上我能学到什么呢?其实,对于研究,我是一直热情高涨的,曾经在本科阶段就已经深深的爱上了它。对于研究光有热情是不够的,需要各种各样的基本功的。MSRA周明老师给过很多这方面的指导。我也非常感激周明老师给我的大力帮助和指点。对于现在的我,我想最重要的一点就是集中注意力吧。就像林彪打仗一样,集中全部兵力在一个点上直插目标。记得前几天,机器翻译实验室的好友林建方找我闲聊如何做研究,如何选点的时候,提了一个非常好的建议给我。他说,在我的Blog中发现,我关注的事情太多太多,以至于精力非常的分散,这种情况是不适合做研究的。我非常的感谢林建方,因为很久以来已经没有人直接和我谈过做研究的方法和注意事项了。

十日前,按照实验室的安排,我开始把LTP的各项事宜逐渐交接给李正华。这几天来,我真有点不适应的。原先一直渴望的作研究的时间现在突然有了,原先一直绷紧在LTP上的弦终于松开了。除去一周的两个例会和两堂《运筹学》课程的时间段,我有了全部的时间来完成自己心中一直渴望的指代消解研究工作的。现在心里对指代消解的研究还没有进入状态,除了总是想好好完成那几件事情之外,似乎还没有找到沉浸其中的感觉。回想自己一周以来的指代消解的研究,还只是停留在表面的摩拳擦掌阶段,根本没有进入那种完全的状态。似乎需要一个磨合期吧,我这样理解。

其实,对于指代消解研究,算算时间,我已经接触两年半了,但是到现在为止,还没有任何的实质性的进展。因为每每要进入那种完全的状态的时候总会有一些突然的事件和任务需要去中断指代消解的研究。记得最长的一次指代消解的全身心的研究只有一个月的时间。对于指代消解的研究,我现在彷佛进入了夹生饭的状态。夹生饭是煮不熟的。这一点我深知。现在的一个解决办法就是当年初中音乐老师交给的方法:忘掉学过的那些一知半解的全部,一切从零开始,借助于以往的基础,往往能够快速的进入不再夹生的状态。

是啊!我心中的渴望终于来临,现在的我或许还没有准备好进入那种痴迷的状态。一切都是一个过程,我需要一点时间来调整和绷紧那根弦的。什么都不用说了,Focus吧!

衷心祝贺际洲,世奇!

2006年9月14日

承诺之语言技术平台

何谓“承诺”?我不知道标准的定义是什么,只是知道做不到的事情不会答应别人,答应了别人的事情一定要做到,如果答应了突然做不到的话要及时告诉对方原因和建议的解决方案。回想自己半年来的工作,就是在兑现一个承诺:基于XML的自然语言处理平台,也就是现在的语言技术平台LTP(http://ltp.ir-lab.org)。

回想LTP的研发,经历了一个曲折的过程。

2003年8月,我加入了信息检索研究室,开始的一个月里在全力完成自己在学校申请的科技创新课题《基于灰色系统的大气污染预测》。紧随其后是大四的科研实习,我的课题被确立为实验室车师兄负责的中文理解平台的搜索策略的探讨。从那时起,我开始渐渐了解了实验室的各种底层处理技术,开始尝试各种搜索算法来实现快速高效的树型结构的精确路径的发现。完成科研实习后我被调往词义消歧小组,之后有过路路续续的几次工作调换。等到2004年4月调研信息抽取的时候偶然发现XML是个好东西,而且已经有很多国际人士在研究XML和NLP的关系,在尝试基于XML来提升NLP研究和开发的能力。

2005年3月,忘了怎么辗转的,我又开始负责基于XML来将实验室的各个模块串连起来。不过,基础的表示方法和程序链接方式的尝试还没有完全建立起来,我就到微软亚洲研究院去实习了。等到半年后的12月初回到实验室,发现张会鹏已经在当初我交接给他基础工作的基础上实现了基于TinyXML的一个可以串连实验室各个模块的函数接口库。随后的几个月时间里,我们一起合作解决了各个层面处理结果的可视化的工作。由于2006年3月初,会鹏被派往腾讯实习。于是整个儿工作又都重新扛到了我的肩上。说实话,我起初对这个任务是有些排斥的,因为,我知道完成这件工作是需要耗费大量的时间的,因为需要学习的东西实在太多太多了,而且我正准备全身心的开展自己的指代消解博士课题。刘老师给我做了两次思想工作后,我开始全身心的投入到其中。在3、4两个月里,忘了经历了多少次的挫折和熬了多少个半夜,终于解决了一路上遇到的各种问题,当然其中也得到了非常多的师兄、师弟&朋友的鼎立帮助。

2006年4月22日,那是一个让我难以忘怀的日子。因为那一天,我向刘老师汇报语言技术平台可以在线演示了。记得当时刘老师非常的高兴,鼓励一番后发现了其中还存在很多的问题。为了赶在紧随的五一前的最后一次实验室全体例会上发布语言技术平台,那7天里我快忙疯了。因为又遇到了很多的困难。不过,天公作美,在4月28日,一个格外晴朗的日子,实验室例会上和实验室的网站上,以及刘老师的blog上,我的blog上,都看到了我们语言技术平台的身影。是的,那天是让人兴奋的!事实上,到今天为止,在线演示的体系框架仍然是那几天确定下来的。后来的日子里,尝试了一些方法来提高在线演示的速度,但是失败了很多次后找到了在线演示的socket访问方法来进行架构的重新设计。不过Socket模式没有最终成功,因为其中还有几个问题一直没有解决。回想当初自己揣摩Socket模式的经过,我找不到对应的人询问,一切都只能依靠google和baidu来查找。因为我设计的技术框架别人没有遇到过。现在想来,自己实现的这个框架还真有些奇特的。随后的5月22日,是学生计算语言学会议的截稿日。在最后的两天内,我和刘老师密切合作,终于完成了《LTP:语言技术平台》的文章。回想那两天,又是一段快要忙疯的日子。论文后来被录用了,紧接着就是8月中旬到沈阳参加学生会议,在其中正是对外宣传和推广LTP。为了赶在这个会议之前实现刘老师规划的完整的语言技术平台,去沈阳前的一周我天天都在实验室里面泡着,完善LTML的DTD,LTML化实验室的各种对外共享语料,统一LTP函数库的调用接口和详细文档的撰写。一切事情都排在了我的日程表上。还好,在熬了大概三个通宵的基础上,我全部完成了这些工作。去沈阳的火车上,我好好睡了一觉。在学生计算语言学会议上,我完成了预期的工作:宣讲论文,对外演示,推广共享计划。记得我的报告结尾时向在座的几十位老师同学承诺,我们的共享计划从2006年9月5日开始。等回到学校,为了这个承诺,我又开始马不停蹄的去撰写很多的文档和打包各种资源和程序,以及建立邮件列表和论坛,对外发出新闻邮件等等。终于等到了2006年9月5日,我的承诺兑现了,对外共享如期发布。随后又是大量的整理需要发送共享包下载地址和解压密码的邮件。嗯,现在看来这次对外共享还不错。

基本的一些数据如下:
截至2006年9月14日
LTP在线演示从4月28日到现在测试次数:15808次
LTP在线演示从4月28日到现在测试文本容量:32.8M,折合共16,400,000汉字
LTP完全共享包自9月8日对外以来下载地址和解压密码发出:50份
LTP完全共享包自9月8日对外依赖下载次数:73
LTP-Users邮件列表自9月8日发布以来加入用户:63
发布后得到有效反馈:2条(都是台湾用户Aska 发现的,已经提供解决方案)

今天下午实验室召开了一个LTP的交接例会,交接时间是一个月。这段时间开始,我会全身心的投入到自己最热爱的研究工作:Coreference Resolution! 目标:ACL2007。

以上便是我当初对xml工作的承诺。实现这个承诺花了前前后后接近两年的时间。现在想来,我不后悔。正如simply师姐在刘老师blog里留言说的那样:


舍得舍得,有“舍”才有“得”,小“舍”则小“得”,大“舍”则大“得”,敢“舍”才敢“得”。

当大“得”之时,看当初之大“舍”,有何不可“舍”?
当需大“舍”之时,何妨想想将来之大“得”,则又有何不可“舍”?


2006年9月12日

Discriminative vs. Generative model

总是听到这两个术语,但是又一直不清楚它们最本质的区别。今天花了一小点时间来彻底的弄清楚了。得到的结论如下:
Discriminative Model是判别模型,又可以称为条件模型,或条件概率模型。
Generative Model是生成模型,又叫产生式模型。
二者的本质区别是
discriminative model 估计的是条件概率分布(conditional distribution)p(class|context)
generative model 估计的是联合概率分布(joint probability distribution)p()

常见的Generative Model主要有:
– Gaussians, Naive Bayes, Mixtures of multinomials
– Mixtures of Gaussians, Mixtures of experts, HMMs
– Sigmoidal belief networks, Bayesian networks
– Markov random fields

常见的Discriminative Model主要有:
– logistic regression
– SVMs
– traditional neural networks
– Nearest neighbor

Successes of Generative Methods:
? NLP
– Traditional rule-based or Boolean logic systems
Dialog and Lexis-Nexis) are giving way to statistical
approaches (Markov models and stochastic context
grammars)
? Medical Diagnosis
– QMR knowledge base, initially a heuristic expert
systems for reasoning about diseases and symptoms
been augmented with decision theoretic formulation
? Genomics and Bioinformatics
– Sequences represented as generative HMMs

主要应用Discriminative Model:
? Image and document classification
? Biosequence analysis
? Time series prediction


Discriminative Model缺点:
? Lack elegance of generative
– Priors, structure, uncertainty
? Alternative notions of penalty functions,
regularization, kernel functions
? Feel like black-boxes
– Relationships between variables are not explicit
and visualizable


Bridging Generative and Discriminative:
? Can performance of SVMs be combined
elegantly with flexible Bayesian statistics?
? Maximum Entropy Discrimination marries
both methods
– Solve over a distribution of parameters (a
distribution over solutions)