N-gram模型详解

语言模型(Language Model)

基本概念

什么是语言模型?简言之,语言模型可以理解为是一种用于判度一个句子是否通顺的模型。举例来说,假设我们有一个训练好的语言模型 m o d e l model model,给定两个句子:我喜欢AI、喜欢我AI。显然第一个句子更通顺,或者说出现的可能性更大,所以 m o d e l model model,给出的结果就是 P ( 我 喜 欢 A I ) > P ( 喜 欢 我 A I ) P(我喜欢AI)>P(喜欢我AI) P(AI)>P(AI)

于是,我们得到了语言模型的目标:计算一个句子或者一列词的概率,即
c o m p u t e : p ( s ) = p ( w 1 , w 2 . . . w n ) compute: p(s)=p(w_1, w_2...w_n) compute:p(s)=p(w1,w2...wn)
Chain Rule

计算上面式子的一个方法是基于概率论中的链式法则,即
p ( w 1 , w 2 , . . . , w n ) = p ( w 1 ) p ( w 2 ∣ w 1 ) p ( w 3 ∣ w 1 , w 2 ) . . . p ( w n ∣ w 1 , w 2 . . . w n − 1 ) p(w_1, w_2, ..., w_n) = p(w_1)p(w2|w1)p(w3|w1, w2)...p(w_n|w_1,w_2...w_{n-1}) p(w1,w2,...,wn)=p(w1)p(w2w1)p(w3w1,w2)...p(wnw1,w2...wn1)
等式中的条件概率可以基于对语料库的统计来计算。但是不难发现,假设我们的句子比较长,那么我们要找的短语也会很长,而事实上大多数短语在语料库中是不存在的,这就会造成严重的稀疏性。

Markov Assumption

使用链式法则会出现稀疏性问题,因此我们采用马尔科夫假设,即当前事件只依赖于它前一个或者前几个事件。根据依赖事件数量的不同,上述式子有以下几种计算方式:
p ( s ) = p ( w 1 ) p ( w 2 ∣ w 1 ) p ( w 3 ∣ w 2 ) . . . p ( w n ∣ w n − 1 ) = p ( w 1 ) ∏ i = 2 n p ( w i ∣ w i − 1 ) p(s)=p(w_1)p(w_2|w_1)p(w_3|w_2)...p(w_n|w_{n-1}) \\ =p(w_1)\prod_{i=2}^{n}p(w_i|w_{i-1}) p(s)=p(w1)p(w2w1)p(w3w2)...p(wnwn1)=p(w1)i=2np(wiwi1)

p ( s ) = p ( w 1 ) p ( w 2 ∣ w 1 ) p ( w 3 ∣ w 1 , w 2 ) . . . p ( w n ∣ w n − 1 ) = p ( w 1 ) p ( w 2 ∣ w 1 ) ∏ i = 3 n p ( w i ∣ w i − 2 , w i − 1 ) p(s)=p(w_1)p(w_2|w_1)p(w_3|w_1, w_2)...p(w_n|w_n-1) \\ =p(w_1)p(w_2|w_1)\prod_{i=3}^{n}p(w_i|w_{i-2},w_{i-1}) p(s)=p(w1)p(w2w1)p(w3w1,w2)...p(wnwn1)=p(w1)p(w2w1)i=3np(wiwi2,wi1)

当然,还可以依赖于三个词、四个词……但是依赖的词越多,计算出的概率精度可能就越低。

N-gram模型

N-gram模型是基于马尔科夫假设的一系列基础的语言模型。具体可以分为unigram, bigram, trigram, n-gram。

分类

Unigram

如果我们考虑词语都是独立的,或者说每个词只依赖于其本身,那么目标函数可以改写为
p ( s ) = p ( w 1 ) p ( w 2 ) . . . p ( w n ) = ∏ i = 1 n p ( w i ) p(s)=p(w_1)p(w_2)...p(w_n) \\ =\prod_{i=1}^{n}p(w_i) p(s)=p(w1)p(w2)...p(wn)=i=1np(wi)

