分享到微博 分享到人人 分享到LinkedIn 分享到Email
微软对联背后的故事

微软对联系统第二版在2008年春节之前10天终于上线了。我非常高兴地看到经过自然语言祖和创新工程组的同事们半年多的努力,网站以一个崭新的界面加上一个水平更高的对联系统[1]带给用户更加美好的体验。我非常喜欢创新工程组同事邹放设计的漂亮的界面,有两个大红灯笼,灯笼下面垂挂着两行对联:

新年纳余庆,嘉节号长春

据说这是中国最早的一幅对联,是五代的后蜀的国王孟昶写的。从那时候起,对联就逐渐开始流行了,成为中国文化的最典型的代表。为了配合上线,在微软亚洲研究院的博客上,蒋龙在公共关系组的同事葛瑜的帮助下,投放了一篇“看计算机‘舞文弄墨’”的博客[2]。

虽然我们并没有做任何商业宣传,但是上线当日就创造了单日独立访问人数5万人次、每日页面浏览量达50万的“票房纪录”。许多人发帖,呼吁大家使用这个新奇的软件。在百度搜索一下“微软对联”,一下子就达到93万的记录。这对于一个研究项目来讲,似乎是一个奇迹。

用户通过微软对联系统,似乎在进行一次穿越中国文化的发现之旅,找寻中国文化渗透到每一个汉字,每一个词,甚至每一个笔画上面的千年沉淀。又似乎在跟电脑的默契配合,体现互联网时代每一台计算机背后的骨子里的一点点的创新、少许的幽默和对时弊的愤世嫉俗。

我无聊的时候,总是爱到网上去看看有没有什么有趣的评语。这就像看着自己的孩子一天天地长大。下面摘录两则我看到的比较有意思的评论。

评论一:

“微软研究院的这套对联机真的是很好很强大,那天是在大旗网外链的一个论坛上看到的,帖子很热,人气很旺,从上到下认真的看完每个对联之后,对微软的这套对联系统那真是佩服的五体投地。

咱们可以先看看饱受好评的几个对联:上联:毛林周刘华邓江胡,下联:秦汉晋隋唐宋元清,横批:震古烁今;上联:物价并不高,下联:市场已经远,横批:对酒当歌。

评论二:

我也从来没有在家门贴春联的习惯,但是老爸喜爱书法艺术,也略有小成,用着这套好玩的微软对联机,心想:赶着春节将至,不如编个春联让老爸写写,也蛮热闹喜庆的,即成上联:木土杜家喜迎吉祥鼠,对联机略做运算即成下联:车干轩户春接富贵人,横批:骏业顺风。”

我常常在思考,这个微软对联系统究竟有什么值得总结的地方。看到微软对联,再看到这么多网上的评论,我的脑海里就总象在放电影一样,把这个历程里出现的人物和有趣的事情一幕一幕地闪现出来。值此微软研究院十周年之际,我想确实应该趁现在记忆还清晰的时候,把这段历史好好地总结一下,以便让十年、二十年之后的人们还能够看到曾经发生的有趣的故事。

誓与李敖比高低

微软对联这个项目,跟前任院长沈向洋大有渊源。此事说来有点话长了。

2004年底的时候,沈向洋把我叫去,说搞个自动对联吧。所谓自动对联,就是说人出上联,由计算机对出下联。他之前跟几个人都聊过这个设想,所有的人都告诉他别想了,不可能做出来。他失望,不甘心,反复提起来。“反正你是院长,你说做就做吧。”大家说。有点像傣族的泼水节,泼的都是冷水。

他跟我说你能做也得做,不能做也得做。我说我肯定做,而且肯定能做出来。不过,要允许下联有多个候选,还要允许人机交互。另外,我需要时间。我当时可说是穷困潦倒,自然语言组不足10人,有两名骨干即将转到微软别的部门去。还有几个项目同时在做技术转移,包括搜索引擎的拼写检查。大家还要赶写很多文章。我就从清华大学中文系招了一位同学,他的名字是马艳军,听上去像一个女孩的名字,人也是彬彬有礼的。

我设计了一个简单的模型,把对联的生成过程看作是一个翻译的过程。给定一个上联,根据字的对应和词的对应,生成很多选字和候选词,得到一个从左到右相互关联的词图,然后根据一个动态规划算法,求一个最好的下联出来。一个好的下联其评价标准也很简单,第一就是它跟上联的对应程度,一般用词和词的对应概率来代表,第二就是生成对联的语言模型,就是衡量它像不像一个对联。马艳军在我的指导下,在两个多月的时间里,根据这个思路,就做了一个简单的对联生成系统出来。我于是向沈向洋报告进展,这也是沈向洋第一次审核这个项目。

