语言模型 (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(test∣source)∝p(source∣text)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项| 训练营 明天 才 开始
P ( [ 今 天 , 开 始 , 训 练 营 , 课 程 ] ) = P ( 今 天 ) P ( 开 始 ) P ( 训 练 营 ) P ( 课 程 ) = 2 19 ⋅ 1 19 ⋅ 1 19 ⋅ 1 19 = 2 19 4 \begin{aligned} & P([今天,开始,训练营,课程]) \\ = & P(今天)P(开始)P(训练营)P(课程) \\ = & {2 \over 19}\cdot {1 \over 19}\cdot {1 \over 19}\cdot {1 \over 19} \\ = & {2 \over {19}^4} \end{aligned} ===P([今天,开始,训练营,课程])P(今天)P(开始)P(训练营)P(课程)192⋅191⋅191⋅1911942
Bigram
假设有语料库
5项| 今天 的 天气 很好 啊
5项| 我 很 想 出去 运动
5项| 但 今天 上午 想 上课
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 \begin{matrix} \begin{aligned} P(上午|今天)={1 \over 2}\\ P(的|今天)={1 \over 2}\\ P(出去|想)={1\over 2}\\ P(上课|想)={1\over 2} \end{aligned} & \begin{aligned} &P([今天,上午,想,出去,运动]) \\ =&P(今天)P(上午|今天)P(想|上午)P(出去|想)P(运动|出去)\\ =&{2\over 19}\cdot {1\over 2}\cdot 1\cdot{1 \over 2}\cdot 1\\ =&{1\over 36} \end{aligned} \end{matrix} P(上午∣今天)=21P(的∣今天)=21P(出去∣想)=21P(上课∣想)=21===P([今天,上午,想,出去,运动])P(今天)P(上午∣今天)P(想∣上午)P(出去∣想)P(运动∣出去)192⋅21⋅1⋅21⋅1361
模型评估
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
则"今天 天气 很好 适合 出去 运动"的困惑度为
x = log 0.002 ⋅ log 0.01 ⋅ log 0.1 ⋅ log 0.01 ⋅ log 0.02 ⋅ log 0.1 6 perplexity = 2 − x \begin{aligned} x&=\frac{\log 0.002\cdot \log 0.01\cdot \log 0.1\cdot \log 0.01\cdot \log 0.02\cdot \log 0.1}{6}\\ \text{perplexity}&=2^{-x} \end{aligned} xperplexity=6log0.002⋅log0.01⋅log0.1⋅log0.01⋅log0.02⋅log0.1=2−x
平滑
Add-one Smoothing
在平滑之前, 在单词
w
i
−
1
w_{i-1}
wi−1后出现单词
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(wi∣wi−1)=c(wi−1)c(wi,wi−1)
加平滑之后,
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}
PAdd−1(wi∣wi−1)=c(wi−1)+Vc(wi,wi−1)+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(∗∣wi−1)=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} xPAdd−1(wi∣wi−1)=c(wi−1)+kVc(wi,wi−1)+k
如何选择最好的 k k k?
- k = 1 , 2 , … , 100 k=1,2,\dots,100 k=1,2,…,100
- 优化(最小化) 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 ) \begin{aligned} p(w_n|w_{n-1},w_{n-2})&=\lambda_1 p(w_n|w_{n-1},w_{n-2})\\ &+\lambda_2 p(w_n|w_{n-1})\\ &+\lambda_3 p(w_n) \end{aligned} p(wn∣wn−1,wn−2)=λ1p(wn∣wn−1,wn−2)+λ2p(wn∣wn−1)+λ3p(wn)
其中 λ 1 + λ 2 + λ 3 = 1 \lambda_1+\lambda_2+\lambda_3=1 λ1+λ2+λ3=1
Good-Turning Smoothing
[视频不存在]