当前位置:   article > 正文

NLP学习(5) 语言模型_nlp 模型如何做判断

nlp 模型如何做判断

语言模型 (Language Model)

用口语来说, 就是判断一句话是否在语法上通顺

Compute the probability of a sentence or sequence of words.

Noise Channel Model

由源文本生成目标文本的概率 p ( t e s t ∣ s o u r c e ) ∝ p ( s o u r c e ∣ t e x t ) p ( t e x t ) \text{p}(test|source)\propto \text{p}(source|text)\text{p}(text) p(testsource)p(sourcetext)p(text)

例如, 拼写纠错 p ( 正 确 单 词 ∣ 错 误 单 词 ) ∝ p ( 错 误 单 词 ∣ 正 确 单 词 ) p ( 正 确 单 词 ) \text{p}(正确单词|错误单词)\propto\text{p}(错误单词|正确单词)\text{p}(正确单词) p()p()p()

p ( t e x t ) \text{p}(text) p(text)是语言模型, 目标字符串要符合语法

Unigram

p ( [ 今 天 , 是 , 春 节 , 我 们 , 都 , 休 息 ] ) = p ( 今 天 ) p ( 是 ) p ( 春 节 ) p ( 我 们 ) p ( 都 ) p ( 休 息 ) \text{p}([今天,是,春节,我们,都,休息])=\text{p}(今天)\text{p}(是)\text{p}(春节)\text{p}(我们)\text{p}(都)\text{p}(休息) p([,,,,,])=p()p()p()p()p()p()

p ( [ 今 天 , 春 节 , 是 , 都 , 我 们 , 休 息 ] ) = p ( 今 天 ) p ( 是 ) p ( 春 节 ) p ( 我 们 ) p ( 都 ) p ( 休 息 ) \text{p}([今天,春节,是,都,我们,休息])=\text{p}(今天)\text{p}(是)\text{p}(春节)\text{p}(我们)\text{p}(都)\text{p}(休息) p([,,,,,])=p()p()p()p()p()p()

不通的次序会生成相同的概率.

Bigram

p ( [ 今 天 , 是 , 春 节 , 我 们 , 都 , 休 息 ] ) = p ( 今 天 ) p ( 是 ∣ 今 天 ) p ( 春 节 ∣ 是 ) p ( 我 们 ∣ 春 节 ) p ( 都 ∣ 我 们 ) p ( 休 息 ∣ 都 ) \text{p}([今天,是,春节,我们,都,休息])=\text{p}(今天)\text{p}(是|今天)\text{p}(春节|是)\text{p}(我们|春节)\text{p}(都|我们)\text{p}(休息|都) p([,,,,,])=p()p()p()p()p()p()

p ( [ 今 天 , 春 节 , 是 , 都 , 我 们 , 休 息 ] ) = p ( 今 天 ) p ( 春 节 ∣ 今 天 ) p ( 是 ∣ 春 节 ) p ( 都 ∣ 是 ) p ( 我 们 ∣ 都 ) p ( 休 息 ∣ 我 们 ) \text{p}([今天,春节,是,都,我们,休息])=\text{p}(今天)\text{p}(春节|今天)\text{p}(是|春节)\text{p}(都|是)\text{p}(我们|都)\text{p}(休息|我们) p([,,,,,])=p()p()p()p()p()p()

N-gram

N>2都称为Higher Order

N=3称为Tri-gram

概率估计
Unigram

假设有语料库

5项| 今天 的 天气 很好 啊
5项| 我 很 想 出去 运动
5项| 但 今天 上午 有 课程
4项| 训练营 明天 才 开始
  • 1
  • 2
  • 3
  • 4

P ( [ 今 天 , 开 始 , 训 练 营 , 课 程 ] ) = P ( 今 天 ) P ( 开 始 ) P ( 训 练 营 ) P ( 课 程 ) = 2 19 ⋅ 1 19 ⋅ 1 19 ⋅ 1 19 = 2 19 4

P([,,,])=P()P()P()P()=219119119119=2194
===P([,,,])P()P()P()P()1921911911911942

Bigram

假设有语料库

5项| 今天 的 天气 很好 啊
5项| 我 很 想 出去 运动
5项| 但 今天 上午 想 上课
4项| 训练营 明天 才 开始
  • 1
  • 2
  • 3
  • 4

