http://blog.csdn.net/u012637501
一、自然语言处理-从规则到统计
1.基于规则的自然语言处理
在20世纪60年代,摆在科学家面前的问题是怎样才能让机器理解自然语言。当时普遍的认识是首先要做好两件事,即分析语句(语法)和获取语义。由于西方的语言学家们已经对各种自然语言进行了非常形式化的总结,学习语法规则、词性和构词法对于学习西方语言尤为重要,并且当时语法规则又非常容易用计算机的算法来描述,所有当时的一些科学家就更坚定的认为基于规则才是自然语言处理最好的方法。然而,事实证明,单纯基于文法(语法)规则的分析器是处理不了稍微复杂的句子的,主要问题有二:
首先,要想通过文法(语法)规则覆盖(正确描述)哪怕20%的真实语句,文法规则的数量(这里还不包括词性标注的规则)至少是几万条;
其次,即使能够写出涵盖所有自然语言现象的语法规则集合,用计算机去解析它也是相当困难的,因为现实中自然语言的文法是比较复杂的上下文有关文法,而程序语言是我们认为设计的,为了便于计算机解码的上下文无关文法。
到了20世纪70年代,基于规则的语句分析暴露出了更大的问题:自然语言中词的多义性很难用规则来描述,而是严重依赖于上下文和常识,因此,基于规则的自然语言处理终究还是走到了尽头。
2.基于统计的自然语言处理
1970年佛里德里克.贾里尼克和他领导的IBM华生实验室将统计的方法应用到自然语言处理(语音识别),使得自然语言处理重新获得新生并取得了今天的非凡成就。通过采用基于统计的方法,IBM将当时的语音识别率从70%提升到90%,同时语音识别的规模从几百单词上升到几万单词,这样就使得语音识别从实验室走向应用成为可能。此时,作为卡内基-梅隆大学博士生的李开复是最早从基于规则自然语言处理方法转到基于统计方法的人之一。
上个世纪70年代,基于统计的方法的核心模型是通信系统加隐含马尔可夫模型。这个系统的输入和输出都是一维的符号序列,而且保持原有的次序。过去的25年里,随着计算机计算能力的提高和统计数据的不断增加,通过统计模型实现了处理复杂的语句。
二、统计语言模型
1.用数学的方法描述语言规律
自然语音是一种上下文相关的信息表达和传递的方法,若想让计算机处理自然语言,关键需要解决的问题是:为自然语音这种上下文相关的特性建立数学模型,也称统计语言模型。对于统计语言模型,贾里尼克是这样描述的:一个句子是否合理,就看看该句子在语料中出现的可能性大小如何,这个可能性通过概率来衡量。统计语言模型数学描述如下:
假定S表示某一个有意义的句子,由一连串特定顺序排列的词w1,w2,w3,....,wn组成,其中n是句子的长度。现在,我们向知道S在语料库文本中出现的可能,即数学上所说的S的概率P(S)。这里我们不可能将人类有史以来说过的话统计以下来算出S的出现的概率,而是通过一个模型来估算它(P(S)),由S=w1,w2,.....,wn,那么该语句S在语料文本中出现的概率为 P(S)=P(w1,w2,....,wn)。利用条件概率的公式,S这个序列出现的概率就等于每一个词出现的条件概率相乘,于是P(w1,w2,...,wn),即为
P(w1,w2,...,wn)=P(w1)*P(w2|w1)*P(w3|(w1,w2))*.......*P(wn|w1,w2,...,wn-1),其中P(w1)表示第一个词w1出现的概念;P(w2|w1)是在已知第一个词的前提下,第二个词出现的概率。
2.马尔可夫假设
(1)马尔可夫假设
由于上述数学模型非常难算,特别是到了最后一个词wn,条件概率P(wn|w1,w2,....,wn-1)的可能性太多,无法估算。为此,到了19世纪到20世纪初,俄罗斯有个数学家叫马尔可夫,他给出了偷懒但又比较有效的方法,即每当遇到这种情况时,就假设任意一个词wi出现的概率只同它前面的词wi-1有关,这种假设就是著名的马尔可夫假设。数学模型描述如下:
P(w1,w2,...,wn)=P(w1)*P(w2|w1)*P(w3|w2)*...P(wi|wi-1)....*P(wn|wn-1)
(2)统计语言模型的二元模型(Bigram Mode)
统计语言模型的二元模型,就是指任意一个词wi出现的概率只同它前面的词wi-1有关。
P(w1,w2,...,wn)=P(w1)*P(w2|w1)*P(w3|w2)*...P(wi|wi-1)....*P(wn|wn-1),其中对于条件概率P(wi|wi-1)的估算,根据条件概率的定义为P(wi|wi-1)=P(wi-1,wi)/P(wi-1)=#(wi-1,wi)/#(wi-1)。
注释:P(wi-1,wi)为联合概率;P(wi-1)为边缘概率。对于一个大规模语料库而言,#(wi-1,wi)为wi-1,wi这对词在统计的文本中前后相邻出现了次数,#(wi-1)为本身在同样语料库文本中出现的次数(#为语料库的大小)。
(3)N元模型
统计语言模型的N元模型,可表述为一个词由前面N-1个词决定,数学模型描述如下:
P(w1,w2,...,wn)=P(w1)*P(w2|w1)*P(w3|(w1,w2))*.......*P(wn|w1,w2,...,wn-1)
这种假设也被称为N-1阶马尔可夫假设,对应的语言模型称为N元模型。当N=2的二元模型即为二元模型,N=1的一元模型实际上是一个上下文无关的模型。而实际应用中最多的是N=3的三元模型,更高阶却很少使用。因为,N元模型的大小(也可称空间复杂度)几乎是N的指针函数,即O(|V|^N),其中|V|是一种语言词典的词汇量,一般在几万到几十万个。而使用N元模型的速度(时间复杂度)也几乎是一个指针函数,即O(|V|^N-1)。依次,当N不是很大时(如N从1到2,在从2到3时),模型的效果上升显著。但当模型从3到4时,效果的提升就不是很显著了,而且资源的耗费增加却非常快。
3.统计语言模型的训练
(1)模型的训练
使用语言模型需要知道模型中所有的条件概率,我们称之为模型的参数。通过对语料的统计,得到这些参数的过程称作模型的训练。
如二元模型:
P(w1,w2,...,wn)=P(w1)*P(w2|w1)*P(w3|w2)*...P(wi|wi-1)....*P(wn|wn-1),其中P(w1)、P(w2|w1)、P(w3|w2)、P(wi|wi-1)、P(wn|wn-1)等条件概率即为模型的参数。
(2)影响训练结果因素
语料库的数据量。当语音模型训练的语料库规模很小时,很导致一些词的条件概率出现很大的偏差(如P(wi|wi-1)=P(wi-1,wi)/P(wi-1)=#(wi-1,wi)/#(wi-1)=0/1),从而出现零概率问题。所以,模型的训练,语料库数据量规模越大越好。
(3)语料库的选取
模型训练中最关键的就是训练数据,即语料库。首先,语料库的数据量要足够大;其次,训练语料和模型应用的领域尽量不要脱节。比如建立一个语言模型,如果应用是网页搜索,它的训了数据就应该是杂乱的网页数据和用户输入的搜索串,而不是传统的、规范的新闻稿,即使前者夹杂着噪音和错误。
当然在训练数据和应用数据一致并且训练量足够大的情况下,训练语料的噪音高低也会对模型的效果产生一定的影响,因此,在训练之前有时需要对训练数据进行预处理。在成本不高的情况下,过滤训练数据还是有必要的。