语言模型
1.Chain rule以及马尔科夫假设
1.1Chain rule
预备知识:P(AB)=P(A∣B)⋅P(B)=P(B∣A)⋅P(A)
Chain rule:
P(ABCD)=P(A)⋅P(B∣A)⋅P(C∣AB)⋅P(D∣ABC)=P(AB)⋅P(C∣AB)⋅P(D∣ABC)=P(ABCD)
同理,
P(w1w2⋯wn)=P(w1)⋅P(w2∣w1)⋯P(wn∣w1w2⋯wn−1)
语言模型中的Chain rule:
P(今天,是,春节)=P(今天)⋅P(是∣今天)⋅P(春节∣今天,是)
如下图所示,P(休息|今天,是,春节,我们,都) 这个概率在文章中可能出现的概率是1/2,而P(运动|今天,是,春节,) 在文章中出现的概率却是0,因此对于那些很长的句子来说,其出现的概率就大概率为0,从而引出了马尔科夫假设。
马尔科夫假设:
一阶:
P(w1w2w3w4⋯wn)=P(w1)⋅P(w2∣w1)⋅P(w3∣w2)⋯P(wn∣wn−1)
二阶:
P(w1w2w3w4⋯wn)=P(w1)⋅P(w2∣w1)⋅P(w3∣w1w2)⋯P(wn∣wn−2wn−1)
三阶:
P(w1w2w3w4⋯wn)=P(w1)⋅P(w2∣w1)⋅P(w3∣w1w2)⋅P(w4∣w1w2w3)⋯P(wn∣wn−3wn−2wn−1)
例子:
使用一阶马尔科夫假设,可以计算出“今天是周日”出现的概率是大于“今天周日是”,即“今天是周日”在语意上强于“今天周日是”。
2.Unigram、Bigram和N-gram
Unigram:假设了w1到wn是相互独立的,但是存在一个问题。举个例子,当使用Unigram计算时,P(今天是春节)与P(春节是今天)的概率是相同的。
P(w1w2w3w4⋯wn)=P(w1)⋅P(w2)⋅P(w3)⋯P(wn)
Bigram:使用了一阶马尔科夫假设,此时n=2,认为第n个次出现的概率与前n-1个词有关,因此2-1=1,为一阶马尔科夫假设。
P(w1w2w3w4⋯wn)=P(w1)⋅P(w2∣w1)⋅P(w3∣w2)⋯P(wn∣wn−1)
N-gram:使用了n阶马尔科夫假设,以n=3为例,认为第n个次出现的概率与前n-1个词有关,因此3-1=2,为二阶马尔科夫假设。
P(w1w2w3w4⋯wn)=P(w1)⋅P(w2∣w1)⋅P(w3∣w2w1)⋯P(wn∣wn−2wn−1)
3.估计语言模型的概率
使用Unigram来估计概率:
例:假设语料库中总的单词个数为19个,分别计算每个次出现的概率,如下图所示。
使用Bigram来估计概率:
例:假设语料库中总的单词个数为19个,分别计算每个次出现的概率,如下图所示。
使用N-gram来估计概率:
例:假设语料库中总的单词个数为19个,分别计算每个次出现的概率,如下图所示。
4.评估语言模型-Perplexity
评估语言模型的好坏,理想情况下,是找到一个文章,使用A、B两个语言模型分别评估该文章(比如在篇文章中有多少语言错误),最后比较准确率,但该方法耗时且麻烦。
Perplexity=2−x
x=n1所有单词∑log(P(单个单词))
用上述方法计算一句话,Perplexity值越小越好。
5.Add-one平滑(拉普拉斯平滑)、Add-K平滑
Add-one平滑:
PAdd−one(wi∣wi−1)=c(wi−1)+Vc(wi−1wi)+1
c为该词出现的概率,V为总的单词数。(途中公式有误,分母为wi-1)
Add-K平滑:
PAdd−one(wi∣wi−1)=c(wi−1)+kVc(wi−1wi)+k
k为自然数1,2,3.
如何确定K?
两种方法,一是K=1,2,3,…穷举,选择Perplexity最好的一个。二是将K作为一个参数,直接带入Perplexity公式中,最后使得f(K)最小,得到K。
6.Interpolation平滑
有C(in the kitchen)=0,C(the kitchen)=3,C(kitchen)=4和C(arboretum)=0出现的次数,计算P(kitchen|in the)和P(arboretum|in the)。
会发现P(kitchen|in the)=P(arboretum|in the)=0。但是在现实生活中,in the kitchen使用的概率会远大于in the arboretum。所以引入Interpolation平滑,在计算概率时同时考虑Unigram、Bigram和Trigram出现的频次。
P(wn∣wn−2wn−1)=λ1P(wn∣wn−2wn−1)+λ2P(wn∣wn−1)+λ3P(wn)
其中,λ1+λ2+λ3=1。