P ( 上 午 ∣ 今 天 ) = 1 2 P ( 的 ∣ 今 天 ) = 1 2 P ( 出 去 ∣ 想 ) = 1 2 P ( 上 课 ∣ 想 ) = 1 2 P ( [ 今 天 , 上 午 , 想 , 出 去 , 运 动 ] ) = P ( 今 天 ) P ( 上 午 ∣ 今 天 ) P ( 想 ∣ 上 午 ) P ( 出 去 ∣ 想 ) P ( 运 动 ∣ 出 去 ) = 2 19 ⋅ 1 2 ⋅ 1 ⋅ 1 2 ⋅ 1 = 1 36

P(|)=12P(|)=12P(|)=12P(|)=12P([,,,,])=P()P(|)P(|)P(|)P(|)=219121121=136
P()=21P()=21P()=21P()=21===P([,,,,])P()P()P()P()P()192211211361

模型评估
Perplexity

Perplexity= 2 − ( x ) 2^{-(x)} 2(x), x x x: average log likelihood

则perplexity越小, 语言模型越好.

例子: 假设有训练好的Bigram

p(天气|今天)=0.01
p(今天)=0.002
p(很好|天气)=0.1
p(适合|很好)=0.01
p(出去|适合)=0.02
p(运动|出去)=0.1
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

则"今天 天气 很好 适合 出去 运动"的困惑度为

x = log ⁡ 0.002 ⋅ log ⁡ 0.01 ⋅ log ⁡ 0.1 ⋅ log ⁡ 0.01 ⋅ log ⁡ 0.02 ⋅ log ⁡ 0.1 6 perplexity = 2 − x

x=log0.002log0.01log0.1log0.01log0.02log0.16perplexity=2x
xperplexity=6log0.002log0.01log0.1log0.01log0.02log0.1=2x

平滑
Add-one Smoothing

在平滑之前, 在单词 w i − 1 w_{i-1} wi1后出现单词 w i w_i wi的概率是
P M L E ( w i ∣ w i − 1 ) = c ( w i , w i − 1 ) c ( w i − 1 ) P_{MLE}(w_i|w_{i-1})=\frac{c(w_{i},w_{i-1})}{c(w_{i-1})} PMLE(wiwi1)=c(wi1)c(wi,wi1)

加平滑之后,
P A d d − 1 ( w i ∣ w i − 1 ) = c ( w i , w i − 1 ) + 1 c ( w i − 1 ) + V P_{Add-1}(w_i|w_{i-1})=\frac{c(w_{i}, w_{i-1})+1}{c(w_{i-1})+V} PAdd1(wiwi1)=c(wi1)+Vc(wi,wi1)+1

V V V是词典的大小. 因为 P ( w i ) P(w_i) P(wi)可以有 V V V种选择, 所以分母必须加 V V V, 是的 P ( ∗ ∣ w i − 1 ) = 1 P(*|w_{i-1})=1 P(wi1)=1

Add-K Smoothing

x P A d d − 1 ( w i ∣ w i − 1 ) = c ( w i , w i − 1 ) + k c ( w i − 1 ) + k V xP_{Add-1}(w_i|w_{i-1})=\frac{c(w_{i}, w_{i-1})+k}{c(w_{i-1})+kV} xPAdd1(wiwi1)=c(wi1)+kVc(wi,wi1)+k

如何选择最好的 k k k?

  1. k = 1 , 2 , … , 100 k=1,2,\dots,100 k=1,2,,100
  2. 优化(最小化) perplexity = f ( k ) \text{perplexity}=f(k) perplexity=f(k)
Interpolation

计算Trigram的概率时同时考虑Unigram, Bigram, 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(wn|wn1,wn2)=λ1p(wn|wn1,wn2)+λ2p(wn|wn1)+λ3p(wn)
p(wnwn1,wn2)=λ1p(wnwn1,wn2)+λ2p(wnwn1)+λ3p(wn)

其中 λ 1 + λ 2 + λ 3 = 1 \lambda_1+\lambda_2+\lambda_3=1 λ1+λ2+λ3=1

Good-Turning Smoothing

[视频不存在]

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小小林熬夜学编程/article/detail/348036
推荐阅读
相关标签
  

闽ICP备14008679号