统计语言模型(Statistical Language Model)是一个数学模型,它是所有自然语言处理的基础,广泛应用于机器翻译、语音识别等领域,它产生的初衷是为了解决语言识别问题。
自然语言处理中,对于如何判断一个文字序列是大家理解且有意义的句子,贾里尼克提出了一个简单的统计模型:一个句子是否合理,就看看它的可能性大小如何。至于可能性就用概率来衡量。通过文字序列组成的句子在人类语言中出现的概率,来判断这个文字序列是否合乎文法、含义是否正确等。
这个方法的核心是通过抽象并计算文字序列中每一个词出现的条件概率,来推断文字序列出现的概率,但是由于每一个词出现的概率也与它前面的所有词有关,那么最后一个词的条件概率的可能性就太多了,无法进行概率的估算。
19世纪到20世纪初,俄罗斯数学家马尔可夫,提出了一个颇为有效的方法:就假设任意一个词出现的概率只与它前面的词有关,那么问题就简单了。这种假设就是数学上有名的马尔可夫假设。这种假设对应的统计语言模型被称为二元模型。当然,也可以假设一个词由前面N-1个词决定,对应的模型稍微复杂些,被称为N元模型。
Google的语音搜索和中英文自动翻译(罗塞塔)中,发挥了重要作用的就是这个统计语言模型。2007年Google的罗塞塔系统第一次参加美国标准局(NIST)对机器翻译系统的评测时,便一鸣惊人地夺得了第一,评测分数高出所有基于规则的系统很多。这里面的秘密武器就是一个比其他竞争对手大上百倍的语言模型。
在IBM提出统计语言模型十几年的20世纪80年代末,还在卡内基-梅隆大学做博士生的李开复用统计语言模型把997个词的语音识别问题简化成了一个相当于20个词的识别问题,实现了有史以来第一次大词汇量非特定人连续语音的识别。
N元模型,为什么N一般取值很小呢?这里面主要有两个原因:首先, N元模型的大小(或者说空间复杂度)几乎是N的指数函数。而使用N元模型的速度(或者说时间复杂度)也几乎是一个指数函数。因此,N不能很大。当N从1到2,再从2到3时,模型的效果上升显著。而当模型从3到4时,效果的提升就不是很显著了,而资源的耗费增加却非常快,所以,除非是不惜资源为了做到极致,很少有人使用四元以上的模型。Google的罗塞塔翻译系统和语音搜索系统,使用的是四元模型,该模型存储于500台以上的Google服务器中。
在估计语言模型的概率时,很多人会忽视零概率或统计量不足的问题。而训练统计语言模型的艺术就在于解决好统计样本不足时的概率估计问题。1953年古德(Good)在他老板图灵(Turing,就是计算机史上的那位大牛)的指导下,提出了在统计中相信可靠的统计数据,而对不可信的统计数据打折扣的一种概率估计方法,同时将折扣出来的那一小部分概率给予未看见的事件。古德和图灵还给出了一个很漂亮的重新估算概率的公式,这个公式后来被称为古德-图灵估计(Good-Turing Estimate)。
这个公式的原理是这样的:对于没有看见的事件,我们不能认为它发生的概率就是零,因此我们从概率的总量中,分配一个很小的比例给予这些没有看见的事件。这样一来,看见的那些事件的概率总和就要小于1了,因此,需要将所有看见的事件概率调小一点。至于小多少,要根据“越是不可信的统计折扣越多”的方法进行。