2008年4月27日

真正的NLP研究何时能摆脱底层Engineering?

这个周末本想好好开始做点实验,没想到半道杀出个程咬金,碰上并看完了一篇国外某大学的本科论文。看完之时,想到了如题所示的问题。

纵观目前各个NLP研究领域,细想每年所谓的各大顶级会议的相关论文,Engineering的味道无比浓烈,而且很多时候一个系统比另外一个系统好关键就是看底层的Engineering谁做得好。真正在论文中提出的新想法并不一定在完全公平的Engineering水平上有效。

为什么会出现这种情况呢?Engineering对于NLP是必须的,而且目前的情况看来,绕过这一步或者想轻松的跨越这一步都是根本不可能的。我猜想谁都不愿意永远停留在底层的Engineering上,但是谁都不能拍胸脯说他的系统的底层Engineering做到了无法再好的水平。这种现状的根本原因,我想就是所谓的“人工智能”。很多时候,你想完成一个底层的模块时必须动用大量的资源、知识库以及编写大量的规则库。所以,从这个角度来看,你做的NLP越是底层,Engineering的东西就会越少,例如sentence detection, tokenize以及中文里的分词;反之,你做的东西越是上层,下层的东西需要的就越多,Engineering的味道就会越浓。

我在想,相对上层一些的NLP研究可否让诸位研究人员在完全公开(或者完全开源,大家不断升级)的底层Engineering水平和模块上开展创造性的研究呢?是否这种状况下的研究才能算是真正意义上的研究,才会有大量真正有意义并且不断推进该领域迅速发展的成果出现呢?

共享各种处理模块是一种相对普遍的方式。NLTK、GATE、OpenNLP、LTP都算是系统级的共享,种类繁多的各种模块都算是模块级的共享。当然,依靠各种模块来搭建自己需要的系统是完全可行的,也是目前较为常见的办法。通过这些共享,可以在一定程度上减轻做研究时的Engineering。但是针对一个具体的研究子领域,我相信值得共享的东西或者叫特征抽取模块会有很多很多的,而且目前看来这些东西才是最值得共享的。

目前的感受,NLP的研究工作主要分为两类:“新”算法(来自数学领域或者其他领域)的采用(目前几乎没有只能在NLP中使用的算法),以及更强Engineering水平的实现。这两者相辅相成,缺一不可。个人感觉,整体研究工作中前者所占的比例可以用来直接衡量所在研究领域的成熟程度。例如中文的分词我猜想这个比例能到95%。我所在的领域估计只有30%。

现在感觉NLP的门槛还是挺高的,主要高在底层的Engineering的那些东西,但是一旦跨越这一步,门槛就几乎没有了。所以,我感觉一个从来没有做过NLP的人,从其他领域转向NLP时,只需要半年到一年左右的时间就能进入到相对成熟的研究状态。(这么说来,NLP根本就不是铁饭碗啊)  呵呵,为什么不能将这个半年或者一年减少到尽量短呢?

 

但愿PhD毕业时,我能将我所在领域的工作在这两者上划分清楚,并且完全共享出来。如果那时我的共享能使得我所在领域的研究成熟程度达到50%,那就非常不错了。

2008年4月24日

NLP的数学基础?

马克思曾指出:“一门科学只有成功地应用了数学时,才算真正达到了完善的地步。”

那么对于我所在的NLP,究竟什么才是其能够或者值得应用的数学呢?

个人感觉NLP的最深层、最本质的问题之一是句法分析,这里面大量运用了数学。另外一个基本问题是序列标注,例如sentence detection, tokenize, word segmentation, named entity recognition, chunking, mention detection等等。

剩下的问题我感觉都是句法和序列两个问题基础上衍生出来的。对于这些衍生出来的问题,什么是其数学基础呢?

统计学?统计学只能针对大量的事实现象进行归纳,但是不能进行演绎。统计出来的规律往往会在一些例外情形下显得苍白无力。

目前大量的NLP问题都是在考虑context。的确,观其伴而知其意。但是如何结合,如何在数学层面上更好的结合context是个难点。

很多时候单单有context是不够的,还需要外部的背景知识来对问题进行支撑。作为人工智能分支的NLP或许永远没有完善的解决之道。

 

难道除了Engineering外,NLP的问题就没有统一的数学理论了么?谁来总结一个像E=mc**2那样的基本公式呢?

 

看来这是一个值得深入考虑的问题,否则就会在瓶颈的地方永远无法前进。Hal Daume III当年的思考还是很有意义的 :)

2008年4月17日

梵高:追逐兴趣,追逐理想,从凡到狂