在他办公室里,我给他看了这个简单的系统输出的几个结果。他看过之后,很惊讶地说,看来我们有戏呀,继续努力吧!马艳军三个月之后,导师要求他回去,我只好去找语音组帮忙提供新的学生。我曾经在语音组干过半年的经理,有点人缘。周健来很慷慨地介绍了吴法洲同学,他是清华软件学院的研究生,曾经帮助健来做了手机上的输入法。吴法洲同学来了之后不久,我又请我的实习生蒋龙同学加入。后来沈向洋让他在北航的预定将来要读他的博士的两位实验学院的大四同学加入这个研究小组。女孩子叫陶李天,男孩子叫苏昊。我当时又请了北京大学中文系的两位同学整理从网络上挖掘的对联数据以及生成的对联词典。

后来是每隔三个月,沈向洋就会安排一次评审。每一次都鼓励说,大有进步。每一次都强调“要多挖数据呀,没有数据不行啊”。为了加强数据挖掘,他特别请王坚派人帮助加强数据挖掘。王坚就派了陈伟柱来,我就请伟柱帮助从网络上挖掘更多的对联数据。伟柱果真了不起,在两个月的时间里,很快挖掘了大批的对联数据。有了更多的数据,系统的性能得到了大幅度的提升。然后大家就讨论能不能把横批做出来。蒋龙同学很聪明,在一次开会的时候提出了一个方案——通过语义距离计算来和已有的上联、下联的句子最佳匹配的横批。苏昊根据这个方案实现了横批模块。我们于是就盼望着下一次给沈向洋做汇报的时候给他一个惊喜。当时的院长助理李世鹏安排了时间。在五楼的一个会议室里面,我给沈向洋和李世鹏演示了最新的对联系统。沈向洋出了一个上联:“李敖对联强”,电脑沉思了一毫秒,对出来“鲁迅绝句多”。沈向洋说:“不错,那么横批呢”。这时候我很忐忑,鬼才知道会对出来个爷爷还是奶奶。瞬间结果出来了,系统对出来的横批是“语妙天下”。沈向洋一拍桌子,说“绝了!”。

那个时候,沈向洋满脑子都是要找李敖比一比。我一直不敢。他说不要怕,输了就输了,反正是电脑,也没有什么丢脸的。如果要是赢了,我们就赚大了。我说要是限定时间,比如1秒钟之内,我们准赢。要是不限定时间,比如任意由李敖想,那我们准输。当时,沈向洋甚至设想了比赛过程:请几个评委出题,让计算机和李敖比一比;搞一个图灵测试,把电脑的结果和人的结果,让用户评价。如果用户评价电脑结果好的次数比较多,则电脑就算赢了。那一年,沈向洋和洪小文、金俊等人到台湾访问的时候,特意跟李敖一起吃饭,席间提起此事。李敖说,“我才不比,赢了没有什么了不起,要是输了我一世的英名就完了。”李敖的聪明可见一斑。这件事也就只好挂起。

西湖边上“秀”对联

我们的对联非常荣幸地在三次二十一世纪计算大会上由我进行了演示。第一次2005年在杭州,第二次2006年在清华大学,第三次2007年在南京。据我所知,在所有的二十一世纪计算大会上,微软对联系统是唯一一个三次演示的系统。确实令人骄傲。微软对联还被认为是基于数据和基于实施(deployment driven research)的研究战略的经典。我这里再给大家讲一讲在演示时发生的故事。

第一次是2005年,在杭州大会堂。我们住在西湖苏堤春晓旁边的香格里拉饭店。沈向洋要求我演示微软对联。我心里非常焦急,因为当时的系统非常脆弱,基本上还不敢随便让别人试,只能演示自己试验过的例子。可是到了杭州,一定要有几个跟杭州有关的例子。我吃过晚饭,就心思沉重地在西湖边上漫步。大有唐代诗人贾岛月下苦思 “僧敲月下门”和”僧推月下门”孰好的架势。我不经意地抬头看到路边暮色里苏堤春晓的指示牌,知道到了苏堤春晓。于是马上想到苏堤春晓,配上个“秀”字不正好是一个上联吗?马上回旅馆打开系统试验,还真是对出来个“平湖秋月明、平湖秋月新、平湖秋月寒、平湖秋月香,还有曲院风荷清、曲院风荷新、曲院风荷美之类的。接着又发现了几个另外跟西湖有关的不错的例子。第二天在沈向洋的讲座里,他邀请我上台演示微软对联。这是该系统第一次在公众面前演示[3]。第二天,很多报纸就相继报道了微软对联系统,其中杭州《东方早报》的记者刘文钊的报道写得绕有趣味[4]。

