赞
踩
困惑度(Perplexity)是衡量语言模型好坏的一个常用指标。语言模型(language model)可以预测序列(比如一个句子)中每个时间步词元(比如一个句子中的逐个单词)的概率分布,继而计算一个序列的概率。
一个好的语言模型应该有更高的概率生成一个好的序列,即生成的序列不应该让人感到很困惑,困惑度的核心思想是:序列生成的概率越大,其困惑度越小,因此可以使用困惑度这个指标来评估语言模型的好坏。
深度学习中,困惑度的公式为:
e x p [ − 1 n ∑ t = 1 n l o g P ( x t ∣ x t − 1 , x t − 2 , . . . , x 1 ) ] exp[-{1 \over{n}}\sum_{t=1}^{n} log P(x_t|x_{t-1},x_{t-2},...,x_1)] exp[−n1∑t=1nlogP(xt∣xt−1,xt−2,...,x1)]
我们看下困惑度的公式是怎么得到的。
序列(比如句子)通常由词元(比如单词或字符)组成:
S = ( x 1 , x 2 , . . . , x n ) S=(x_1,x_2,...,x_n) S=(x1,x2,...,xn)
其中 n n n 是序列的长度。生成此序列的概率为:
P ( S ) = P ( x 1 , x 2 , . . . , x n ) ( 1 ) P(S)=P(x_1,x_2,...,x_n) \ \ \ \ \ (1) P(S)=P(x1,x2,...,xn) (1)
一个序列中每个时间步的词元的生成概率不是完全独立的,而是会受到前面一些词元的影响,因此
P
(
x
1
,
x
2
,
.
.
.
,
x
n
)
=
P
(
x
1
)
⋅
P
(
x
2
∣
x
1
)
⋅
P
(
x
3
∣
x
2
,
x
1
)
⋅
.
.
.
⋅
P
(
x
n
∣
x
n
−
1
,
x
n
−
2
,
.
.
.
,
w
1
)
=
∏
t
=
1
n
P
(
x
t
∣
x
t
−
1
,
x
t
−
2
,
.
.
.
,
x
1
)
(
2
)
P
(
S
)
P(S)
P(S)越大,则说明语言模型的拟合效果越好,求
P
(
S
)
P(S)
P(S)的最大值相当于求
−
l
o
g
P
(
W
)
-logP(W)
−logP(W)的最小值,再对词元数
n
n
n 取个平均得:
−
1
n
l
o
g
P
(
S
)
=
−
1
n
l
o
g
∏
t
=
1
n
P
(
x
t
∣
x
t
−
1
,
x
t
−
2
,
.
.
.
,
x
1
)
)
=
−
1
n
∑
t
=
1
n
l
o
g
P
(
x
t
∣
x
t
−
1
,
x
t
−
2
,
.
.
.
,
x
1
)
(
3
)
式
(
3
)
(3)
(3) 相当于这个序列中
n
n
n 个词元交叉熵损失的平均值。
语言模型本质上也是个分类问题,对于一个包含 n n n 个词元的序列(句子),里面的每个词元都会做一次预测,然后计算预测结果与实际值的交叉熵损失。因为这个序列包含 n n n 个词元,所以要做 n n n 次预测和交叉熵损失的计算才能得到整个序列的平均交叉熵。
交叉熵的理解可参考 交叉熵 这篇文章
假设共有 J J J 个不同的词元
J = ( w 1 , w 2 , . . . , w J ) J=(w_1,w_2,...,w_J) J=(w1,w2,...,wJ)
对于序列 S S S 在第 t t t 个位置上的词元 x t x_t xt ,它属于 J J J 个词元的预测概率分布与真实概率分布分别为 P ( W ) 、 Q ( W ) P(W)、Q(W) P(W)、Q(W),其中
p j = P ( W = w j ) = P w j ( x t ∣ x t − 1 , x t − 2 , . . . , x 1 ) , j = 1 , 2 , 3 , . . . , J p_j=P(W=w_j)=P_{w_j}(x_t|x_{t-1},x_{t-2},...,x_1), \ \ j=1,2,3,...,J pj=P(W=wj)=Pwj(xt∣xt−1,xt−2,...,x1), j=1,2,3,...,J
q j = Q ( W = w j ) = Q w j ( x t ∣ x t − 1 , x t − 2 , . . . , x 1 ) , j = 1 , 2 , 3 , . . . , J q_j=Q(W=w_j)=Q_{w_j}(x_t|x_{t-1},x_{t-2},...,x_1), \ \ j=1,2,3,...,J qj=Q(W=wj)=Qwj(xt∣xt−1,xt−2,...,x1), j=1,2,3,...,J
则两个概率分布的交叉熵损失可表示为:
H ( Q , P ) = − ∑ j = 1 J q j l o g p j = − ∑ j = 1 J Q w j ( x t ∣ x t − 1 , x t − 2 , . . . , x 1 ) l o g P w j ( x t ∣ x t − 1 , x t − 2 , . . . , x 1 ) H(Q,P)=-\sum_{j=1}^Jq_j log p_j=-\sum_{j=1}^J Q_{w_j}(x_t|x_{t-1},x_{t-2},...,x_1) log P_{w_j}(x_t|x_{t-1},x_{t-2},...,x_1) H(Q,P)=−∑j=1Jqjlogpj=−∑j=1JQwj(xt∣xt−1,xt−2,...,x1)logPwj(xt∣xt−1,xt−2,...,x1)
假设
w
w
w 是序列
S
S
S 在第
t
t
t 个位置上真实的词元,即
x
t
=
w
x_t=w
xt=w ,则真实分布
Q
(
W
)
Q(W)
Q(W) 可表示为:
Q
w
j
(
x
t
∣
x
t
−
1
,
x
t
−
2
,
.
.
.
,
x
1
)
=
{
1
,
w
j
=
w
0
,
w
j
≠
w
Q_{w_j}(x_t|x_{t-1},x_{t-2},...,x_1)= \left\{
这个式子可对应深度学习中分类模型标签向量的表示:一般真实值位置为1,其他位置都为0,故:
H
(
Q
,
P
)
=
−
∑
j
=
1
J
Q
w
j
(
x
t
∣
x
t
−
1
,
x
t
−
2
,
.
.
.
,
x
1
)
l
o
g
P
w
j
(
x
t
∣
x
t
−
1
,
x
t
−
2
,
.
.
.
,
x
1
)
=
−
[
Q
w
(
x
t
∣
x
t
−
1
,
x
t
−
2
,
.
.
.
,
x
1
)
l
o
g
P
w
(
x
t
∣
x
t
−
1
,
x
t
−
2
,
.
.
.
,
x
1
)
+
∑
w
j
≠
w
Q
w
j
(
x
t
∣
x
t
−
1
,
x
t
−
2
,
.
.
.
,
x
1
)
l
o
g
P
w
j
(
x
t
∣
x
t
−
1
,
x
t
−
2
,
.
.
.
,
x
1
)
]
=
−
[
1
⋅
l
o
g
P
w
(
x
t
∣
x
t
−
1
,
x
t
−
2
,
.
.
.
,
x
1
)
+
∑
w
j
≠
w
0
⋅
l
o
g
P
w
j
(
x
t
∣
x
t
−
1
,
x
t
−
2
,
.
.
.
,
x
1
)
]
=
−
l
o
g
P
w
(
x
t
∣
x
t
−
1
,
x
t
−
2
,
.
.
.
,
x
1
)
序列
S
S
S 其他位置上词元的交叉熵损失的计算以此类推,所以对于包含
n
n
n 个词元的整个序列
S
S
S 的平均交叉熵损失为:
1 n ∑ t = 1 n − l o g P ( x t ∣ x t − 1 , x t − 2 , . . . , x 1 ) {1 \over{n}}\sum_{t=1}^{n} -log P(x_t|x_{t-1},x_{t-2},...,x_1) n1∑t=1n−logP(xt∣xt−1,xt−2,...,x1)
困惑度只不过是在平均交叉熵外套了一个壳
e x p [ − 1 n ∑ t = 1 n l o g P ( x t ∣ x t − 1 , x t − 2 , . . . , x 1 ) ] exp[-{1 \over{n}}\sum_{t=1}^{n} log P(x_t|x_{t-1},x_{t-2},...,x_1)] exp[−n1∑t=1nlogP(xt∣xt−1,xt−2,...,x1)]
困惑度公式的理解:
在最好的情况下,模型总是完美地估计标签词元的概率为1。在这种情况下,模型的困惑度为1;
在最坏的情况下,模型总是预测标签词元的概率为0。在这种情况下,困惑度是正无穷大。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。