N-gram统计语言模型
1.统计语言模型
自然语言从它产生开始,逐渐演变成一种上下文相关的信息表达和传递的方式,因此让计算机处理自然语言,一个基本的问题就是为自然语言这种上下文相关特性建立数学模型。这个数学模型就是自然语言处理中常说的统计语言模型,它是今天所有自然语言处理的基础,并且广泛应用与机器翻译、语音识别、印刷体和手写体识别、拼写纠错、汉字输入和文献查询。
2.N-Gram
N-Gram是大词汇连续语音识别中常用的一种语言模型,对中文而言,我们称之为汉语语言模型(CLM, Chinese Language Model)。汉语语言模型利用上下文中相邻词间的搭配信息,在需要把连续无空格的拼音、笔划,或代表字母或笔划的数字,转换成汉字串(即句子)时,可以计算出具有最大概率的句子,从而实现到汉字的自动转换,无需用户手动选择,避开了许多汉字对应一个相同的拼音(或笔划串,或数字串)的重码问题。 搜狗拼音和微软拼音的主要思想就是N-gram模型的,不过在里面多加入了一些语言学规则而已。
3.用数学的方法描述语言规律
4.马尔科夫假设
为了解决参数空间过大的问题,引入了马尔科夫假设:任意一个词的出现的概率仅仅与它前面出现的有限的一个或者几个词有关。如果一个词的出现的概率仅于它前面出现的一个词有关,那么我们就称之为bigram model(二元模型)。即
P(S) = P(W1,W2,W3,…,Wn)=P(W1)P(W2|W1)P(W3|W1,W2)…P(Wn|W1W2…Wn-1)
≈P(W1)P(W2|W1)P(W3|W2)…P(Wi)|P(Wi-1)...P(Wn|Wn-1)
如果一个词的出现仅依赖于它前面出现的两个词,那么我们就称之为trigram(三元模型)。
在实践中用的最多的就是bigram和trigram了,而且效果很不错。高于四元的用的很少,因为训练它(求出参数)需要更庞大的语料,而且数据稀疏严重,时间复杂度高,精度却提高的不多。当然,也可以假设一个词的出现由前面N-1个词决定,对应的模型稍微复杂些,被称为N元模型。
5.如何估计条件概率问题
6.在一个语料库例子
在训练语料库中统计序列C(W1 W2…Wn) 出现的次数和C(W1 W2…Wn-1)出现的次数。
下面我们用bigram举个例子。假设语料库总词数为13,748
![](http://hi.csdn.net/attachment/201011/19/0_1290159313dffa.gif)
P(I want to eat Chinese food)
=P(I)*P(want|I)*P(to|want)*P(eat|to)*P(Chinese|eat)*P(food|Chinese)
=0.25*1087/3437*786/1215*860/3256*19/938*120/213
=0.000154171
对与 I to Chinese want food eat 的概率远低于I want to eat Chinese food,所以后者句子结构更合理。
注:P(wang|I)=C(I want)|C(I)=1087/3437
网上很多资料中,表1 词与词频和表2 词序列频度是没有的,所以造成文章表意不清。
对于 1).高阶语言模型 2).模型的训练、零概率问题和平滑方法 3).语料库的选取等问题,《数学之美》中都有详细讲解,在此不再概述。