梵高家族因为第二个温森特.梵高而被世人记住。第一个温森特.梵高是画家梵高的叔叔,第三个温森特.梵高是画家梵高弟弟的儿子。

本来一直从事家族画商事业的温森特.梵高因为爱情而转向了牧师,在煤矿经历了矿工们事故的最惨白的境遇后,温森特.梵高放弃了他一直崇拜的神。正在煤矿上发呆的温森特不经意之间被一幅矿工下班的景象迷住了,从而进入了不曾梦想的素描绘画领域。从此他深深的爱上了绘画艺术,在不断的潜修以及后来不断的拜师学艺以及和最出色的同行交流下,温森特终于吸收了荷兰风格以及法国印象派风格的基础上,创造了自己的风格。这个过程是痛苦的。正如书里面提到的一句,人类的人生活中唯有痛苦是永恒的,只有经历痛苦的熬炼,造就的作品才是旷古持久的。 温森特在阿尔达到了他绘画的巅峰时刻。他的绘画目的是为了把心目中认为值得表达的事物画下来,每天早出晚归,不停的画着。就是因为这种执着,阿尔灼热的太阳极大的损害了温森特的健康,导致他换上了癫痫,而且每三个月周期性的发作一次。最终温森特在没有感觉到有任何值得画,同时为了不再成为他弟弟的负担,赶在最后一次发作之前清醒的结束了自己的生命。

温森特.梵高是一个传奇。真正的艺术家都是疯子,但疯子不一定是艺术家。

温森特的学习绘画之路值得做科研的人学习,尽管它是崎岖的。

链接:

《梵高传》

梵高作品集(附详细介绍)

梵高作品集画列表

2008年4月10日

谁是你的曼德斯?

今日中午又读《梵高传》。读到第一章第五节《曼德斯.德科斯塔》时感到一种莫名的激动,并让我又想到了一些。读到的文字摘录如下:

--------------------------------------------------------------------------------

         曼德斯习惯于在别人尚未提出问题之前,就把问题一语道破。此人思想深沉,心胸豁达得很。对别人说的事情,他总是经过深思熟虑之后再作回答。而在约翰叔叔和斯特里克姨夫那里呢?别人的话就象撞在硬梆梆的墙上似的,很快就反弹回来一个“是”或“不是”的答复。在曼德斯那里,你的想法总要先被他放进他蕴含着丰富学识的深井中浸一浸才奉还给你。

        至于社会如何对待他,那是无所谓的。伦勃朗不得不画。他画得好坏与否是无关紧要的,有了绘画他才成其为一个人。艺术的主要价值,在于艺术家把自己的内心表达得怎样。伦勃朗实现了他所认定的生活目的,而这就使他感到欣慰。即使他的作品毫无价值,他作为画家所取得的成就也远比他放弃自己的愿望去做阿姆斯特丹最富有的商人要高出千百倍。重要的是他忠实于自己的理想,并且始终如一地坚持下去的品质,而不是他的作品的优劣。

        但是,一个年轻人怎么能知道自己的抉择是否正确呢,先生?譬如他认为应当用自己的一生,人从事某项特别值得做的工作,而后却又发现自己根本就不适合于这种工作,那怎么办呢?

        你永远不可能总是对任何事情都做到确有把握。你所能做到的就是用你的勇气和力量去做你认为是正确的事。结果也许会证明你的所做所为是错误的,然而至少你是去做了,这才是重要的。我们应当按照理智的最佳指令行事,然后任凭上帝对它的价值做出最终的判断。如果你此刻已经决定要以一种或另外一种方式为我们的造物主服务,那么,这个信念就是指引你今后行动的唯一指南。不要胆怯,要相信你的信念。

        曼德斯无意就温森特的具体问题发表什么意见,他只愿就问题的一般方面进行讨论,然后让这个小伙子自己做出决定。

        “人人都有一种正直的品格,如果他们保持这种品格,那无论做什么,最终都会有好结果的。如果你还在做画商,那么,那种把你造就成这种人的正直的品格就会使你成为一名成功的画商。这也适用于你正在接受的教育。不论你选择哪种途径,总有一天你会把你内心的一切都充分地表现出来的。”

        你在一生中也许会时常觉得自己不行,然而你最终一定会表现出你内心的一切,而那就是你一生成就的证明。

--------------------------------------------------------------------------------

曼德斯是犹太人,是温斯特.梵高在阿姆斯特丹时的拉丁文和希腊文的老师,是一位业余的画家,对伦勃朗有深刻的了解。在和温斯特.梵高的对话中,通过对伦勃朗的评述巧妙的告诉了温斯特.梵高他所认为的人生的意义。

