语言模型

语言模型

1.Chain rule以及马尔科夫假设

1.1Chain rule

预备知识:P(AB)=P(AB)P(B)=P(BA)P(A)P(AB)=P(A|B) \cdot P(B)=P(B|A) \cdot P(A)
Chain rule:
P(ABCD)=P(A)P(BA)P(CAB)P(DABC)=P(AB)P(CAB)P(DABC)=P(ABCD) \begin{aligned} {P(ABCD)}&=P(A) \cdot P(B | A) \cdot P(C | AB) \cdot P(D | ABC) \\ &=P(AB) \cdot P(C | AB) \cdot P(D | ABC) \\ &=P(ABCD) \end{aligned}
同理,
P(w1w2wn)=P(w1)P(w2w1)P(wnw1w2wn1) P(w_{1}w_{2}\cdots w_{n})=P(w_{1}) \cdot P(w_{2} | w_{1}) \cdots P(w_{n} | w_{1}w_{2}\cdots w_{n-1})
语言模型中的Chain rule:
P(,,)=P()P()P(,) P(今天,是,春节)=P(今天) \cdot P(是 | 今天) \cdot P(春节 | 今天,是)
如下图所示,P(休息|今天,是,春节,我们,都) 这个概率在文章中可能出现的概率是1/2,而P(运动|今天,是,春节,) 在文章中出现的概率却是0,因此对于那些很长的句子来说,其出现的概率就大概率为0,从而引出了马尔科夫假设。语言模型
马尔科夫假设:
一阶:
P(w1w2w3w4wn)=P(w1)P(w2w1)P(w3w2)P(wnwn1) P(w_{1}w_{2}w_{3}w_{4}\cdots w_{n})=P(w_{1}) \cdot P(w_{2}|w_{1}) \cdot P(w_{3}|w_{2}) \cdots P(w_{n}|w_{n-1})
二阶:
P(w1w2w3w4wn)=P(w1)P(w2w1)P(w3w1w2)P(wnwn2wn1) P(w_{1}w_{2}w_{3}w_{4}\cdots w_{n})=P(w_{1}) \cdot P(w_{2}|w_{1}) \cdot P(w_{3}|w_{1}w_{2}) \cdots P(w_{n}|w_{n-2}w_{n-1})
三阶:
P(w1w2w3w4wn)=P(w1)P(w2w1)P(w3w1w2)P(w4w1w2w3)P(wnwn3wn2wn1) P(w_{1}w_{2}w_{3}w_{4}\cdots w_{n})=P(w_{1}) \cdot P(w_{2}|w_{1}) \cdot P(w_{3}|w_{1}w_{2}) \cdot P(w_{4}|w_{1}w_{2}w_{3}) \cdots P(w_{n}|w_{n-3}w_{n-2}w_{n-1})
例子:
语言模型
使用一阶马尔科夫假设,可以计算出“今天是周日”出现的概率是大于“今天周日是”,即“今天是周日”在语意上强于“今天周日是”。

2.Unigram、Bigram和N-gram

Unigram:假设了w1到wn是相互独立的,但是存在一个问题。举个例子,当使用Unigram计算时,P(今天是春节)与P(春节是今天)的概率是相同的。
P(w1w2w3w4wn)=P(w1)P(w2)P(w3)P(wn) P(w_{1}w_{2}w_{3}w_{4}\cdots w_{n})=P(w_{1}) \cdot P(w_{2}) \cdot P(w_{3}) \cdots P(w_{n})
Bigram:使用了一阶马尔科夫假设,此时n=2,认为第n个次出现的概率与前n-1个词有关,因此2-1=1,为一阶马尔科夫假设。
P(w1w2w3w4wn)=P(w1)P(w2w1)P(w3w2)P(wnwn1) P(w_{1}w_{2}w_{3}w_{4}\cdots w_{n})=P(w_{1}) \cdot P(w_{2}|w_{1}) \cdot P(w_{3}|w_{2}) \cdots P(w_{n}|w_{n-1})
N-gram:使用了n阶马尔科夫假设,以n=3为例,认为第n个次出现的概率与前n-1个词有关,因此3-1=2,为二阶马尔科夫假设。
P(w1w2w3w4wn)=P(w1)P(w2w1)P(w3w2w1)P(wnwn2wn1) P(w_{1}w_{2}w_{3}w_{4}\cdots w_{n})=P(w_{1}) \cdot P(w_{2}|w_{1}) \cdot P(w_{3}|w_{2}w_{1}) \cdots P(w_{n}|w_{n-2}w_{n-1})

3.估计语言模型的概率

使用Unigram来估计概率:
例:假设语料库中总的单词个数为19个,分别计算每个次出现的概率,如下图所示。
语言模型
使用Bigram来估计概率:
例:假设语料库中总的单词个数为19个,分别计算每个次出现的概率,如下图所示。
语言模型

使用N-gram来估计概率:
例:假设语料库中总的单词个数为19个,分别计算每个次出现的概率,如下图所示。
语言模型

4.评估语言模型-Perplexity

评估语言模型的好坏,理想情况下,是找到一个文章,使用A、B两个语言模型分别评估该文章(比如在篇文章中有多少语言错误),最后比较准确率,但该方法耗时且麻烦。
Perplexity=2x Perplexity=2^{-x}
x=1nlog(P())x=\displaystyle\frac{1}{n}\sum_{所有单词}log(P(单个单词))
用上述方法计算一句话,Perplexity值越小越好。

5.Add-one平滑(拉普拉斯平滑)、Add-K平滑

Add-one平滑:
PAddone(wiwi1)=c(wi1wi)+1c(wi1)+V P_{Add-one}(w_{i}|w_{i-1})=\frac{c(w_{i-1}w_{i})+1}{c(w_{i-1})+V}
c为该词出现的概率,V为总的单词数。(途中公式有误,分母为wi-1)
语言模型
Add-K平滑:
PAddone(wiwi1)=c(wi1wi)+kc(wi1)+kV P_{Add-one}(w_{i}|w_{i-1})=\frac{c(w_{i-1}w_{i})+k}{c(w_{i-1})+kV}
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(wnwn2wn1)=λ1P(wnwn2wn1)+λ2P(wnwn1)+λ3P(wn) \begin{aligned}P(w_{n}|w_{n-2}w_{n-1})&=\lambda_{1}P(w_{n}|w_{n-2}w_{n-1})\\&+\lambda_{2}P(w_{n}|w_{n-1})\\&+\lambda_{3}P(w_{n}) \end{aligned}
其中,λ1+λ2+λ3=1\lambda_{1}+\lambda_{2}+\lambda_{3}=1