我印象最深的是在2007年南京举行的二十一世纪的计算大会。这是微软对联第三次在这样的大会上演示。沈向洋在演讲时,要求我演示微软对联[5]。为了入乡随俗,当时在做对联演示的时候,我想到了朱自清的一篇著名的Top of FormBottom of Form散文《桨声灯影里的秦淮河》,于是我将“秦淮河桨声灯影”用做上联,系统马上生成了很多各具风格的下联,在随意选择了其中一条“松花江水色月光”作为其下联。接着,我们进一步选择了横批,于是一个“万民同庆”非常贴切地印入眼帘。

接着,我给系统出了一个“千江有水千江月”的上联,这里面有两个字是重复的,一个“千”,一个“江”,对联系统则巧妙地对出了“万里无云万里星”作为下联,然后以一句“纵横天下”作为横批结束。

其实这个对联是我在此之前送给沈向洋的。因为他当时即将奉调回微软总部担任全球搜索技术开发的副总裁。他是南京人,对南京怀有深厚的家乡情谊。这次他在南京的二十一世纪计算大会上的演讲,流露出回到家乡又要别离家乡的感觉,所以,我于是特意演示了这个对联,表达对他的深深的尊敬和祝福。

此外,在这次大会上,我们还展示了两个比较绝的对联:

对联一:

上联:凤凰台上凤凰游(选自李白诗)

下联:蝴蝶泉边蝴蝶梦

横批:麟趾呈祥

对联二:

上联:此木为柴山山出(拆字联)

下联:白水做泉日日昌

横批:景色怡人

快乐对联快乐心

微软对联完成之后,给我和很多人带来了许多快乐。我们在聚会时候胡诌一些上联,看看产生什么下联和横批,因此产生很多热烈的探讨。有的同事离开北京到其他地方去生活,我也会生成一个对联赠送给他。有人调侃说,这是世界上最便宜的却又是最有纪念意义的礼物了。

来自总部的印度朋友Raman Chandra,他参与马可波罗计划到微软亚洲研究院访问五个月。他的太太Koty Jane后来也来到北京。他们伉俪在北京度过了难忘的时光。

在此期间,我和我太太还有女儿星美曾经在一起有过交流,吃饭,聊天,很投机。在他们离开中国之际,我感觉恋恋不舍,于是就用微软对联把他和他太太的名字输入,对出一个横批,作为离别礼物赠送给他们。

上联:陈睿蒙

下联:简凯迪[6]

横批:展翼鹏程

我还记得张亚勤曾欲送即将退休的微软雷德蒙研究院前院长凌大任一个礼物。他的秘书要求我写几句古雅的中文以表心意,供亚勤参考。我绞尽脑汁,写不出来。于是求助微软对联。我把凌大任名字嵌入到上联里,输入 “纵横意气凌大任”, 结果系统对出“上下春风倚青云”,横批是“锦绣江山”。

在微软深圳移动部门和微软MSN部门同事的支持下,我们的系统很快实现了手机版本。通过短信或者彩信方式可以获得下联和横批。2006年末,经理们到香港参加中文大学举行的第一届微软亚洲研究院联合实验室会议。回来之后在珠海短暂停留两日继续讨论公司业务。我因为要去探望我在深圳工作的哥哥,就又逗留了一日。李世鹏因为要去台湾做一个特邀报告,因此也逗留了数日。晚上的时候,我和李世鹏在蛇口的一家酒吧喝啤酒。酒吧在一个轮船上,坐在船上可看到一轮明月高高地挂在天际。水光澹澹,微风习习。远处的香港如同海市蜃楼一般漂浮在海月之间。李世鹏诗兴大发。出上联:远看香港朦胧灯景。他把上联发用手机发短信给对联的服务器,马上收到了系统回复的一个短信:“看看您的大作吧,上联:远看香港朦胧灯景,下联:遥望神州寂寞月光。还满意吧,回复88看更多内容。回复8+文字,重新出上联。”世鹏又出上联:“春花秋月何时了”。系统回复 “暮雨朝云去不还”。这样一唱一和,不觉夜色已深了。真有“不觉碧山暮,秋云暗几重”之境。

电脑对联成功决

我经常在想,为什么这么一个听起来有点天方夜谭的项目居然获得了如此大的成功?到底有哪些地方值得今后的工作借鉴呢?

首先我认为,得益于沈向洋的匠心独运的选题。在此之前,重庆大学陈廷槐教授曾经给我写过一封信,寻求在计算机自动生成诗词曲联领域的合作。当时为此事跟沈向洋请教过。沈向洋认为这个题目太难了,最关键的一点就是生成的诗词的意境和表达形式可能是发散的。很难说什么是对的,什么不对的,因此不能有效地评价,而能够进行自动评价是关系到系统可持续发展的关键。我们认为对联需要首先输入上联,然后输出下联。两者已经要么相对,要么相合。在形式上,上联、下联要符合平仄,字数、词数要相当,而且上下联文字使用的规律要一致。譬如上联出现了叠字则下联一定要出现叠字,上联出现了叠音则下联一定要出现叠音。因此在形式上也有衡量的标准。而且,从机器学习的角度来讲,输入是上联和输出则是下联,结构非常清晰,便于学习。