做阿姆斯特丹最富有的商人还是坚持自己理想的清贫的画家?这个问题值得深思。我想如果是“穷爸爸,富爸爸”培训班里的老师和学员们来选的话,肯定是选前者。

朋友,你呢?谁又是你的曼德斯?

2008年4月9日

十字军史,作家,画家,联想的美

近来开始中午时到办公室旁边的沙发上看一会儿闲书,那个浅棕红色的沙发非常舒服,半躺着看书也算是一种享受。

今天继续看《梵高传》的第二章,看到温斯特.梵高到荷兰的阿姆斯特丹学习,一天在亲戚家吃饭时,亲戚们打牌,他就开始看《十字军史》(作者是古斯特.古鲁森)。

在他表姐凯询问他看什么书时,温斯特.梵高说,“这是一本本好的书,简直可以说是以赛.马里斯的情感写的”。凯笑了,追问,“为什么是赛.马里斯的呢?”

“请你读读这段,你看他是否使你联想到马里斯的一幅油画。作家在这里描绘的是一座屹立于山顶之上的古堡,朦胧中隐隐呈现出秋日的丛林,前景是一片黑色的原野,一个农夫赶着一匹马在耕地。”

“是的”,她说,“这段描述确实像一幅马里斯的画。这位作家和这位画家用他们各自使用的手段表达了同样的意念。”

 

看到这里时,我十分佩服温斯特.梵高的联想能力。在他眼里,看到很多东西时都是画家的眼光,并敏锐的把当前事物和绘画结合起来。同时是他没有完全局限在绘画领域,而是在很多其他领域里吸取灵感。温斯特.梵高的经历、足迹以及他对普通人生活的观察,融汇贯通在一起,再用绘画的形式展现出来,终成一代大家。

 

这让我又想到了文学中的一种修辞手法:通感。但是温斯特.梵高的通感已经达到文字和绘画相通的境界了 :)

 

人类的各种艺术和科学,我猜想很多时候是可以融汇贯通的。不断吸取和感悟种种的美,必定使人境界更高。正如,登上华山顶,方可论剑。

2008年4月8日

can't如何tokenize?

今天处理一点句子时,发现一个有点麻烦的问题。

don't会被tokenize成[do][n't]

can't会被tokenize成[ca][n't]

 

don't的处理感觉是没有任何问题的,但是can't明显错了。那改成[can]['t]呢,感觉还是有点不妥。

遇到won't该怎么tokenize呢,[won]['t]还是[wo][n't]?感觉都不妥。

仔细思考,如果要强行分开n't结构的话,感觉这个问题应该目前任何tokenizer都不能解决的。

 

能够想到的两个办法如下:

1. 直接保留,不进行分割,即保留为[don't][can't]和[won't]

2.先还原再处理,最终如果需要在原文中标记的话再加上后处理,及结果为

[do][not]

[can][not]

[will][not]

 

最后决定两种方案里面选一种,需要绝对统一起来进行处理。想到does not do something和do not do something的结构在采用第二种方案时更合理些。我决定采用第二种方案来解决这个问题。至于n't以外的其他词汇层面的缩写都采用这种方法来处理。

2008年4月6日

《Java与模式》学习体会之天马行空(1)

近来正在完成的项目需要不断的修改代码的架构,使得能够具备一些特殊的要求。修改代码之余,发觉自己设计的代码架构居然那么难看,一点灵活性都没有,现在采用的几乎是打补丁的权宜之计。为了改变这种状况,以及避免将来可能再设计其他系统架构时的遇到的潜在问题,我找到了一本相见恨晚的书:《Java与模式》。

限于条件,我每次阅读60页左右,在刚看完的60页里,我几乎每看一页都会有些启发,简直有点天马行空的感觉。

说说看了前60页的感受吧。

为了方便记述以及将来的温习,我采用摘录加感受的方式。

-----------------------------------------------------------------------------

摘录:模式化的过程是把问题抽象化,在忽略掉不重要的细节后,发现问题的一般性本质,并找到普遍使用的解决问题方案的过程。

感受:这个和数学建模太像了,也和做研究的基本思路以及终极目标一致。看到这句时,我开始觉得这本书肯定会让我“天马行空”了 :)

-----------------------------------------------------------------------------

摘录:人们在自己的环境中不断发现问题和寻找问题的解决方案的时候,发现有一些问题及其解决方案不断变换面孔重复出现,但在这些不同的面孔后面有着共同的本质,这些共同的本质就是模式。

感受:编程如此,NLP亦如此,我研究的共指消解更是如此。那什么才是共指消解的模式呢?人工总结还是机器学习,抑或二者结合呢?Example Based Method是条出路,可以看成是将每个样本都当成模式的模式方法。SVM寻找支撑向量,可以看成将一些最具表达和区分能力的样本当成了模式,应该也存在缺陷,就是抽象能力还不够。K-Nearest的方法可以看成是前面两种的结合,主要思想是在最相近的一堆样本中取平均值,可以算作是一种改进,但是距离理想状态还差几个数量级。贝叶斯、最大熵和决策树等生成模型的机器学习算法,都是在建立一个能够描述和解决问题的模型。贝叶斯和最大熵是一伙儿的,都是在计算一组权值;决策树是在考虑属性的层进式判断,有点儿模式的味道。但是生成模型的问题就是对共指中相关实体的上下文环境描述能力较为缺乏。基于逻辑的Inductive Logic Programming以及Markov Logic Network同时具备了生成和判别的能力,是一条值得深入尝试的道路,但是还需要进行深入的融合,目前这两种方法在实现的解决方案上还需要深入的学习。在二元分类模型框架下,感觉采用结合多种算法自动学习模式以及深入结合局部上下文以及篇章信息的方法才是王道。但是共指属于聚类型问题,目前都是在玩图分割以及整数规划,还需要在深入考虑属性的问题,从这点看HyperGraph是王道。那么对于共指,我猜想最终的解决方案应该是多种二元分类学习方法+基于Logic的推理能力+完善的上下文、篇章信息描述及背景知识+HyperGraph的融合。呵呵,有点大一统的味道,值得深入构思啊 :)

