《数学之美》第三章 统计语言模型

计算机处理自然语言,一个基本的问题就是为自然语言这种上下文相关的特性建立数学模型,即统计语言模型。这是今天所有自然语言处理的基础,并被广泛应用。
用数学的方法解释语言规律:
贾里尼克 的统计模型:一个句子是否合理,就看他的可能性大小如何。更严格地描述:假定S表示某一个有意义的句子,由一连串特定排序的词w1,w1...,wn组成,要想求得S在文本中出现的概率P(S),有P(S)=P(w1,w1...,wn),利用条件概率公式可以展开为
P(w1,w1...,wn)=P(w1)·P(w2|w1)·P(w3|w1,w2)...·P(wn|w1,w1...,wn-1)
式中P(w1)表示第一个词w1出现的概率,P(w2|w1)表示在已知第一个词的前提下第二个词出现的概率,也就是说,词wn的出现概率取决于它前面的所有词。
但是公式前几项比较容易计算,但是从第三项开始计算难度加大,可能性太多了无法估算,于是就有了 马尔可夫假设:假设任意一个词wi出现的概率只同他前面的词wi-1有关,于是上式就可以表示为:
P(S)=P(w1,w1...,wn)=P(w1)·P(w2|w1)·P(w3|w2)...·P(wn|w1,wn-1)
这个公式对应的式语言模型的是二元模型,当一个词由前面N-1个词决定时成为N元模型。
接下来的问题就是如何估计条件概率P(wi|wi-1),根据定义
P(wi|wi-1)=P(wi-1,wi)/P(wi-1)
根据相对频度:
f(wi-1,wi)=#(wi-1,wi)/#;
f(wi-1)=#(wi-1)/#;
根据大数定律,只有统计量足够,相对频度就等于概率,即
P(wi-1,wi)=#(wi-1,wi)/#
P(wi-1)=#(wi-1)/#
因此,带入上式得到:
P(wi|wi-1)≈#(wi-1,wi)/#(wi-1)
这个模型仍然存在一些细节问题,比如公式中对词(wi-1,wi)在语料库中没有出现,或者只出现了一两次,估算概率就比较棘手了。

统计语言模型的工程技巧:
高阶语言模型:
N元模型中N的取值一般都比较小,在实际应用中最多的是N=3的三元模型,更高阶的模型就更少见了。原因有两个:首先,N元模型的大小(空间复杂度)几乎是N的指数函数,即O(|V|^N),这里|V|是一种语言词典的词汇量,一般在几万到几十万;而使用N元模型的速度(时间复杂度)也几乎是一个指数模型,即O(|V|^N-1),因此N不能很大。当N从1到2,再从2到3,模型的效果上升显著,而模型从3到4时,效果的提升不是很显著了,而资源的耗费却增加的很快。
三元或四元甚至更高阶的模型是不是就能涵盖所有的语言现象呢?答案是否定的,在自然语言中,上下文的相关性跨度非常大,甚至可以从一个段落跨到另一个段落。因此想要达到理想状态是非常困难的,这也就是马尔可夫假设的局限性,这是就要采用其他一些长程的依赖性。

模型的训练、零概率问题和平滑方法:
通过对语料的统计,得到所有的条件概率的过程叫做模型的训练。但是如果出现的次数#(wi-1,wi)=0怎么办,是否意味着条件概率为0?如果#(wi-1,wi)和#(wi)都只出现了一次,是否意味着条件概率为1?这就涉及到统计的可靠性问题。
之所以采用对采样数据进行观察的结果来预测概率是因为有大数定律在背后做支撑,他的要求是有足够的观测值。
解决办法:一个直接的办法是增加数据量。
古德-图灵估计:在统计中相信可靠的统计数据,而对不可靠的统计数据打折扣的一种概率估计方法。对于没有看见的事件,我们不能认为发生的概率为零,因此需要将所有看见的事件概率调小一点,小多少要根据“越是不可信的统计折扣越多”
Zipf定律:一般来说,出现一次的词的数量比出现两次的多,出现两次的比出现三次的多。
卡茨退避法:对于频度超过一定阈值的词,它的概率估计就是在语料库中的相对频度,对于频率小于这个阈值的词,它的概率估计就小于相对频度,出现的次数越少的,折扣越多,对于未看见的词也给予了一个比较小的频度,这样所有词的概率都很平滑了。
删除插值法(效果比卡茨退避法差):用低阶语言模型和高阶语言模型进行线性插值来达到平滑的目的。

语料的选取问题:
模型训练中另一个重要的问题就是训练数据,或者说语料库的选取。训练的数据是越多越好。训练语料的噪音高低也对模型的效果产生一定的影响。

猜你喜欢

转载自blog.csdn.net/weixin_40475469/article/details/78691660