我们也讨论了项目的重要性。对联的研究,看似小题目,却牵扯大问题。首先,依靠互联网和人工智能技术帮助振兴和普及数千年中华文化,于国于民都是大事。在学术研究上,因为涉及到自然语言处理,人工智能、机器翻译的重要算法的研究,对推动以上学科领域的发展也大有价值。

第二,我认为本项目的成功,得益于微软亚洲研究院的创新文化。微软研究院历来鼓励创新,不怕失败。因此,这样一个大胆的项目得到了沈向洋院长和继任的洪小文院长的大力支持,

第三,这个项目涉及到自然语言处理、网络挖掘、网络服务、界面设计。需要上述种种领域的人才通力配合。微软研究院各个方面的人才济济,而且大家配合默契。良好的组织管理和团队精神,保证了这个项目的有条不紊地顺利进行。同时这个系统也是许多来自不同学校的实习同学一起努力的结果。在此,特别向参加本项目的所有同事和同学表示诚挚的谢意。

许多人问我下一步的计划。我在想,利用微软对联技术,应该可以试一试绝句和律诗的自动生成了。但愿能够做出来,把中华文明发扬光大。

附录

1、微软对联成长里程

1. 2005年春节,申请专利 (周明,沈向洋)

2. 2005年杭州二十一世纪大会首次公开展示

3. 2006年4月微软亚洲研究院创新日展示,中央电视台报道。

4. 2006年9月1日第一版公开上线 (http://duilian.msra.cn

5. 006年清华大学二十一世纪大会第二次公开展示

6. 2007年南京二十一世纪大会第三次公开展示

7. 2008年二月第二版问世(http://duilian.msra.cn), 流量50万PV,5万独立访问。

8. 2008年8月研究文章“基于统计机器翻译的中文对联生成系统在世界计算语言学大会Coling 2008大会宣读(蒋龙,周明)

2、系统生成的经典对联:

上联:苏堤春晓秀

下联:平湖秋月明

上联:预防禽流感

下联:戒备艾滋病

上联:沧海一声笑

下联:碧天万里行

上联:西子盛装迎贵客

下联:南国新月照上宾

上联:月落乌啼霜满天

下联:风吹雁过雨连宵
注:此联上句出自唐朝诗人张继的“枫桥夜泊”。原诗为“月落乌啼霜满天,江枫渔火对愁眠。姑苏城外寒山寺,夜半钟声到客船。”

上联:江山如此多娇

下联:风景这边独好
注:此联上句出自毛泽东的“沁园春 雪”。

上联:西湖论剑吾迎盛世

下联:东海看云何待春风

上联:娃挖瓦中蛙

下联:烟掩檐上燕

上联:自强不息厚德载物

下联:求实创新励学敦行

横批:爱我中华
注:此联上句出自清华大学校训。系我在2006年11月在清华大学举行的二十一世纪计算大会上演示的例子。

作者介绍:

周明,从2001年至今,担任微软亚洲研究院自然语言处理组主任。从事自然语言处理有23年历史。在1999年加入微软之前,曾任清华大学计算机系自然语言处理研究组的负责人。他是中国第一个中英机器翻译系统CEMT-1的研制者,在日本连续10年 (1998-2008) 市占率超60%的中—日、日—中机器翻译产品 “J-Beijing”的发明人。他领导的自然语言组在中文分词、跨语言检索,机器翻译等国际竞争中均获得第一名的佳绩。目前他担任《计算语言学》、《机器翻译》、《亚洲自然语言信息处理》等国际学术期刊的编委,还曾任世界计算语言学会议、世界人工智能大会的领域主席,亚洲信息检索大会程序委员会主席。他的信念是第一要做对的事,第二要用简单的方法,第三要做认真和执着的人。他业余时间喜欢读书,欣赏唐诗、宋词,当然还有对联。

[1] 对联系统的第二版部署在了微软亚洲研究院中文网站上:http://duilian.msra.cn

[2] 请访问微软亚洲研究院博客查看此篇文章:http://blog.sina.com.cn/msra

[3] 演示文章链接,请参见:http://www.news365.com.cn/csj/csjyw/t20051102_705106.htm

[4] 文章链接,请参见:http://news.ccidnet.com/art/2049/20051101/362655_5.html

[5] 演示文章链接,请参见:http://tech.sina.com.cn/it/2007-10-31/17061825203.shtml

[6] Ramam的中文名字叫陈睿蒙, Koty的中文名叫简凯迪。后者的中文名是周明帮忙取的。