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%,那就非常不错了。

4 条评论:

  1. 我感觉现在来说,越是底层的研究,对问题的形式化,也就是数学建模越明确,越是上层越模糊。尤其是涉及到语义的NLP更是这样,到处充满着歧义。但NLP如果不涉及语义,就也没什么意思了,呵呵:)

    回复删除
  2. 有道理啊。看来凡事都是两面的 :)

    回复删除
  3. 你说的底层是上层是什么概念?如果说底层是指词性、语法,上层是指语义、语境,那好像确实是这样。关键我倒是觉得是研究难自动化的东西就少,靠人做的就多,这样就造成了这种局面。

    回复删除
  4. 嗯,你说的也很有道理啊!上层需要人力较多时因为需要的外部知识较多。

    回复删除