数学之美——统计语言模型
-
假定S表示某一个有意义的句子,由一连串特定顺序排列的词w1,w2…wn组成,这里n是句子的长度。现在,我们想知道S在文本中出现的可能性,也就是数学上所说的S的概率P(S)。
-
因此,需要有个模型来估算。既然S = w1,w2…,wn,那么不妨把P(S)展开表示:
P(w1, w2, … , wn)= P(w1)· P(w2 l w1)· P(w3 l w1, w2) P(wn | w1,w2…,wn-1) -
从19世纪到20世纪初,俄国有个数学家叫马尔可夫( Andrey Markov),他提出了一种偷懒但还颇为有效的方法,也就是每当遇到这种情况时,就假设任意一个词wi出现的概率只同它前面的词wi-1有关,于是问题就变得很简单了。这种假设在数学上称为马尔可夫假设
-
现在,S出现的概率就变得简单了
P(S)= P(w1).P(w2|w1). P(w3|w2)…P(wn|wn-1) (3.3) -
公式(3.3)对应的统计语言模型是二元模型( Bigram Model)。假如一个词由前面N-1个词决定,被称为N元模型
-
P(wi | wi-1) = P(wi-1 , wi) / P(wi-1) 出现wi-1,wi的次数 / 出现wi-1的次数
-
实际应用中用的比较多的是N=3的三元模型,N大的话,模型大小太大了,资源耗费过多
-
马尔可夫的局限性:上下文之间的关联性跨度很大,需要采用长程的依赖性
-
模型的零概率问题:如果出现wi-1,wi的次数=0,或者出现wi-1,wi的次数=1 and 出现wi-1的次数=1,涉及到可靠性问题,需要有大数定理做支持。
-
一个直接的办法就是增加数据量,但是即使如此,仍会遇到零概率或者统计量不足的问题。假定要训练一个汉语的语言模型,汉语的词汇量大致是20万这个量级“,训练一个三元模型就有2000003= 8 x 1015个不同的参数。假如从互联网上刨去垃圾数据,有100亿个有意义的中文网页,这已经是相当高估的数据,每个网页平均1000词。那么,即使将互联网上全部的中文内容都用作训练,依然只有1013,因此,如果用直接的比值计算概率,大部分条件概率依然是零,这种模型我们称之为“不平滑”。在实际应用中,统计语言模型的零概率问题是无法回避的,必须解决。
-
提出了古德-图灵估计:提出了在统计中相信可靠的统计数据,而对不可信的统计数据打折扣的一种概率估计方法,同时将折扣出来的那一小部分概率给予未看见的事件(UnseenEvents)。
-
假定在语料库中出现r次的词有Nr个,特别地未出现的词数量为No。语料库的大小为N。那么,很显然N= 累加r*Nr 。出现r次的词在整个语料库中的相对频度(RelativeFrequency)则是r/N,如果不做任何优化处理,就以这个相对频度作为这些词的概率估计。
-
现在假定当r比较小时,它的统计可能不可靠,因此在计算那些出现r次的词的概率时,要使用一个更小一点的次数,是dr, (而不直接使用r ),dr = (r+1)Nr+1 / Nr 。
-
Zipf定律:出现一次的词的数量比出现两次的多,出现两次的比出现三次的多
-
r越大,Nr越小,即Nr+1 < Nr 因此dr<r,而d0>0
-
一般对于出现次数超过某个阈值的词(T一般在8-10左右),频率不下调,只对出现次数低于这个阈值的词,频率才下调,下调得到的频率总和给未出现的词。
-
这种平滑的方法称为卡茨退避法(Katz backoff)
-
语料的选取问题,也称为训练数据,训练语料和模型应用的领域应相一致,且选择夹杂噪音和错误的比传统、规范的好。有必要的话,对能找到模式、且量比较大的噪声需要过滤。
今天也是爱zz的一天哦!