统计语言模型(Statistical Language Model)-学习笔记

 

统计语言模型是自然语言处理(Natural Language Processing,NLP)的基础模型,是从概率统计角度出发,解决自然语言上下文相关的特性的数学模型。统计语言模型的核心就是判断一个句子在文本中出现的概率

模型

假定S表示某个有意义的句子,由一连串特定顺序排列的词\omega_{1}, \omega _{2}, \ldots, \omega_{n}组成,这里n是句子的长度。现在,我们想知道S在文本中出现的可能性,即S的概率P(S),则P(S)=P(\omega_{1}, \omega _{2}, \ldots, \omega_{n})

利用条件概率的公式:

 P(\omega_{1}, \omega _{2}, \ldots, \omega_{n})=P(\omega_{1})\cdot P(\omega_{1}|\omega_{2})\cdot P(\omega_{3}|\omega_{1},\omega_{2}) \ldots P(\omega_{n}|\omega_{1},\omega_{2} \ldots, \omega_{n-1})

一般情况下:P(\omega_{1}|<s>)为更严谨的表示,表示\omega_{1}在句子s开头出现的概率,因为句子是有顺序的,因此利用的是条件概率,\omega_{1}出现的情况下,\omega _{2}出现的概率,\omega _{n}的概率计算依靠前面n-1个词。

当计算P(\omega_{1}),仅存在一个参数;P(\omega_{1}|\omega_{2}),存在两个参数,计算P(\omega_{3}|\omega_{1},\omega_{2})存在三个参数,但是以此类推P(\omega_{n}|\omega_{1},\omega_{2} \ldots, \omega_{n-1})存在n个参数,难易计算,因此在此基础上马尔可夫提出了,一种马尔可夫假设:假设\omega_{i}出现的概率只前面N-1个词相关\omega_{i-N+1},...,\omega_{i-2},\omega_{i-1},当N=2时,就是简单的二元模型(Bigram Model),当N=N时,就是常说的N元模型(N-gram Model)。 

一般情况下 ,N取值都很小,实际应用中最多的是将N=3的三元模型(Trigram Model)。

原因:(1) N元模型的空间复杂度,是N的指数函数,即 O(\left | V \right |^{N})  ,V是一种语言的词汇量,一般在几万到几十万个。使用N元模型的时间复杂度也是一个指数函数, O(\left | V \right |^{N-1})。当N不大时,效果较好,太大就不行了。

(2)即使使用N=4,N=5也不可能覆盖所有词与词之间的相关性。某两个词可能是一段话和一段话之间才会出现的。

参数计算

估计p(\omega _{i}|\omega _{i-1})出现的概率,利用条件概率有:

 p(\omega _{i}|\omega _{i-1})= \frac {p(\omega _{i-1},\omega _{i})}{p(\omega _{i-1})}

根据大数定律(事件出现的频率等于概率),可知对(\omega _{i-1},\omega _{i})在文章中出现的次数 :*(\omega _{i-1},\omega _{i}),除以文章词个数:*,即可求得p(\omega _{i-1},\omega _{i})= \frac {*(\omega _{i-1},\omega _{i})}{*}。对\omega _{i-1}计数在文章中出现的次数:*\omega _{i-1},除以文章词个数:*,即可求得p(\omega _{i-1})= \frac {*(\omega _{i-1})}{*}

故有:

p(\omega _{i}|\omega _{i-1})\approx \frac {*(\omega _{i-1},\omega _{i})}{*(\omega _{i-1})}

但是这样存在一个问题:在文本中,两个词没有连续出现过,即*(\omega _{i-1},\omega _{i})=0,那么它的概率就是0吗?;在文本中(\omega _{i-1},\omega _{i})\omega _{i-1}出现的次数一样都是1次,那么它的概率就是1吗?这里涉及到了统计的可靠性问题。

这种问题称为“不平滑”问题,解决不平滑问题(Smoothing),主要应用古德-图灵估计(Good-Turing Estimate)。其中原理为:将整个事件分为:可见部分和不可见部分(不可见概率总量很小),将所有可见部分按照越不可信(出现次数较小)概率越小来调整。

假定在语料库中出现r次的词有N_{r}个,特别地,未出现的词数量为N_{0}。语料库大小为N。那么,很显然

      N=\sum_{r=1}^{\infty} r N_{r}

出现r次的词在整个语料库中的相对频度(Relative Frequency)则是\frac{r\cdot N_{r}}{N}

现在假定当r比较小时,它的统计可能不可靠。因此在计算那些出现r次的词的概率时,要用一个更小一点的次数d_{r}(而不直接使用r),古德-图灵估计按照下面的公式计算d_{r}:

d_{r}=(r+1) \cdot N_{r+1} / N_{r}

