Perplexity,翻译为中文的意思为:困惑、混乱。在NLP中,表示语言模型的困惑度,是交叉熵的指数形式,可以作为语言模型的评价指标。Perplexity越低,说明模型拟合效果越好。Perplexity 计算公式如下:
P
e
r
p
l
e
x
i
t
y
(
S
)
=
p
(
w
1
,
w
2
,
w
3
,
.
.
.
,
w
m
)
−
1
/
m
=
∏
i
=
2
m
1
p
(
w
i
∣
w
1
,
w
2
,
w
3
,
.
.
.
,
w
i
−
1
)
m
Perplexity(S) = p(w_1, w_2, w_3,...,w_m)^{-1/m}\\ = \sqrt[m]{\prod_{i=2}^m \frac{1}{ p(w_i|w_1, w_2, w_3,...,w_{i-1})}}
Perplexity(S)=p(w1,w2,w3,...,wm)−1/m=mi=2∏mp(wi∣w1,w2,w3,...,wi−1)1
简单来说,perplexity刻画的是语言模型预测一个语言样本的能力,比如已经知道了
(
w
1
,
w
2
,
w
3
,
.
.
.
,
w
m
)
(w_1, w_2, w_3,...,w_m)
(w1,w2,w3,...,wm)这句话会出现在语料库之中,那么通过语言模型计算得到这句话的概率越高,说明语言模型对这个语料库拟合的越好。
在语言模型的训练中,通常采用perplexity的对数表达形式:
log ( p e r p l e x i t y ( S ) ) = − 1 m ∑ i = 2 m p ( w 1 , w 2 , w 3 , . . . , w m ) \text{log}(perplexity(S)) =-\frac{1}{m} \sum_{i=2}^{m} p(w_1, w_2, w_3,...,w_m) log(perplexity(S))=−m1i=2∑mp(w1,w2,w3,...,wm)
在数学上,log perplexity 可以看作真实分布与预测分布之间的交叉熵 Cross Entropy, 交叉熵描述了两个概率分布之间的一种距离,假设
x
x
x 是一个离散变量,
u
(
x
)
u(x)
u(x)
v
(
x
)
v(x)
v(x) 是两个与
x
x
x 相关的概率分布,那么
u
,
v
u, v
u,v 之间的交叉熵的定义是分布
u
u
u 下
−
log
(
v
(
x
)
)
-\text{log}(v(x))
−log(v(x)) 的期望值:
H
(
u
,
v
)
=
E
u
[
−
l
o
g
(
v
(
x
)
]
=
−
∑
x
u
(
x
)
l
o
g
(
v
(
x
)
)
H(u, v) = E_u[-log(v(x)]=-\sum_x{u(x)log(v(x))}
H(u,v)=Eu[−log(v(x)]=−x∑u(x)log(v(x))
我们把
x
x
x 看作是单词,
u
(
x
)
u(x)
u(x) 表示每个位置上单词的真实分布,
u
(
x
∣
w
1
,
w
2
,
w
3
,
.
.
.
,
w
i
−
1
)
=
{
1
x
=
w
i
0
x
≠
w
i
u(x|w_1, w_2, w_3,...,w_{i-1}) = \begin{cases} 1& \textstyle{x=w_i}\\ 0& \textstyle{x\neq w_i} \end{cases}
u(x∣w1,w2,w3,...,wi−1)={10x=wix=wi
v
(
x
)
v(x)
v(x)是模型的预测分布
p
(
w
i
∣
w
1
,
w
2
,
w
3
,
.
.
.
,
w
i
−
1
)
p(w_i|w_1, w_2, w_3,...,w_{i-1})
p(wi∣w1,w2,w3,...,wi−1) ,那么即有
H
(
u
,
v
)
=
−
∑
x
u
(
x
)
l
o
g
(
v
(
x
)
)
=
−
1
m
∑
i
=
2
m
(
∑
x
u
(
x
∣
w
1
,
w
2
,
w
3
,
.
.
.
,
w
i
−
1
)
p
(
w
i
∣
w
1
,
w
2
,
w
3
,
.
.
.
,
w
i
−
1
)
)
=
−
1
m
∑
i
=
2
m
(
1
×
p
(
w
i
∣
w
1
,
w
2
,
w
3
,
.
.
.
,
w
i
−
1
)
+
∑
x
≠
w
i
0
×
p
(
w
i
∣
w
1
,
w
2
,
w
3
,
.
.
.
,
w
i
−
1
)
)
=
−
1
m
∑
i
=
2
m
p
(
w
i
∣
w
1
,
w
2
,
w
3
,
.
.
.
,
w
i
−
1
)
=
log
(
p
e
r
p
l
e
x
i
t
y
(
S
)
)
H(u, v) =-\sum_x{u(x)log(v(x))}\\ =-\frac{1}{m} \sum_{i=2}^{m} (\sum_xu(x|w_1, w_2, w_3,...,w_{i-1})p(w_i|w_1, w_2, w_3,...,w_{i-1}))\\ =-\frac{1}{m} \sum_{i=2}^{m} (1\times p(w_i|w_1, w_2, w_3,...,w_{i-1}) + \sum_{x\neq w_i} 0\times p(w_i|w_1, w_2, w_3,...,w_{i-1}))\\ =-\frac{1}{m} \sum_{i=2}^{m} p(w_i|w_1, w_2, w_3,...,w_{i-1})\\ = \text{log}(perplexity(S))
H(u,v)=−x∑u(x)log(v(x))=−m1i=2∑m(x∑u(x∣w1,w2,w3,...,wi−1)p(wi∣w1,w2,w3,...,wi−1))=−m1i=2∑m(1×p(wi∣w1,w2,w3,...,wi−1)+x=wi∑0×p(wi∣w1,w2,w3,...,wi−1))=−m1i=2∑mp(wi∣w1,w2,w3,...,wi−1)=log(perplexity(S))
可以看出, log ( p e r p l e x i t y ( S ) ) \text{log}(perplexity(S)) log(perplexity(S))和交叉熵是等价的。