-----------------------------------------------------------------------------

摘录:模式的研究起源于建筑工程设计大师Christopher Alexander的关于城市规划和建筑设计的著作。尽管他的著作是针对城市规划和建筑设计的,但是作者的观点实际适用于所有的工程设计领域,包括软件开发领域。

感受:如此好的书籍,应该加入待读列表。这书是否适用于做NLP的研究呢?

-----------------------------------------------------------------------------

摘录:Alexander描述了一些他认为是永恒的、适合于任何工程学科的设计原则。这些原则是建立在下面的三个基本概念上的:质、门、道。

论无名的质(QWAN)

           在Alexander的论述中,质或无名的质处在核心地位上。他认为,所有的生物、有用之物均包含如下的“质”:自由性、整体性、完备性、舒适性、和谐性、可居住性、持久性、开放性、弹性、可变性,以及可塑性。QWAN使人感到充满活力,给人以满足感,并最终改善人类的生活。

论门

        门是指通向质的管道。门是通过一个普遍的模式语言来体现的,这个模式语言使设计师能够创建多种形式的设计,以满足多方面的需求。门市普遍存在的,是这些模式之间的关系或是模式的以太,充满着一个特定的域。

论道

      道又称作永恒的道。利用道,从门演化到质的过程,就是把一些特定的模式按照一定的顺序应用到系统设计上的循序渐进的过程。Alexander把从门道质的过程比喻为胚胎发育过程。胚胎发育过程的特殊之处就是整体先于部分而存在,整体通过分裂来产生部分。通过追寻道,可以通过门达到质。Alexander认为这个过程是任何一种工程设计的发展过程。

感受:这段摘录比较长,读了好几遍感觉还是领悟不完全。需要常悟啊!

-----------------------------------------------------------------------------

摘录:阅读过Alexander的《建筑的永恒之道》一书的人们无不为次数的哲理性所打动。人们将这本书比喻为一本使用建筑学的例子讲解哲学的血,或者是一本以哲学的风格讲解建筑学的书。Alexander本人一再强调,模式理论是一个完整的、不可分割的整体,不能够他的理论概率为一套方法论,而不理会他的哲学观点。

感受:看来此书是必读之物了 :)

-----------------------------------------------------------------------------

摘录:《建筑的永恒之道》以及《建筑模式语言》两本书是关于解决任何领域中的问题的设计模式的书。这两本书就像Java或者C++的书一样,只是没有讨厌的代码语法。读者这两本书,就好象读着一本为技术人员写的易经或者是儒家-道家的著作一样。

感受:又想到了我编程方面的偶像cr了,当年他推荐我学习模式,我却一直没能领悟学习这个的重要性。看来只能亡羊补牢了 :)

-----------------------------------------------------------------------------

摘录:如何同时提高一个软件系统的可维护性和可复用性是面向对象的设计要解决的核心问题。

感受:总结核心问题看来非常重要,那么什么是我的研究领域以及目前需要解决的核心问题呢?值得深思。

-----------------------------------------------------------------------------

