统计自然语言处理基础学习笔记(3)——统计推理
统计自然语言处理的目的就是针对自然语言领域进行统计推理。统计推理就是在统计概率的基础上进行预测,包括:1、数据处理,从而获得未知的概率分布;2、根据这些数据概率分布得到一些推论,并用于将来的预测。为了进一步分析统计推理,我们将该问题分析三个步骤进行阐述:1、将训练数据划分为等价类;2、为每一个等价类寻找一个好的统计估计;3、合并多个估计。
一、为了能够将训练数据划分为等价类,我们首先需要构造等价类。为了实现构造类,我们从下面三部分来阐述。
1、可靠性和辨别性:
为了对一个特征进行推导,我们希望找到模型中可以预测它的其他特征。如果模型大体稳定,我们即可以根据过去的行为很好的预测将来要发生的事情。而我们分类的任务为:试图基于各种类别特征预测目标特征。通过分类,即把数据有效地划分到具有不同类别特征地等价类别中去,最终可以在新的数据中使用这些等价类预测目标特征,可以有效的划分新的数据。在应用等价类别时,我们假设每一个类别特征中的数据与其他特征无关或者是与其他特征有较弱的相关性,总之特征间是独立的,从而可以忽略独立假设的负面影响。那么如何确定等价类的数量呢?因为如果使用了太多的等价类,即把数据划分过于仔细,可以使我们有更好的辨别性。但同时,每个等价类别不包含或者包含较少的训练数据,导致无法对对该类别的目标特征做出可信的统计估计。因此权衡之后,必须要找到一个合适的等价类数量。
2、n元语法模型:
不管使应用与分类还是标注,单词预测任务可以采用概率方程P来进行估计:P(Wn|W1,...,Wn-1)。
即使用历史数据,或者认为是先前词,预测下一个将要出现的词语。通俗的解释为,我们采用需要一个把文本历史组合到一起的方法,对于预期将要出现的那个词,在某个程度上可以给出一个合理的预测。具体的方法为采用markov模型,假设下一时刻将要出现的词完全由所有历史的前n-1个已经出现的词来决定,一般称该模型为n元语法模型。显然n的取值越大,预测将会更加准确。但是当有一个很大的语料库,为了使计算量和存储量变得现实,n的数值一般取2、3或4。而针对语言学,我们仅仅根据前面出现的词来预测下一个词,而不管句子的结构以及语法结构,很难很好的实现一个较好的预测器。实际可行的方法为,根据邻近上下文中出现的词汇通县、语义和基本的句法结构关系设计预测器,往往能够获得更好的结果。
3、构造n元语法模型
为了构建模型,我们首先需要处理语料。例如去掉文本中的标点符号。语料处理之后,就可以建立markov模型了。
二、统计估计:
前面已经将一定数量的训练数据归为某些特征类别,现在要处理的使对这些数据的目标特征找出一个好的概率估计。
1、最大似然估计:
相对频率的最大似然估计:无论怎么形成等价类,都会得到包含一定数量训练实例的分类。由于数据的稀疏性,最大似然估计并不适合自然语言处理中的统计估计。我们通常采用折扣法来解决稀疏性的问题,即通过稍微减少已观测到的事件概率的大小,同时把少量概率分配到没有看到过的事件上。
2、Laplace法则、Lidstone法则和Jeffreys-Perks法则
由于最大似然估计需要考察更好的概率估计,所以我们可以采用更加简单的方法来进行统计估计,例如Laplace法则,即
PLap(W1...Wn) = (C(W1...Wn) + 1)/(N + B)
该法则的分子不会为0,因此能够将一部分概率有效地转移到了未知事件上。Laplace法则给出地估计方法依赖于词表的大小。对于一个大词表上的稀疏数据集,Laplace法则将太多的概率转移到了未知事件上。
由于Laplace法则有明显的缺陷,因此统计实践中通常的解决多项式估计问题的方法使连续的Lidstore法则,即将上面公式的分子不是简单的加1,而是加一个正值k(k取值较小):
PLid(W1...Wn) = (C(W1...Wn) + k)/(N + k*B)
在Laplace法则和Lidstone法则的基本上,Johnson证明了PLid可以看作是在最大似然估计和统一的先验概率之间的线性插值。设m= N/(N + k*B)。我们就可以看到:
PLid(W1...Wn) = m*C(W1...Wn)/N + (1-k)/B
其中最常用的k值为1/2。该法则称为Jeffreys-Perks法则,或者为期望似然估计。Jeffreys-Perks法则的优点为通过一个小的k避开了将太多的概率空间被转移到未知事件上。缺点为:需要预先猜测合适的k值;使用Lidstone法则的折扣总是在最大似然估计频率上给出一个线性的概率估计,但是这和低频情况下的经验分布不能很好的吻合。虽然有缺陷,但是该方法在实际中经常是有用的。
3、留存估计
对于Lidstone法则中把过多的概率空间转移到了未知事件上,如何检测呢?有效的测试方法就是经验方法,即在更多的文本中查看,在训练语料中出现r次的bigram在其他更多的文本中出现的次数。该思想即为留存估计法。具体实现为,
对于每个n元gram,W1...Wn,有:
C1(w1...Wn) = 训练数据中w1...Wn的频率
C2(w1...Wn) = 留存数据中w1...Wn的频率
Nr是出现r次(在训练文本中)的n-gram的数量。现在有:
Tr是所有在训练文本中出现r次的n-gram在留存数据中出现的总数量。那么这些n-gram的平均频率是Tr/Nr。对于这些n-gram之一的概率估计是:
Pho(W1...Wn) = Tr/(NrT) , 其中 C1(w1...Wn) =r, T为留存数据中的词次数量。
4、交叉验证
留存估计的思想是间训练数据分为两部分,得到于经验估计相同的效果。使用一部分数据建立最初的模型,然后使用另一部分留存数据来精炼这个模型。这种方法的缺点是,最初的训练数据比较少,所以得到的概率估计也会不太真实。
正因为次,我们将训练数据的一部分既作为最初的训练数据也作为留存数据,即为交叉验证。
5、Goog-Turing估计
Good根据图灵机原理提出的一种确定事件频率或者概率估计的方法。
三、组合估计法
前面已经利用了n-gram的频率r数据,并试图将它应用于更多的文本中出现概率的最佳估计。但是对于没有出现过的或者很少出现的n-gram,给定相同的概率估计不是一个好的解决方案。因此需要结合不同的模型组合多重概率估计,从而可以通过平滑或组合不同的信息资源的方法来实现这个想法。下面介绍不同的方法合并不同的模型:
1、简单的线性插值技术
如果需要解决trigram模型中数据稀疏问题,可以把bigram和unigram模型组合到trigram模型中,这两个模型可以在一定程度上容忍数据稀疏性问题。我们需要将这些模型线性组合起来,对每个概率分布加权就可以得到新的概率方程,从而避免了多个概率估计出现。trigram模型中删除插值法,最基本的做法为:
Pli(Wn|Wn-2,Wn-1) = k1P1(Wn) + k2P1(Wn|Wn-1) + k3P3(Wn|Wn-1,Wn-2),其中0<=ki<=1 , k1+k2+k3 = 1.
常用的确定k值的方法为期望最大算法。
2、Katz回退算法
该算法需要根据不同模型的特征来具体设计。回退算法还可以用来进行平滑或者组合信息源。由于在训练语料中添加数据之后概率估计会发生突变,新添加的数据可能会导致回退模型选择不同阶的n-gram模型作为估计概率的基础模型。
3、一般性线性插值
线性插值法被经常使用是因为组合非常简单,易于操作。
四、结论
现有的算法有很多的算法能够或者比较好的效果,例如平滑方法。而对于数据稀疏性的问题,我们一般可以采用Good-Turing估计和线性插值法。如果只是进行简单的探索性研究,采用简单的平滑方法可以得出一些满意的结果。而希望得到一个带有优化结果的系统,最好是在组合概率模型和处理稀疏数据方面进行。