一般来说,出现一次的词的数量比出现两次的多,出现两次的比出现三次的多,这种规律称为Zipf定律(Zipf's Law),即N_{r+1}<N_{r}因此,一般情况下,d_{r}<r,而d_{0}>0

在实际的自然语言处理中,按照古德-图灵估计做如下调整,来处理不平滑问题:

(1)对出现次数大于某个阈值的词,频率不下调,即用频率代替概率;

(2)对出现次数小于这个阈值的词,频率才下调,利用古德-图灵估计的相对频度来调整;

(3)对出现次数等于0的次,给予一个比较小的概率值

按照上面的思想,二元模型概率公式如下:

P\left(w_{i} | w_{i-1}\right)=\left\{\begin{array}{c}{f\left(w_{i} | w_{i-1}\right) \quad \text { if } *\left(w_{i-1}, w_{i}\right) \geq T} \\ {f_{g t}\left(w_{i} | w_{i-1}\right) \quad \text { if } 0<*\left(w_{i-1}, w_{i}\right)<T} \\ {Q\left(w_{i-1}\right) \cdot f\left(w_{i}\right) \quad \text { otherwise }}\end{array}\right.

T(出现的次数)是一个阈值,一般在8~10左右。

  其中:

(1)                                                             f(\omega _{i}|\omega _{i-1}) = \frac {*(\omega _{i-1},\omega _{i})}{*(\omega _{i-1})}

(2)函数f_{gt}()表示经过古德-图灵估计后的相对频度:->>>>>>解决在文本中(\omega _{i-1},\omega _{i})\omega _{i-1}出现的次数一样都是1次,那么它的概率就是1的问题。

                                                                             f_{gt}(\omega _{i}|\omega _{i-1})=\frac{d_{r}}{N}

                                                                        d_{r}=(r+1) \cdot N_{r+1} / N_{r}

f_{gt}(\omega _{i}|\omega _{i-1})=\frac{r+1 \cdot N_{r+1}}{N_{r}\cdot N},统计与(\omega _{i-1},\omega _{i})出现次数相同词的个数为N_{r},统计比(\omega _{i-1},\omega _{i})出现次数多一次r+1的词的个数为N_{r+1},再利用上式计算得出相对频度。

(3)otherwise 对应的为(\omega _{i-1},\omega _{i})未出现,其中Q(\omega _{i-1})如下:->>>>>>解决两个词没有连 续出现过,即*(\omega _{i-1},\omega _{i})=0,那么它的概率就是0的问题。

                                                            Q(\omega _{i-1})=\frac{1-\sum_{w_{i},seen}p(\omega _{i}|\omega _{i-1})}{\sum_{w_{i},unseen}f(\omega _{i})}

{1-\sum_{w_{i},seen}p(\omega _{i}|\omega _{i-1})}表示的是留给(\omega _{i-1},\omega _{i})未出现的情况所对应的概率。{\sum_{w_{i},unseen}f(\omega _{i})}表示的是不管\omega _{i-1}的情况,在我理解中,下面其实就是1。f(\omega _{i})是利用p(\omega _{i})= \frac {*(\omega _{i})}{*}求出的,然后二元模型三个部分加一块的概率和为1。

这个部分理解就是,假设i=1,2,3。分给未看见的概率为1/128。

则有\frac {1}{128}\cdot \frac {1}{6}+\frac {1}{128}\cdot \frac {1}{6}+\frac {1}{128}\cdot \frac {2}{3} =\frac {1}{128}  ,p(\omega _{1})=p(\omega _{2})= \frac {1}{6}p(\omega _{3})=\frac {2}{3}

这种平滑的方法,最早由前IBM科学家卡茨(S.M.Katz)提出,故称卡茨退避法(Katz backoff)

除了上述介绍的平滑方法外,还有一种平滑方法:用低阶语言模型和高阶语言模型进行线性插值来达到平滑的目的,这种方法称为删除差值(Deleted Interpolation),详见下面的公式。该公式中三个λ均为正数且和为1。线性插值效果比卡茨退避法略差,故现在较少使用。

此外,在二元模型求解参数的过程中,除了从大数定律的角度直接考虑频率与概率,还可以从最大似然思想角度出发,求出一组参数,使得训练样本的概率取得最大值,然后作为计算使用概率使用。但是这种角度的思想,我还没有弄明白其中的数学原理, 等什么时候弄懂了,再做补充。

参考文献

[1]https://www.cnblogs.com/yxdz-hit/p/7899594.html       

[2]吴军-《数学之美》:第三章统计语言模型                                                                     

发布了56 篇原创文章 · 获赞 29 · 访问量 3万+

猜你喜欢

转载自blog.csdn.net/foneone/article/details/102832347