自然语言处理(七)——n元语法模型计算句子出现概率

一、前言

区别于形式语言进行自然语言处理,语言模型在自然语言处理中不关心句子的语法,而是关心这个句子出现的概率,即使一个句子完全符合语法逻辑,但是在语料库中未出现,我们仍然可以认为这个句子出现的概率为0。目前计算句子的概率一般采取n元语法模型,因此接下来就引入n元语法模型

二、n元语法模型

介绍n元语法模型之前,要懂一个理想情况下计算概率的模型。对于一个由m个基元(“基元”可以为字、词或短语等,为了表述方便,以后我们只用“词”来通指,每个基元用w表示)构成的句子s=w_{1}w_{2}w_{3}...w_{m},其概率计算公式可以表示为

p(s) =p(w_{1})p(w_{2} | w_{1})p(w_{3} | w_{1}w_{2})...p(w_{m} | w_{1}w_{2}w_{3}...w_{m-1})

这样计算概率这是理想模型,实际上实现这种模型并不现实,假如w1出现的概率是0.0001,w2出现的概率0.0001,一直累乘的话数字会成为一个天文数字。因此就引入了n元语法模型来解决这个问题。

所谓的n元语法模型,不妨先介绍2元语法模型,区别于理想的概率计算方法,2元语法模型中,基元的计算方法变成了如下公式:

p(s) =p(w_{1})p(w_{2} | w_{1})p(w_{3} | w_{2})...p(w_{m} | w_{m-1})

可以看出,2元语法模型只和前面一个基元有关系,这样就简化了概率的数字范围,但是条件概率只是理想情况下可求,实际情况就用出现的频率来作为条件概率。接下来介绍给定一个句子,怎么用2元模型来计算这个句子的概率,理论的方法这里就不列出了,直接用例子来走一遍:

假如语料库只有如下的句子,计算概率p( BROWN READ A BOOK):

("BROWN READ HOLY BIBLE”,
“MARK READ A TEXT BOOK",
“HE READ A BOOK BY DAVID")
(1)  为了是m=1时有意义,所以在每个句子开头加一个标记“”。所以从m0开始计算概率,p(BROWN | ) = \frac{c(<BOS>BROWN)}{c(<BOS>)}\frac{1}{3}。就是BROWN出现的次数除以出现的次数。

(2)  p( READ | BROWN )  = \frac{c(BROWN READ)}{c(BROWN)} = \frac{1}{1}

(3)  p( A | READ )  = \frac{c(READ A)}{c(READ )}\frac{2}{3}

(4)  p( BOOK | A ) =  \frac{c(ABOOK)}{c(A)} = \frac{1}{2}

(5)  p( | BOOK )  = \frac{c(BOOK <EOS>)}{c(BOOK)} = \frac{1}{2}

(6)  最后整个句子的概率就是上面五个概 率的乘积  \frac{1}{3} \times\frac{1}{1}\times\frac{2}{3}\times\frac{1}{2}\times\frac{1}{2} = 0.06

到此为止,就求出了这个句子在语料库中的出现概率,现在一个重要的问题来了,搞了这么半天,句子的概率有什么用?接下来就介绍它的应用。

三、句子出现概率的应用

1.语音识别消除歧义:

       如果有同样的读音,但是对应有不同的汉字,到底哪句话正确,利用句子在语料库中出现的概率,选择概率大的作为识别结果,可以在一定程度上消除歧义

2.中文分词

       例如:我有苹果手机。可以分为“我 / 有 / 苹果手机” ,也可以分为“我 / 有 / 苹果 / 手机” 。到底是怎么分词,这时就可以用句子出现概率来分词,不过此时的基元就不能是单词,而应该是中文的词语。

最后,这两个功能我都没有具体实施,上述文章如果有什么错误,还望各位不吝赐教。

参考的书有:宗成庆的《统计自然语言处理》

你可能感兴趣的:(自然语言处理)