Bigram

根据first order的马尔科夫假设,即每个词依赖于它的前一个词
p ( s ) = p ( w 1 ) p ( w 2 ∣ w 1 ) p ( w 3 ∣ w 2 ) . . . p ( w n ∣ w n − 1 ) = p ( w 1 ) ∏ i = 2 n p ( w i ∣ w i − 1 ) p(s)=p(w_1)p(w_2|w_1)p(w_3|w_2)...p(w_n|w_{n-1}) \\ =p(w_1)\prod_{i=2}^{n}p(w_{i}|w_{i-1}) p(s)=p(w1)p(w2w1)p(w3w2)...p(wnwn1)=p(w1)i=2np(wiwi1)

Trigram

根据second order的马尔科夫假设,即每个词依赖于它的前两个词
p ( s ) = p ( w 1 ) p ( w 2 ∣ w 1 ) p ( w 3 ∣ w 1 , w 2 ) . . . p ( w n ∣ w n − 2 , w n − 1 ) = p ( w 1 ) p ( w 2 ∣ w 1 ) ∏ i = 3 n p ( w i ∣ w i − 2 , w i − 1 ) p(s)=p(w_1)p(w_2|w_1)p(w_3|w_1,w_2)...p(w_n|w_{n-2},w_{n-1})\\ =p(w_1)p(w_2|w_1)\prod_{i=3}^{n}p(w_i|w_{i-2},w_{i-1}) p(s)=p(w1)p(w2w1)p(w3w1,w2)...p(wnwn2,wn1)=p(w1)p(w2w1)i=3np(wiwi2,wi1)

N-gram

事实上, N > 2 N\gt2 N>2​的模型都被称为N-gram模型,常用的 N N N一般为1,2,3

模型的训练

N-gram模型是基于对语料库的统计来进行训练的,举例来说,对于Bigram模型,我们要计算 p ( c a t ∣ t h e ) p(cat|the) p(catthe),那么公式为
p ( c a t ∣ t h e ) = C ( t h e , c a t ) C ( t h e ) p(cat|the) = \frac{C(the, cat)}{C(the)} p(catthe)=C(the)C(the,cat)
其中 C ( w i ) C(w_i) C(wi)表示语料库中单词 w i w_i wi出现的次数。

仍然以Bigram模型为例,我们的目标函数是
J = p ( w 1 ) ∏ i = 2 n p ( w i ∣ w i − 1 ) J=p(w_1)\prod_{i=2}^np(w_i|w_{i-1}) J=p(w1)i=2np(wiwi1)
由于又涉及到多个概率连乘问题,所以我们映射到对数空间,即
J , = l o g ( J ) = l o g [ p ( w 1 ) ] + ∑ i = 2 n l o g [ p ( w i ∣ w i − 1 ) ] J^, = log(J) = log[p(w_1)]+\sum_{i=2}^nlog[p(w_i|w_{i-1})] J,=log(J)=log[p(w1)]+i=2nlog[p(wiwi1)]
我们的任务是最大化这个对数似然,因此这种参数估计的方式就叫做MLE(Maximum Log Likelihood)

模型的平滑

在实际预测过程中,我们往往会遇到没有出现过的组合形式,举例来说:

我们的语料库是:“我 非常 喜欢 AI”,“我 喜欢 你”, “AI 是 全民 趋势”,而给定的任务是计算 p ( 你 喜 欢 A I ) p(你喜欢AI) p(AI)​​。假设我们的模型是Bigram,那么这个概率就是:
p ( 你 喜 欢 我 ) = p ( 你 ) p ( 喜 欢 ∣ 你 ) p ( A I ∣ 喜 欢 ) p(你 喜欢 我)=p(你)p(喜欢|你)p(AI|喜欢) p()=p()p()p(AI)
而我们在语料库没有找到“你 喜欢”这种组合,即 C ( 你 , 喜 欢 ) = 0 C(你, 喜欢)=0 C()=0​。那么这样一来整个概率值就是0,这显然是不合适的。为了解决这种问题,我们引入语言模型的平滑,下面介绍三种方法

