学习笔记来自斯坦福公开课的自然语言处理(
https://class.coursera.org/nlp/),以其中讲义为主,加入自己的学习理解,以加深学习印象。
内容提纲:
1. N-GRAM介绍
2. 参数估计
3. 语言模型的评价
4. 数据稀疏问题
5. 平滑方法
N-GRAM介绍
现在很多的应用中,需要计算一个句子的概率,一个句子是否合理,就看看它的可能性大小,这里可能性的大小就用概率来衡量。比如下面几个例子:
- 在机器翻译中:
P(high winds tonite) > P(large winds tonite)
- 拼写检查中:
比如这一句话:The office is about fiIeen minuets from my house
显然 P(about fiIeen minutes from) > P(about fiIeen minuets from)
- 语音识别中:
比如I saw a van 和eyes awe of an听上去差不多,但是P(I saw a van) >> P(eyes awe of an)
上面的几个例子中都需要计算一个句子的概率,以作为判断其是否合理的依据。下面将上述的内容形式化描述。
我们需要计算一个句子或序列W的概率: P(W) = P(w 1 ,w 2 ,w 3 ,w 4 ,w 5 …w n )
其中我们也需要计算一个相关的任务,比如P(w 5 |w 1 ,w 2 ,w 3 ,w 4 ),表示w 1 w 2 w 3 w 4 后面是w 5的概率,即下一个词的概率。
像这样计算P(W)或者P(w n |w 1 ,w 2 …w n-‐1 ) 的模型叫做语言模型( language model简称LM)。
那么如何计算P(W)呢?用概率的链式规则,链式规则常常用来评估随机变量的联合概率,链式规则如下:
将上面的链式规则计算P(W)可以写作如下:
按照链式规则计算方式,举例如下:
P(“its water is so transparent”) = P(its) × P(water|its) × P(is|its water) × P(so|its water is) × P(transparent|its water is so)
那么下面的问题是如何计算上面每一个概率,比如 P(transparent|its water is so),一种比较直观的计算就是计数然后用除法:
事实上不能用这种方式去计算条件概率,原因有两个:
1.直接这样计算会导致参数空间过大,一个语言模型的参数就是所有的这些条件概率,试想按上面方式计算P(w 5 |w 1 ,w 2 ,w 3 ,w 4 ),这里w i都有一个词典大小取值的可能,记作|V|,则该模型的参数个数是|V|^5,而且这还不包含P(w 4 | w1, w2, w3)的个数,可以看到这样去计算条件概率会使语言模型参数个数过多而无法实用。
2.数据稀疏严重,我的理解是像上面那样计数计算,比如计数分子its water is so transparen,在我们所能见的文本中出现的次数是很小的,这样计算的结果是过多的条件概率会等于0,因为我们根本没有看到足够的文本来统计!
上面的计算方式是通过马尔科夫假设进行简化的,马儿可夫假设是指假设第wi个词语只与它前面的k个词语相关,这样我们就得到前面的条件概率计算简化如下:
这样我们的P(W)计算简化如下:
当k = 0时,这个时候对应的模型叫做一元模型(Unigram model),即wi与它前面的0个词相关,即wi不与任何词相关,每一个词都是相互独立的,P(W)计算如下:
当k = 1时,对应的模型叫做二元模型(Bigram model),此时wi与它前面一个词相关,P(W)计算如下:
同样的,我们可以让k = 2,叫做 trigrams,4-grams,5-grams,当k = N - 1,模型成为n元模型,即N-grams。
总的来说,N-grams有一些不足,因为语言存在一个长距离依赖关系,比如考虑下面的句子:
“The computer which I had just put into the machine room on the fifth floor crashed.”
假如我们要