自然语言处理(九)——数据平滑
一、概念
什么是数据平滑?我通过一个例子来解释一下。假设有如下语料库:
{
今天 天气 不错,
天气 晴朗,
晴朗 的 天气,
}
如果要计算句子s=“晴朗天气”的概率(用二元语法模型,自然语言处理(七)已经介绍过),有如下计算过程。
p(天气 | 晴朗) = c(晴朗天气)/ c(晴朗) = = 0
显然上面计算得到的概率不怎么准确,晴朗天气总有出现的可能,最起码概率应该大于0。
为了解决这种问题,数据平滑就有了用武之地,数据平滑的作用把概率为0的变为概率较小的非0概率。最后可能还有一个疑问,句子的概率是0就0呗,为什么要平滑?实际上在语音识别中如果识别到句子的概率是0,那么就识别失败了,不管如何都要识别出一个结果,所以不能让句子的概率成为0。
知道了数据平滑的目的和用途,就该了解,数据平滑到底怎么个平滑?怎么消除0概率?其实平滑的方法有很多,接下来介绍一些常用方法。
二、数据平滑方法
加1法:这个方法是用于n元语法模型的比较简单的方法,就是计算频率时,每个二元语法出现的次数加1。公式如下:
上面的 |V| 指的是所有不同基元的个数,对下面这个语料库来说:
{
今天 天气 不错,
天气 晴朗,
晴朗 的 天气,
}
|V| = 5。这时候采用平滑的方法要计算句子s=“晴朗天气”的概率:
p( 天气 | <BOS> ) =
p( 天气 | 晴朗 ) =
p( <EOS> | 天气 ) =
因此,这是句子s出现的概率为p(s) = 。通过数据平滑,就解决了概率为0问题。不过加1法算出的概率有时候并不准确,甚至于原始求概率相差较大,因此,又出现了其他的方法来解决。
加法平滑法:同上面的加1法类似,这个方法只不过是加一个,且
。这个
的值并没法求,可以把它当做一个超参数。
古德—图灵估计法:这个计算方法,要改变出现r次的n元语法为r*次。。这里的
是指训练语料库中恰好出现r次的n元语法的数目。出现r次的n元语法的概率:
。其中
。这些公式的推算这里就不加证明了,这些都是最后推出的结果可以直接用来计算。下面这个例子是教材上的例子。这里就不一一推敲了。
总之这个古德-图灵估计法是将部分的概率分配到了未出现的事件,这样的话就不会出现概率为0的事件。下图是一个示意图,至于为什么概率总和是被均分的,就不再证明。
JEM平滑方法:这个方法解决的问题主要是古德-图灵方法中概率总和是被均分。假如有如下语料库:
{
今天 天气 不错,
天气 晴朗,
晴朗 的 天气,
}
如果计算“晴朗天气”和“晴朗云彩”两个句子的概率,显而易见如果用古德-图灵平滑法,两个句子的概率是一样的。然而根据常识来看,晴朗天气出现的概率要远远大于晴朗云彩。JEM平滑方法就是要解决这个问题。
JEM平滑方法在二元模型中加入一个一元模型。一元模型为:
将二元文法模型和一元文法模型进行线性插值:
这时“天气”的概率就远远大于“云彩”的概率,因此,这时“晴朗天气”和“晴朗云彩”两个句子的概率就不会相等均分,而是合乎常理的概率。
这就是JEM平滑方法的基本思想,平滑的方法有很多,这里就不再全部深究,上述的平滑方法也没有很精细的阐述,本文可能有错误之处,望各位同行看到的话不吝赐教,拜谢。
参考的书目有:宗成庆《统计自然语言处理》