自然语言处理-统计语言模型(数学之美)

简述

一个句子是否合理,就看他的可能性大小如何。
概括来说:假定S表示某一个有意义的句子,由一连串特定顺序排列的词 w1,w2,...,wn 组成,这里的n表示句子的长度。则概率P(S)表示上面句子的合理性。

P(S)=P(w1,w2,...,wn)

利用条件概率公式:
P(w1,w2,...,wn)=P(w1)P(w2|w1)P(w3|w1,w2)...P(wn|w1,w2,...,wn1)

上式中, P(w1) 表示第一个词出现的概率, P(w2|w1) 是在已知第一个词的前提下,第二个词出现的额概率,以此类推。简答的看一下上面的公式,可以发现除了 P(w1) 以及后面的 P(w2|w1) 比较好算以外,其他的项计算难度都比较大。
俄国科学家马尔科夫给出了一个假设—–假设任意一个词 wt 出现的概率只同它前面的词 wt1 有关。于是上面的公式就可以简化为:
P(w1,w2,...,wn)=P(w1)P(w2|w1)P(w3|w2)...P(wn|wn1)

上式对应的统计语言模型是 二元模型
对于上面公式的求解,可以利用贝叶斯公式:
P(wi|wi1)=P(wi1,wi)/P(wi1)

其中 P(wi1,wi) 可以用样本的相对频率(样本数量足够)来统计。具体公式如下:
P(wi1,wi)=N(wi1,wi)/N(wi1)

其中 N(wi1,wi) 代表在样本中 wi1,wi 和前后相邻出现了多少次。 N(wi1) 表示在样本中 wi1 出现了多少次。

延伸

  • 高阶语言模型:假定文本中的没个词 wi 和前面的N-1个词有关,而与更前面的词无关,这样当前词 wi 的概率只取决于前面N-1个词 P(wiN+1,wiN+2,...,wi1) ,因此:

    P(wi|w1,w2,...,wi1)=P(wi|wiN+1,wiN+2,...,wi1)

    上式对应的就是N元模型(N-Gram Model).

  • 对于上面介绍的模型,比如说二元模型,假设样本中 N(wi,wi1) 出现的词数为0,这样的话能否说明 P(wi|wi1) 概率为0。答案是否定的。对于未出现的事件,我们怎么处理??1953年古德和图灵给出了一个概率计算公式。

  • 古德-图灵估计得原理:对于没有看见的事件,我们不能认为它发生的概率就是零,因此我们从概率的总量中,分配一个很小的比例给这些没有看见的事件。这样一来,看见的那些事件的概率总和就要小于1了,因此,需要将所有看见的事件概率调小一点。至于小多少,要根据“越是不可信的统计折扣越多”的方法进行。
  • 举例:假定在语料库中出现r次的词有 Nr 个,特别的,未出现的词数量为 N0 。语料库的大小为N。那么:
    N=r=1rNr

    出现r次的词在整个语料库中的相对频率则是 rNr/N ,如果不做任何优化处理,就以这个相对频度作为这些词的概率估计。古德-图灵估计按照下面的公式计算 dr :
    dr=(r+1)Nr+1/Nr

    显然:
    rdrNr=N

    一般来说,出现一次的词的数量比出现两次的多,出现两次的比出现三次的多。这种规律成为zipf规律。所以r越大,词的数量 Nr 越小,即 Nr+1<Nr ,因此,一般情况下, dr<r ,而 d0>0 。这样的话就给未出现的词赋予了一个很小的非零值,从而解决了零概率的问题,同时下调了出现频率很低的词的概率。当然在实际应用中,一般对出现次数超过某个阈值的词,频率不下调,只对出现次数低于这个阈值的词,频率才下调,下调得到的频率总和给未出现的词。这样子的话出现r次的词的概率估计为 dr/N
  • 按照上面的介绍,二元组 (wi1,wi) 的条件概率估计 P(wi|wi1) 也可以做同样的处理。对于二元组来说,所有可能的情况的概率总和应该为1,即:
    wiVP(wi|wi1)=1

    对于出现次数少的二元组,按照古德-图灵的方法打折扣:
    P(wi|wi1)=f(wi|wi1)fgt(wi|wi1)Q(wi1)f(wi)if N(wi1,wi)Tif 0N(wi1,wi)Totherwise

    其中, fgt() 表示经过古德-图灵估计后的相对频率,而
    Q(wi1)=(1wi seenP(wi|wi1))/wi unseenf(wi)

    这种平滑的方式,最早由IBM的数学家卡茨提出,故称为卡茨退避法。

你可能感兴趣的:(机器学习及深度学习相关,NLP)