自然语言处理为什么从规则转到统计的方法?

    在学术圈,纯“统计”方法完爆纯“规则”方法似乎已经是司空见惯的事情了,所以也难怪题主也不问是不是就先问了为什么。 然而在业界,到底选用“统计”方法还是选用“规则”方法这事还不好轻易下结论。大家眼中的业界应用可能都是谷歌必应一类的大搜索引擎,拥有海量数据且文本涉及各个领域;而我这里要谈的业界说大不大,文本来源主要由公司的内部文件和一些订阅的行业信息构成,但说小也不小,因为他们是各类文本挖掘软件的主要购买者。他们的特点是文本主要集中在某个特定领域,且涵盖大量专有名词,若非业务人员,完全看不懂这些名词还有特定缩写。
    首先,对于这类公司而言,使用统计方法需要大量labelled data,而公司又往往没有labelled data。如果指派业务人员来打标签 (label data),这个时间成本实在太高。相较之下,利用“规则”的方法就省事多了,先用unsupervised方法把topic modelling搞出来,再让业务人员根据topic编制规则,一开始编得粗没关系,之后再细化。然后只需要sample一些数据打打标签搞个evaluation,瞬间节省了很多工作量有木有啊。你要是问我说准确率有没有用SVM跑出来的高,那恐怕是没有的。所以在公司已经有labelled data的情况,我多半也偏向直接用“统计”方法。
    其次, 因为这类客户文本主要集中在某个特定领域,对于Word Disambiguation的压力真心小很多。“规则”方法真心不擅长的就是Disambiguation类的问题,因为需要穷尽的可能太多了,很难一一写过来。而如果Disambiguation的压力减小了呢,使用“规则”方法产生的false positive错误的压力也会相应减少。
    第三(比较没那么重要),即使公司真的请人来给数据打label,评分员的评分准则都可能会有很大差异。这倒是亲身经历,我见过很noisy的数据,后来发现与其让评分员们讨论打分,还不如直接让他们讨论出一套合理的规则。
    第四,最后一点表扬一下统计方法。在“返工”这个问题上,“统计”方法是有极大的优势的。如果你使用“规则”方法,当你的准确率召回率已经到达一个瓶颈了的时候,增加一条规则或改动一条规则所牵扯到的数据太多,每一条翻回去重看都是一种痛苦,每一次给一条规则打补丁都是一次返工,一种难以言说的痛。而相比之下“统计”方法就好多了,标记虽然痛苦,但也只用标记一次,剩下来的就是换算法+feature engineering呗。SVM效果不好还可以试Xgboost,就算是把风扇跑得呼呼转,服务器跑成狗,至少你也不用重新回头去读文本读语法了,况且还不用担心overfitting的问题。我每次用“统计”方法把几台电脑折磨地呼呼叫的时候,仿佛有一种宁可我负天下人,不可天下人负我的快感。
    相较之下,我也觉得有时间看我写的这些,各位读者不如好好去学习算法,今后好报销国家(喂,是报效好吗)。但是这些都是我亲身经历过的体会,如果你今后(不幸)也加入了某知名文本挖掘软件的公司,如果你以后加入了某个想做NLP但却一没钱二没资源的公司的时候,当你有一个项目在该使用“规则”还是“统计”方法犹豫不定的时候,千万不要因为对学术的偏执就选择了统计方法。
    作为一个统计背景的人,让我从心底里接受“规则”方法是花了点时间的。如今我的Title已然是计算语言学家了,也算是对我的爱的一种回报。接下来我所想的问题,就是如何利用“统计”方法写出更加鲁棒的规则。比如两句话: “The machine broke.” "The machine loaned from a trusted source broke." 我想提出broke的主语,或者换句话说,我想知道什么东西坏了。 如果按原始的“规则”方法,要针对每句句型写规则来把machine这个词提出来,真不知道要写到什么时候,况且还不知道准确率如何。 但是如果可以写基于依存关系的“规则”呢?你只要写一条规则把broke的主语抓出来就够了,这样节省了许多许多的工作量。而依存关系怎么找呢?目前最好的方法是基本Deep Learning的统计方法(估且称之为统计吧)。这就是我所说的利用统计方法写出更加准确更加鲁棒的规则。
    统计”和“规则”相辅相承,关键看如何结合如何互补
    当时写下这份答案时是一年半前,最近这份答案被知乎的发现挖了出来,也让我有种穿越回去的感觉。这一年半的成长,我感觉自己是更自由了,基本上执着于自己原来的方法论,做而不是拘泥于某一类方法。尝试过用ML方法提高写规则的效率,也尝试过把prior knowledge加进ML的模型里。当然我的目的非常明确,就是怎样以最小成本来实现我需要的功能。以后我也会一如既往地在非监督/半监督以及迁移学习的路途上不断前进,找到属于最适合具体问题的最佳方法。

0 个评论

要回复文章请先登录注册