语言模型 language model

语言模型(language model)



一、什么是语言模型

语言模型是根据语言客观事实而进行的语言抽象数学建模,是一种对应关系。语言模型与语言客观事实之间的关系,如同数学上的抽象直线与具体直线之间的关系。
比如:如果输入两句话,’我喜欢NPL‘和’喜欢NLP我‘,计算机是没办法直接判断这两句话那个更符合语法(语义),所以要通过建立一个语言模型来让计算机更清楚哪句话是更通顺的一句话,这就类模型就叫语言模型,语言模型的作用就是判断一句话是否在语法上通顺。即让计算机知道p(’我喜欢NPL‘)>p(’喜欢NLP我‘)

二、几种常见的语言模型

1.Chain Rule

对于一个句子w1,w2,w3…wn,他的概率可以表示为:
p ( w 1 , w 2 , w 3 . . . w n ) = p ( w 1 ) ∗ p ( w 2 ∣ w 1 ) ∗ p ( w 3 ∣ w 1 , w 2 ) . . . p ( w n ∣ w , w 2 , w 3 , . . . w n − 1 ) p(w_1,w_2,w_3...w_n) = p(w_1)*p(w_2|w_1)*p(w_3|w_1,w_2)...p(w_n|w_,w_2,w_3,...w_{n-1}) p(w1,w2,w3...wn)=p(w1)p(w2w1)p(w3w1,w2)...p(wnw,w2,w3,...wn1)
例如p(我喜欢NPL)的值可以通过ChainRule表达如下:
p ( ′ 我 ′ , ′ 喜 欢 ′ , ’ N L P ′ ) = p ( ′ 我 ′ , ′ 喜 欢 ′ ) ∗ p ( ‘ N L P ′ ∣ ′ 我 ′ , ′ 喜 欢 ′ ) p('我','喜欢',’NLP') = p('我','喜欢')*p(‘NLP' | '我','喜欢') p(,,NLP)=p(,)p(NLP,) = p ( ′ 我 ′ ) ∗ p ( ′ 喜 欢 ′ ∣ ’ 我 ‘ ) ∗ p ( ‘ N L P ′ ∣ ′ 我 ′ , ′ 喜 欢 ′ ) = p('我')*p('喜欢'|’我‘)*p(‘NLP' | '我','喜欢') =p()p()p(NLP,)
由于 p(‘我’)、p(‘喜欢’|’我‘)、p(‘NLP’ | ‘我’,‘喜欢’)可以在训练集中通过统计的方法直接计算出来,这样就可以计算出来p(‘我’,‘喜欢’,’NLP’)的值,同样p(’喜欢NLP我‘)也可以用同样的方法计算出来,这样就可以比较那种表达更和法。
但是这种语言模型有很大的缺点:比如,当句子很长的时候,计算一个这样的概率,p(游戏 | 今天 是 周末 我们 去 网吧 打) ,像这样的句子很长,我们很难在文章中找到,所以p(游戏 | 今天 是 周末 我们 去 网吧 打) 的值基本为0。

2.Markov Assumption

为了解决上述问题我们可以使用马尔科夫的假设,p(游戏 | 今天 是 周末 我们 去 网吧 打) ≈ p(游戏 | 打) ,只用到前面一个单词的马尔科夫假设叫first order Markov Assumption, 如果把p(游戏 | 今天 是 周末 我们 去 网吧 打) ≈ p(游戏 | 网吧 打) ,叫second order Markov Assumption。当然还有3rd…nrd。
那么ChainRule就可以变为 p ( w 1 , w 2 , w 3 . . . w n ) = p ( w 1 ) ∗ p ( w 2 ∣ w 1 ) ∗ p ( w 3 ∣ w 2 ) . . . p ( w n ∣ w n − 1 ) p(w_1,w_2,w_3...w_n) = p(w_1)*p(w_2|w_1)*p(w_3|w_2)...p(w_n|w_{n-1}) p(w1,w2,w3...wn)=p(w1)p(w2w1)p(w3w2)...p(wnwn1) 或 者 或者 p ( w 1 , w 2 , w 3 . . . w n ) = 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,w_2,w_3...w_n) = 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(w1,w2,w3...wn)=p(w1)p(w2w1)p(w3w1,w2)...p(wnwn2,wn1) 等 等 等等

3.Unigram、Bigram…N-gram

3.1 Unigram模型

