2009年11月7日

钱老和Moses

    看到这两个词语连在一起能想到一点点联系的朋友,肯定是NLP或者更具体说是MT界的朋友。是啊,我也很惊讶于自己能将伟大的钱老和Moses联系起来。只是近来钱老的话和Moses都是我思考很多的对象。

    那天看到实验室老师转发给大家"钱学森的最后一次系统谈话"的邮件后,我感触很深。对于钱老,我一直是由衷钦佩的。在这个系统谈话中,我对于以下两段的印象极其深刻:

  • 钱老还讲了一个故事,"我记得在一次学术讨论会上,我的老师冯・卡门讲了一个非常好的学术思想,美国人叫good idea,这在科学工作中是很重要的。有没有创新,首先就取决于你有没有一个good idea。所以马上就有人说:'卡门教授,你把这么好的思想都讲出来了,就不怕别人超过你?'卡门说:'我不怕,等他赶上我这个想法,我又跑到前面老远去了。'所以我到加州理工学院,一下子脑子就开了窍,以前从来没想到的事,这里全讲到了,讲的内容都是科学发展最前沿的东西,让我大开眼界。"
  • 钱老说,"你是不是真正的创新,就看是不是敢于研究别人没有研究过的科学前沿问题,而不是别人已经说过的东西我们知道,没有说过的东西,我们就不知道。所谓优秀学生就是要有创新。没有创新,死记硬背,考试成绩再好也不是优秀学生。"

    是什么在不断推动人类科学的进步?一味的重复?不是,那就应该是创新。我感觉,钱老说的这两段话道出了创新的基本机制。那就是需要快速有效的站在巨人的肩膀上继续深入探索别人没有做过的事情。

    在我读博期间,有一次听到一位国外的华人教授介绍如何做科研或者如何才能发出高质量论文。答案是,new and better。似乎和上面的创新机制雷同。但是我们忽视了两点。第一,new之前需要快速有效的达到国际最高水平。因为科研中只有世界杯,没有区域赛。只有站得更高才能看得更远,才能知道哪些是New的。特别强调这里的快速和有效。至于方式可以多种多样,例如钱老在加州理工学院的求学,或者是参加国际顶级会议以及国际合作,或者剖析最先进的成果。第二,深入探索new的事情并达到better。这种探索应该是艰苦的。如果一件事情被人很容易的做出来了,然后宣称是new and better,那一定是不可信的。只有不断的勤奋踏实的工作才可能达到真正的new and better。当然,勤奋应该分两种,一种是每天都起早贪黑,认认真真没日没夜的不动脑子忙碌;一种是在勤快做事的同时不断动脑经分析和总结并改进。我想,后者的体勤加脑勤应该是成功的必备因素。

    创新真的很难,但也绝非遥不可及。不断的体勤加脑勤的采用正确的方式就一定能成功。

    说了这么多,您一定会认为我很罗嗦。怎么说了半天,还没有提到和Moses有什么关系啊。

    事情是这样的。近段时间,我开始学习Moses--著名的基于统计的机器翻译开源系统。一直知道这个大名鼎鼎的系统很牛,而且已经成为事实上的机器翻译领域的基准系统。还听说,上个月在南京大学举行的国内机器翻译研讨会上有位老专家说,他看这届机器翻译评测里面最成功的系统应该就是Moses,因为很多家的系统都是基于Moses改进的。这些背景信息致使我认为Moses已经是一个非常稳定的系统了,至少应该算是基本停止不前了吧。不然也没法作为大家的基准啊。

    前几天了解到Moses目前实现了两种解码算法(Stack Beam Decoding,Cube Pruning),准备实现三种解码算法(Chart Parse Decoding,Depth First Decoding,Forced Decoding)。Moses在翻译模型上目前实现了两种(In Memory,On Disk),准备实现两种(Suffix-array over corpus,MaxEnt)。这些内容都是写在Moses的Roadmap里面的。原本以为也就是写在那里,应该不会让人发现在经常更新吧。前天,我加入了Moses的两个相关邮件列表:支持列表和SVN提交列表。这两天发现两个列表的邮件频率比较高,而且更然人惊讶的是Moses的代码还在不断的更新和改进。今天早上发现最新的更新居然是在实现Chart Parse Decoding解码算法。这种算法可是机器翻译领域当前最新的发展动向啊。

    另外一个让我惊讶的事情,是Moses的网站及相关文档的更新机制。经过一段时间的观察,我发现Moses的网站上下载的Manual是在更新的,而且Manual是采用Tex撰写的。我猜想网站的内容和文档都是Latex同步生成的。这样能保证内容一致,而且采用一些工具也不难实现。在前天下载的最新版Manual中,我发现了一处文字错误。而且这个文字错误同样出现在Moses的官方网站上。一时激动,我昨天给掌管Moses的老大Philipp Koehn教授发信说明了这个问题。没想到今天早上打开邮箱,居然看到了他的回信。内容是说,他很感谢我,同时他已经修改了网站上的错误,Manual的内容是每天晚上自动根据网站内容生成的。我再下载最新的Manual,发现果然更新日期已经变为Nov 6了,但是我指出的错误还在那里,我想应该是那个自动程序还没有作用到最新的修订上吧。再一看网站内容,错误果然已经修订过来了。我想既然Manual会自动每晚生成,那么明天的Manual肯定就不会有这个问题了,也就不想再发信指出了。我惊讶于Philipp Koehn的执行力,以及Moses文档的这种更新机制。而且他还在Moses的支持邮件列表里不停的回复着大家提出的各种问题。

    通过这些,我知道了Moses是在每天进步的,而且相关的维护人员也是热情高涨的在从事着相关的工作。仔细观察这两个邮件列表,我发现全世界很多国家的人在一起参与Moses的日常更新,不管是Bug的提交和发现,还是代码的SVN Checkin。

    Moses的这种共享,使得我这个从来没有碰过机器翻译的外行居然在短短的时间里实现了Moses的训练、测试、单步跟踪等工程实践上的事情,同时Moses开发时的良好架构和丰富标准注释使得我能采用Doxygen来获得完美的代码文档。我很钦佩Moses的创建者和维护者们。

    一时又想到了上面提到的钱老当年的老师卡门的那个对话:卡门教授,你把这么好的思想都讲出来了,就不怕别人超过你?'卡门说:'我不怕,等他赶上我这个想法,我又跑到前面老远去了。'

    我想创新就是Moses这样吧。特别推荐搞NLP但是不做MT的朋友都看看Mose的方方面面。肯定会有巨大收获的。

1 条评论:

浩君 说...

sharing is always nice :)