数据平滑

来源:互联网 发布:淘宝分类代码 编辑:程序博客网 时间:2024/06/02 21:03

使用Markdown发现博文发布之后,文章的排版都乱掉了╮(╯▽╰)╭,不知道怎么回事儿,还在纠结中,本来想着要不还是使用html编辑器好了,但是想到还有好多的数学公式要打,直接HTML出来的公式实在是丑爆了,但是这Markdown真的是还是有些bug吧,而且,一堆的数据公式真的是达到兔血了,呃,,,好了,开始来干活!

上一篇文章中,已经初步了解了N-gram模型,遗留下来的问题就是数据稀疏该怎么办,我们首先来想想这个问题,主要是由于数据稀疏造成的,那么很自然的增加语料库就可以较好的解决这个问题,但是大多数情况下,我们是没办法增加自己的语料库,只能通过算法来帮助我们达到目的。那么,不管是哪一种数据平滑的方法,整体的思想都是“劫富济贫”,为什么这么说呢?我们首先来看看一幅数据分布图(在宗成庆老师的自然语言处理这本书中有)。
这里写图片描述
其中Nr表示的是出现r次的单词的个数,可以看到出现一次的单词非常多,出现两次的单词次之,但是实际上,出现一次的单词不应该获取较大的概率。
数据平滑的方式:

1)+1法。

这种方法的思想相对来说就比较地朴素了,根据名字,就很直观,就是在每次
进行概率计算的时候,假如某个单词或者词组的频率是ci,那么就是用ci+1来代替ci进行计算。

2)减值法\折扣法(discounting)

这种方法整体的思想,就是把已知时间的概率拿出来一部分分配给未知概率事件。也就是说通过某种方法,使得已知事件的概率之和是小于1的,然后把缺省的那一部分拿出来分配给未知概率事件。

Good Turing估计(古德-图灵法)

感慨一句,话说这个命名的方法,真的是相当直白啊,没错,就是古德在其老师图灵的指导下提出的这个方法。整体的思想依然是基于“劫富济贫”的思想,也就是说把非0事件的概率按照公式消减出现的次数,然后把剩余的概率均匀分给0概率事件。

首先我们假设N是整个训练样本单词总数,nr表示的是出现r次的单词的个数,那么显然有:

N=r=1nrr

又因为:
N=r=0nrr=r=0nr+1(r+1)

所以,
r=r+1nrnr+1,

这样,我们可以做出这样的调整,也就是说不直接使用r来计算,而是使用dr来表示r,r也就是dr,如下式:
dr=(r+1)nr+1nr

那么,出现r次的单词的概率就是:
P=drN,而不是P=rN
我们说,在进行任何的平滑操作之前,我们首先需要保证所有事件的概率之和是等于1的,但是显然我们进行调整之后应该就不是一了,因为:
r>0nrPr=1n1N

于是,我们就可以直接把n1N均匀分配给未知的事件。

虽然这个算法好像蛮简单的,但是当初看书的时候是一直不明白,一直无法理解,所以到最后,未出现的事情的概率到底是怎么计算的呢,我主要纠结的点就是,到底是用dr那个计算,还是说最后的n1N均分来估计未出现词的概率,现在自己重新写了一遍,恍然大悟,不能使用dr计算为0的事件,因为很显然的一个事情就是nr,当n=0时,无意义啊!

这里需要注意的就是,正式因为r>0nrPr=n1N<1,因此在进行计算的时候,是需要进行归一化处理的:

pr=prrpr

okay,正所谓,光说不练假把式,大家如果还是觉得不理解,可以看看,来源于宗成庆老师课件的例子
(老师课件写的好详细,之前自己看书都晕晕的,哈,所以说找到一个好的教程是多么重要啊!)

Back-Off 估计(Katz 后退法)

    这种方法的思路跟古德图灵法很相似,整体思路也是消减分0概率事件,然后把多余的概率分配给非0事件,但不是均匀分布,而是按照低阶分配。
1 0