摘录:西方发达国家的一个软件项目在其生命周期内,花在维护上面的钱,是花在原始开发上面的钱的两倍。

感受:这个让我想起科研的生命周期,或者叫顶级论文的生命周期。Dr. Zhang向我介绍他的Paper经验时,提到Paper的核心是Idea,但是有了idea以及实验结果只能算是完成了一半,Paper的撰写应该占到一半的比例。我想如果加上研究过程中的各种相关系统的复用、拓展以及论文Idea和撰写的复用拓展,就能形成良性的科研生命周期。

-----------------------------------------------------------------------------

摘录:系统的美,首先存在于设计者们的头脑之中,然后存在于设计图纸之上,然后变成一个原型系统,最后变成一个真实的、有血有肉、可以交付客户使用的成品。

感受:研究之美,首先存在于想到精美的Idea那一刻,然后存在于详细的实验设计以及确实是对问题本质进行解释的提高,然后变成一个论文的初稿,最后变成一个完整的、让人相见恨晚的高质量的论文并和同行交流得到反馈。从而形成良性循环。

-----------------------------------------------------------------------------

摘录:一个好的系统设计应该具有如下性质:可扩展性、灵活性、可插入性。这三个性质就是一个系统设计应该达到的目标。

可插入性

      可以很容易的将一个类抽出去,同时将另一个有同样接口的类加入进来,这就是可插入性。

感受:从我参与设计过的LTP的架构,以及接触过的Gate、NLTK、OpenNLP的架构,再到目前正在学习的UIMA的架构,我感觉可插入性方面NLTK、OpenNLP、GATE是代码级的,LTP和UIMA是模块级(不涉及代码)的。可插入性在NLP系统里面相当的重要。能否将这种性能增强到像计算机硬件那样可以随意插拔,而且在达到基本的系统需求后通过任意插拔代码级或非代码级(例如windows下的dll、linux下的so,以及可以跨平台的jar)的模块来增强。这个话题有点深远,留待思考和拓展。

-----------------------------------------------------------------------------

摘录:传统的复用主要有,

代码的剪贴复用,这是最低级的复用,而且会导致后期及其麻烦的处理。

算法的复用:较为高级,也是目前计算机研究领域较为高级的研究话题。

数据结构的复用:与算法相对,并且成为一体。

感受:感觉目前我编程序经常采用第一种复用。

-----------------------------------------------------------------------------

摘录:面向对象设计的复用。在一个像Java这样的面向对象语言中,数据的抽象化、继承、封装和多态是几项最重要的语言特性,这些特性使得一个系统可以在更高的层次上提供可复用性。数据的抽象化和继承关系使得概念和定义可以复用;多态性使得实现和应用可以复用;而抽象化和封装可以保持和促进系统的可维护性。这样一来,复用的焦点不再集中在函数和算法等实现细节上,而是集中在最重要的含有宏观商业逻辑的抽象层次上。换言之,复用的焦点发生了倒转。

感受:面向对象就是好,看来这本书值得深入阅读。

-----------------------------------------------------------------------------

摘录:客户端依赖于一个抽象的接口,而不是一个具体实现类,使得这个具体类可以被另一个具体类所取代,而不影响到客户端。

感受:学习Java时不太明白接口有什么用,现在想来作用和我们学习的计算机硬件接口一种作用。

-----------------------------------------------------------------------------

摘录:《老子》云:善为士者不武。

感受:说的是好的设计师不会在他设计的系统投入使用后再进行大规模的修改。让我想到《孙子兵法》里的上上兵法:不战而屈人之兵。

-----------------------------------------------------------------------------

摘录:经典力学的基石是牛顿三大定律。面向对象的可复用设计的第一块基石,便是所谓的“开-闭”原则。讲的是:一个软件实体应当对扩展开放,对修改关闭。根本说来就是找到一个系统的可变因素,将之封装起来,实现抽象化。

感受:回想当时设计的LTP架构,这个方面做得很不好啊。

-----------------------------------------------------------------------------

摘录:西汉杨雄的《太玄》一书说:“知固而不知革,物则失则;知革而不知固,物失其均。”一个系统对修改关闭,就是固;而系统对扩展开放,就是革。一个系统不可拓展,就会“物则失则”,或者说系统失去使用的价值;而一个系统动则需要修改,便会“物失其均”,也就是失去其重心。

感受:回想我个人经历过的研究和开发,顿觉我是“物则失则”。以后需要改正啊。

-----------------------------------------------------------------------------

 

读罢前60页,顿觉相见恨晚,值得继续学习。特此鸣谢kimi近日每晚听过看此书时瞎扯 :)