N-gram介绍

1、简介

N-gram是一种基于统计的语言模型,常常用来做句子相似度比较,句子合理性判断。(语言模型就是用来计算一个句子的概率的模型,也就是判断一句话是否合理的概率,RNN是神经语言模型)

N-Gram是基于一个假设:第n个词出现的概率与前n-1个词相关,而与其他任何词不相关。因此整个句子出现的概率就等于各个词出现的概率的乘积。各个词的概率可以通过语料中统计得到。假设句子 T T T是有词序列 w 1 , w 2 , w 3 . . . w n w_{1},w_{2},w_{3}...w_{n} w1,w2,w3...wn组成,用公式表示N-Gram语言模型如下:
P ( T ) = P ( w 1 ) p ( w 2 ) p ( w 3 ) p ( 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 3... ) P(T)=P(w1)p(w2)p(w3)p(wn)=p(w1)p(w2|w1)p(w3|w1w2)...p(wn|w1w2w3...) P(T)=P(w1)p(w2)p(w3)p(wn)=p(w1)p(w2w1)p(w3w1w2)...p(wnw1w2w3...)

2、N-gram中的数据平滑方法:

当N变大时,更容易出现这样的状况:某些N-gram从未出现过,这就是稀疏问题。

例如,在bi-gram中,若词库中有20k个词,那么两两组合就有近2亿个组合。其中的很多组合在语料库中都没有出现,从而整个句子的概率就会为0。最后的结果是,我们的模型只能计算零星的几个句子的概率,而大部分的句子算得的概率是0,这显然是不合理的。

2.1 +1法

对所有的频率都加1,因此对于unigram而言有:
P a d d 1 ( w i ) = C ( w i ) + 1 M + ∣ V ∣ P_{add1}(w_{i})=\frac{C(w_{i})+1}{M+|V|} Padd1(wi)=M+VC(wi)+1
同理对bigram有:
P a d d 1 ( w i ∣ w i − 1 ) = C ( w i − 1 w i ) + 1 C ( w i − 1 ) + ∣ V ∣ P_{add1}(w_{i}|w_{i-1})=\frac{C(w_{i-1}w_{i})+1}{C(w_{i-1})+|V|} Padd1(wiwi1)=C(wi1)+VC(wi1wi)+1
显然它也并不完美。由于训练语料中未出现过的N-gram数量太多,平滑后,所有未出现的N-gram占据了整个概率分布中的一个很大的比例。因此,在NLP中,Add-one给训练语料中没有出现过的N-gram 分配了太多的概率空间。此外,认为所有未出现的N-gram概率相等是否合理其实也值得商榷。而且,对于出现在训练语料中的那些N-gram,都增加同样的频度值,这是否欠妥,我们并不能给出一个明确的答案。

2.2 +k法

该方法是由+1法衍生出来,k是一个小于1的正数,因此计算公式变成了:
P a d d k ( w i ∣ w i − n + 1 . . . w i − 1 ) = C ( w i − n + 1 . . . w i ) + k C ( w i − n + 1 . . . w i − 1 ) + k ∣ V ∣ P_{addk}(w_i|w_{i-n+1}...w_{i-1})=\frac{C(w_{i-n+1}...w_i)+k}{C(w_{i-n+1}...w_{i-1})+k|V|} Paddk(wiwin+1...wi1)=C(win+1...wi1)+kVC(win+1...wi)+k

2.3 内插法

P ( w n ∣ w n − 2 w n − 1 ) = 0 P(w_n|w_{n-2}w_{n-1})=0 P(wnwn2wn1)=0时,而 P ( w n ∣ w n − 1 ) > 0 P(w_n|w_{n-1})>0 P(wnwn1)>0 P ( w n ) > 0 P(w_n)>0 P(wn)>0,则加权平均后的概率不为0,从而达到平滑的效果,如下:
P ^ ( w n ∣ w n − 2 w n − 1 ) = λ 1 P ( w n ∣ w n − 1 ) + λ 2 P ( w n ) \hat P(w_n|w_{n-2}w_{n-1})=\lambda_1P(w_n|w_{n-1})+\lambda_2P(w_n) P^(wnwn2wn1)=λ1P(wnwn1)+λ2P(wn)

2.4 回溯法

回溯法与内插有点像,只是它会尽可能地用最高阶组合计算概率,当高阶组合不存在时,退而求其次找次低阶,直到找到非零组合为止,如下:
P ( w i ∣ w i − n + 1 . . . w i − 1 ) = { P ( w i ∣ w i − n + 1 . . . w i − 1 ) C ( w i − n + 1 . . . w i − 1 ) > 0 α ( w i − n + 1 . . . w i − 1 ) P ( w i ∣ w i − n + 2 . . . w i − 1 ) otherwise P(w_i|w_{i-n+1}...w_{i-1})= \begin{cases} P(w_i|w_{i-n+1}...w_{i-1})& \text C{(w_{i-n+1}...w_{i-1})>0}\\ \alpha(w_{i-n+1}...w_{i-1})P(w_i|w_{i-n+2}...w_{i-1})& \text{otherwise} \end{cases} P(wiwin+1...wi1)={P(wiwin+1...wi1)α(win+1...wi1)P(wiwin+2...wi1)C(win+1...wi1)>0otherwise

你可能感兴趣的:(深度学习)