前言
语言模型是什么呢?
标准定义:对于语言序列
w
1
,
w
2
,
.
.
.
,
w
n
w_1,w_2,...,w_n
w1,w2,...,wn,语言模型就是计算该序列的概率,即
P
(
w
1
,
w
2
,
.
.
.
,
w
n
)
P(w_1, w_2,...,w_n)
P(w1,w2,...,wn)。
通俗解释:判断一句话是不是我们正常说的话,即是不是人话。如P(我,打,篮球)>P(篮球,打,我)。
那么怎样评估语言模型好坏呢?这里介绍一个评估指标:perplexity(困惑度)
由于网上有很多对perplexity的解释,这里就不做重复,只是从应用的角度来说说perplexity。
这里推荐一个知乎的解释:https://www.zhihu.com/question/58482430
perplexity
perplexity公式:
p e r p l e x i t y = 2 − x perplexity=2^{-x} perplexity=2−x这里的x为序列的average log probability(平均对数概率),即 x = 1 N l o g P ( w 1 , w 2 , . . . , w N ) x=\frac{1}{N}logP(w_1,w_2,...,w_N) x=N1logP(w1,w2,...,wN)。
perplexity应用举例:
例子1:结合n-gram,假如我们使用2-gram计算
P
(
w
1
,
w
2
,
.
.
.
,
w
N
)
P(w_1,w_2,...,w_N)
P(w1,w2,...,wN),那么
x
=
1
n
l
o
g
P
(
w
1
,
w
2
,
.
.
.
,
w
N
)
=
l
o
g
P
(
w
1
)
+
∑
i
=
2
N
l
o
g
P
(
w
i
∣
w
i
−
1
)
x=\frac{1}{n}logP(w_1,w_2,...,w_N)=logP(w_1)+\sum_{i=2}^NlogP(w_i|w_{i-1})
x=n1logP(w1,w2,...,wN)=logP(w1)+∑i=2NlogP(wi∣wi−1),则对于2-gram的目标函数为:
m
i
n
i
m
i
z
e
p
e
r
p
l
e
x
i
t
y
=
2
−
1
n
[
l
o
g
P
(
w
1
)
+
∑
i
=
2
n
l
o
g
P
(
w
i
∣
w
i
−
1
)
]
=
2
−
x
minimize\,\,perplexity=2^{-\frac{1}{n}[logP(w_1)+\sum_{i=2}^nlogP(w_i|w_{i-1})]}=2^{-x}
minimizeperplexity=2−n1[logP(w1)+∑i=2nlogP(wi∣wi−1)]=2−x当x越大时,perplexity越小,说明模型的效果越好。
例子2:在一个语言模型中,我们通常会遇到oov(out-of-vocabulary)词,如果直接用0概率计算的话,那么会导致整个句子的概率为0,所以我们通常会引入Add-K smoothing的方法解决,以下是2-gram情况下的Add-K smoothing公式
P
A
d
d
−
k
(
w
i
∣
w
i
−
1
)
=
P
(
w
i
,
w
i
−
1
)
+
K
P
(
w
i
−
1
)
+
K
V
K
=
1
,
2
,
.
.
.
,
k
P_{Add-k}({w_i|w_{i-1}})=\frac{P(w_i, w_{i-1})+K}{P{(w_{i-1})+KV}} \,\,\,\,\,\,K=1,2,...,k
PAdd−k(wi∣wi−1)=P(wi−1)+KVP(wi,wi−1)+KK=1,2,...,k那么这个K我们怎么选择,才能使模型达到最好的效果呢?假设我们n-gram的n选定的情况下,这时可以将K当作一个超参数,则我们在验证模型时需要
a
r
g
m
i
n
k
f
(
K
)
argmin_k\,\,f(K)
argminkf(K)