Add-One Smoothing

Add One Smoothing又被称为拉普拉斯平滑,它的计算公式是(以Bigram为例)
p a d d − 1 ( w i ∣ w i − 1 ) = C ( w i − 1 , w i ) + 1 C ( w i − 1 ) + V p_{add-1}(w_i|w_{i-1})=\frac{C(w_{i-1},w_i)+1}{C(w_{i-1})+V} padd1(wiwi1)=C(wi1)+VC(wi1,wi)+1
即给每个Bigram分子加1,分母加词库大小V。分母加V的目的是保证概率和为1。下面这四张图(两组)清晰地说明了这种方法

Original

N-gram模型详解_第1张图片

N-gram模型详解_第2张图片

After add-one smoothing

N-gram模型详解_第3张图片

N-gram模型详解_第4张图片

但是,这种方法的一个潜在问题就是,它会降低一些原有组合的置信度,详见红框标出的位置。

Add-K Smoothing

在add-one smoothing的基础之上,又提出了add-k smoothing,这种方法与add-one smoothing原理相同,只是扩大了K倍,即
p a d d − k ( w i − 1 ∣ w i ) = C ( w i − 1 , w i ) + k C ( w i − 1 ) + k ∗ V p_{add-k}(w_{i-1}|w_i)=\frac{C(w_{i-1},w_i)+k}{C(w_{i-1})+k*V} paddk(wi1wi)=C(wi1)+kVC(wi1,wi)+k

Interpolation

Interpolation利用的是一种融合的思想,它所解决的是这样的问题:

加入我们的语料库中有“in the”,“kitchen”,而我们要预测的是“in the kitchen”和“in the hell”。显然,如果利用Trigram模型,这两个结果都是0。

所以Interpolation考虑的就是综合利用Unigram、Bigram、Trigram信息以避免出现zero term。具体的计算公式为(以Trigram为例):
p ( w i ∣ w i − 2 , w i − 1 ) = λ 1 p ( w i ∣ w i − 2 , w i − 1 ) + λ 2 p ( w i ∣ w i − 1 ) + λ 3 p ( w i ) p(w_{i}|w_{i-2},w_{i-1})=\lambda_1p(w_i|w_{i-2},w_{i-1})+\lambda_2p(w_i|w_{i-1})+\lambda_3p(w_i) p(wiwi2,wi1)=λ1p(wiwi2,wi1)+λ2p(wiwi1)+λ3p(wi)
其中, λ 1 + λ 2 + λ 3 = 1 \lambda_1+\lambda_2+\lambda_3=1 λ1+λ2+λ3=1​。其实Interpolation做的是对多种N-gram模型的结果的加权平均

模型的评估

对于语言模型,我们的评估指标叫做困惑度perplexityppl的计算有两种公式,以Bigram为例:
1 、 P P L ( M ) = p ( w 1 , w 2 , . . . , w n ) − 1 n = 1 p ( w 1 ) ∏ i = 2 n p ( w i ∣ w i − 1 ) n 1、PPL(M)=p(w_1, w_2, ..., w_n)^{-\frac{1}{n}}=\sqrt[n]{\frac{1}{p(w_1)\prod_{i=2}^n{p(w_i|w_{i-1})}}} 1PPL(M)=p(w1,w2,...,wn)n1=np(w1)i=2np(wiwi1)1

2 、 P P L ( M ) = 2 − x , x = 1 / n ∑ i = 2 n p ( w i ∣ w i − 1 ) 2、PPL(M)=2^{-x},x=1/n\sum_{i=2}^np(w_i|w_{i-1}) 2PPL(M)=2x,x=1/ni=2np(wiwi1)

第二种公式中, x x x为average log likelihood

你可能感兴趣的:(Deep,Learning,NLP,自然语言处理,深度学习,机器学习)