Unigram模型是比马尔科夫更简单的模型,对于句子w1,w2,w3…wn的概率可表示为
p ( w 1 , w 2 , w 3 . . . w n ) = p ( w 1 ) ∗ p ( w 2 ) ∗ p ( w 3 ) . . . p ( w n ) p(w_1,w_2,w_3...w_n)=p(w_1)*p(w_2)*p(w_3)...p(w_n) p(w1,w2,w3...wn)=p(w1)p(w2)p(w3)...p(wn)
Unigram模型十分的简单,但是他没有考虑到语义,只要词语出现的概率高,句子的概率就搞,例如: p ( ′ 我 ′ , ′ 喜 欢 ′ , ′ N L P ′ ) = p ( ′ 我 ′ ) p ( ′ 喜 欢 ′ ) p ( ′ N L P ′ ) p('我','喜欢','NLP') = p('我')p('喜欢')p('NLP') p(,,NLP)=p()p()p(NLP) p ( ′ 喜 欢 ′ , ‘ N L P ′ , ′ 我 ′ ) = p ( ′ 喜 欢 ′ ) p ( ′ N L P ′ ) p ( ′ 我 ′ ) p('喜欢',‘NLP','我') = p('喜欢')p('NLP' )p('我') p(,NLP,)=p()p(NLP)p()这两个概率是一样的。

3.2 Bigram模型

Bigram模型和 first order Markov Assumption一样的
p ( w 1 , w 2 , w 3 . . . w n ) = p ( w 1 ) ∗ p ( w 2 ∣ w 1 ) ∗ p ( w 3 ∣ w 2 ) . . . p ( w n ∣ w n − 1 ) p(w_1,w_2,w_3...w_n) = p(w_1)*p(w_2|w_1)*p(w_3|w_2)...p(w_n|w_{n-1}) p(w1,w2,w3...wn)=p(w1)p(w2w1)p(w3w2)...p(wnwn1)

3.3 trigram模型

Bigram模型和 second order Markov Assumption一样的
p ( w 1 , w 2 , w 3 . . . w n ) = 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,w_2,w_3...w_n) = 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(w1,w2,w3...wn)=p(w1)p(w2w1)p(w3w1,w2)...p(wnwn2,wn1)

提示: 一般都不大于5,n取3、4、5就行了

4 估计语言模型概率(Estimating probability)

Unigram模型 p ( w 1 , w 2 , w 3 . . . w n ) = p ( w 1 ) ∗ p ( w 2 ) ∗ p ( w 3 ) . . . p ( w n ) p(w_1,w_2,w_3...w_n)=p(w_1)*p(w_2)*p(w_3)...p(w_n) p(w1,w2,w3...wn)=p(w1)p(w2)p(w3)...p(wn),那么 p ( w 1 ) , p ( w 2 ) . . . p ( w n ) p(w_1),p(w_2)...p(w_n) p(w1),p(w2)...p(wn)等于什么呢?其实 p ( w 1 ) = N w 1 / V p(w_1)=N_{w1}/V p(w1)=Nw1/V, N w 1 N_{w1} Nw1是文档中w1出现的个数,V是文档所有词的个数。同理 p ( w 2 ) . . . p ( w n ) p(w_2)...p(w_n) p(w2)...p(wn)都可以基于统计计算出来。

Bigram模型 p ( w 1 , w 2 , w 3 . . . w n ) = p ( w 1 ) ∗ p ( w 2 ∣ w 1 ) ∗ p ( w 3 ∣ w 2 ) . . . p ( w n ∣ w n − 1 ) p(w_1,w_2,w_3...w_n) = p(w_1)*p(w_2|w_1)*p(w_3|w_2)...p(w_n|w_{n-1}) p(w1,w2,w3...wn)=p(w1)p(w2w1)p(w3w2)...p(wnwn1) p ( w 2 ∣ w 1 ) p(w_2|w_1) p(w2w1)等于什么呢?其实 p ( w 2 ∣ w 1 ) = N w 1 , w 2 / N w 1 p(w_2|w_1)=N_{w1,w2}/N_{w1} p(w2w1)=Nw1,w2/Nw1, N w 1 , w 2 N_{w1,w2} Nw1,w2是文档中w1,w2紧挨着出现的个数, N w 1 N_{w1} Nw1是文档中w1的个数。同理 p ( w 3 ∣ w 2 ) . . . p ( w n ∣ w n − 1 ) p(w_3|w_2)...p(w_n|w_{n-1}) p(w3w2)...p(wnwn1)都可以基于统计计算出来。

缺点: 比如w1,w2紧挨着在文档中找不到,那么 p ( w 2 ∣ w 1 ) = 0 p(w_2|w_1)=0 p(w2w1)=0,导致 p ( w 1 , w 2 , w 3 . . . w n ) = 0 p(w_1,w_2,w_3...w_n) =0 p(w1,w2,w3...wn)=0

5 Smoothing

5.1 Add-one Smoothing (Laplace Smoothing)

不进行平滑处理的 P M L E ( W i ∣ W i − 1 ) = C ( W i , W i − 1 ) / C ( W i ) P_{MLE}(W_i|W_{i-1}) = C(W_i,W_{i-1})/C(W_i) PMLE(WiWi1)=C(Wi,Wi1)/C(Wi)
Laplace平滑 P A d d − o n e ( W i ∣ W i − 1 ) = [ C ( W i , W i − 1 ) + 1 ] / [ C ( W i ) + V ] P_{Add-one}(W_i|W_{i-1}) = [C(W_i,W_{i-1})+1]/[C(W_i)+V] PAddone(WiWi1)=[C(Wi,Wi1)+1]/[C(Wi)+V]
提示: 分母加V是保证 p ( ∗ ∣ W i − 1 ) 概 率 之 和 为 1 p(*|W_{i-1})概率之和为1 p(Wi1)1,V是词库大小,*表示所有可能的 W i W_i Wi

5.2 Add-k Smoothing

add-k Smoothing: P A d d − k ( W i ∣ W i − 1 ) = [ C ( W i , W i − 1 ) + k ] / [ C ( W i ) + k V ] P_{Add-k}(W_i|W_{i-1}) = [C(W_i,W_{i-1})+k]/[C(W_i)+kV] PAddk(WiWi1)=[C(Wi,Wi1)+k]/[C(Wi)+kV],add-one是add-k当k=1时的特例。
怎么自动选取k呢?
当我们训练好一个模型的时候,通过测试集计算模型的perplexity的到一个f(k)的函数,这样就可以求得最优的k

5.3 Interpolation

Interpolation使用加权平均的方法,比如在trigram中 p ( w n ∣ w n − 1 , w n − 2 ) = λ 1 p ( w n ∣ w n − 1 , w n − 2 ) + λ 2 p ( w n ∣ w n − 1 ) + λ 3 p ( w n ) p(w_n|w_{n-1},w_{n-2}) = λ_1p(w_n|w_{n-1},w_{n-2}) + λ_2p(w_n|w_{n-1}) + λ_3p(w_n) p(wnwn1,wn2)=λ1p(wnwn1,wn2)+λ2p(wnwn1)+λ3p(wn) λ 1 + λ 2 + λ 3 = 1 λ_1+λ_2+λ_3=1 λ1+λ2+λ3=1考虑不同情况下的概率,并将其平均

5.4 Good-Turning Smoothing

小故事
假设你在钓鱼,已经抓到了18只鱼:
10条鲤鱼,3条黑鱼,2条刀鱼,1条鲨鱼,1条草鱼,1条鮼鱼…
问题:

  • Q1:下一个钓到的鱼是鲨鱼的概率是多少? 1/18?
  • Q2:下一条鱼是新鱼种(之前没有出现过)的概率是多少?3/18
  • Q3:既然如此,重新想一下,下一条抓到的鱼为鲨鱼的概率是多少?
    对于没有出现的 P M L E = 0 P_{MLE} = 0 PMLE=0, P G T = N 1 / N P_{GT} =N_1/N PGT=N1/N,N1是出现一条鱼的概率
    例如p(飞鱼) = 3/18=1/6
    对于出现过的 P M L E = c / N , P G T = ( c + 1 ) ∗ N c + 1 / N c P_{MLE} = c/N,P_{GT} = (c+1)*N_{c+1}/N_c PMLE=c/N,PGT=(c+1)Nc+1/Nc
    例如 P ( 草 鱼 ) = ( 1 + 1 ) ∗ N 2 / ( N 1 ∗ N ) = 2 ∗ 1 / ( 3 ∗ 18 ) = 1 / 27 P(草鱼) = (1+1)*N_2/(N_1*N)=2*1/(3*18)=1/27 P()=(1+1)N2/(N1N)=21/(318)=1/27
    缺点: 有的次数可能没有出现过,比如出现4次的都没有出现过就无法计算出现3次的概率

6 评估语言模型 Evaluation of language model

怎么评估A,B两个语言模型的好坏呢?

  • 把A,B两个模型分别放在同一个任务中,比较两个语言模型的结果,判断A,B的表现
    -perplexity评估方法
    对于一个Bigram模型给定一个w1让该模型预测w2,w3…wn,那么
    p e r p l e x i t y = 2 − x , x = ( l o g ( p ( w 1 ) ) + l o g ( p ( w 2 ∣ w 1 ) ) + l o g ( p ( w 3 ∣ w 2 ) ) . . . l o g ( p ( w n ∣ w n − 1 ) ) ) / n perplexity = 2^{-x},x= (log(p(w_1))+log(p(w_2|w_1))+log(p(w_3|w_2))...log(p(w_n|w_{n-1})))/n perplexity=2x,x=(log(p(w1))+log(p(w2w1))+log(p(w3w2))...log(p(wnwn1)))/n
    perplexity 值越小模型越好
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值