赞
踩
在实践中,我们不使用原始概率作为我们评估语言模型的度量标准,而是使用一种叫做**困惑度(perplexity, PPL)**的变量。测试集上的语言模型的PPL是测试集上的【[逆反概率](# 逆反概率)】,由单词的数量归一化。对于一个测试集 W = w 1 w 2 . . . w N W=w_1w_2...w_N W=w1w2...wN:
P
P
L
(
W
)
=
P
(
w
1
w
2
.
.
.
w
N
)
−
1
N
=
1
P
(
w
1
w
2
.
.
.
w
N
)
N
=
∏
i
=
1
N
1
P
(
w
i
∣
w
1
:
i
−
1
)
N
(2.2.1)
测试集
W
W
W 的困惑度取决于我们使用哪种语言模型。以下是我们用一个一元语言模型(unigram)来计算
W
W
W 的困惑度:
P
P
L
(
W
)
=
∏
i
=
1
N
1
P
(
w
i
)
N
(2.2.2)
PPL(W)=\sqrt[N]{\prod_{i=1}^{N}\frac{1}{P(w_i)}}\tag{2.2.2}
PPL(W)=Ni=1∏NP(wi)1
(2.2.2)
用二元语言模型(bigram)计算的W的困惑仍然是几何平均值,但现在是二元概率:
P
P
L
(
W
)
=
∏
i
=
1
N
1
P
(
w
i
∣
w
i
−
1
)
N
(2.2.3)
PPL(W)=\sqrt[N]{\prod_{i=1}^N \frac{1}{P(w_i|w_{i-1})}}\tag{2.2.3}
PPL(W)=Ni=1∏NP(wi∣wi−1)1
(2.2.3)
注意,由于等式(2.2.1)中的倒数,如果单词序列的条件概率越高,则困惑度越低。因此,最小化困惑度就等同于根据语言模型最大化测试集的概率。我们通常在等式(2.2.1)或等式(2.2.3)中用到的单词序列的是某个测试集中的整个单词序列。
还有另外一种思考PPL的方式:作为一种语言的加权平均分支因子。在一种语言中,分支因子
是指【任何单词】后面【可能出现的下一个单词】的数量。假设一个识别英文数字
(
z
e
r
o
,
o
n
e
,
t
w
o
,
.
.
.
,
n
i
n
e
)
(zero, one, two,..., nine)
(zero,one,two,...,nine) 的任务,假定这10个数字中的每个数字都以相同的概率
P
=
1
10
P = \frac{1}{10}
P=101 出现,那么这个小型语言的困惑度实际上是10。推导一下:
P
P
L
(
W
)
=
P
(
w
1
w
2
.
.
.
w
N
)
−
1
N
=
(
1
10
)
N
×
(
−
1
N
)
=
10
(2.2.4)
假设数字 z e r o zero zero 的出现频率比其他数字高很多,则这个测试集的困惑度会很低,因为大多数时候下一个数字是 z e r o zero zero ,这是很容易预测的,也就是说有很高的概率。因此,虽然分支因子仍为10,但是困惑度或加权分支因子比较小。
下图显示了根据每种语法的150万个单词WSJ测试集的困惑度:
N-Gram提供给我们有关单词序列的信息越多,困惑度就越低。需要注意的是,在计算困惑度时,N-Gram模型 P P P 必须在不了解测试集的情况下构造,也不需要实现了解测试集的词汇量。测试集的任何知识都可能导致困惑度被人为降低。两种语言模型的困惑度也只有在使用相同词汇时才具有可比性。
困惑度(内在)的改善并不能保证语言处理任务性能(外在)的改善。尽管如此,困惑度往往与这些改进相关,它通常被用作对算法的快速检查。但是,在最后对模型进行评价之前,模型在困惑方面的改进应该总是通过对真实任务的端到端评估来确认。
困惑度:困惑度是一种信息论测度,用来测量一个概率模型预测样本的好坏,困惑度越低越好。给定一个包含n个词的文本预料(n可以数以百万计)和一个基于词语历史的用于为词语分配概率的语言模型函数LM,LM在一句话上的困惑度是 2 − 1 n ∑ i = 1 n log 2 L M ( w i ∣ w 1 : i − 1 ) 2^{-\frac{1}{n}\sum_{i=1}^n\log_2{LM(w_i|w_{1:i-1})}} 2−n1∑i=1nlog2LM(wi∣w1:i−1)。
更好的N-Gram模型时为测试数据分配更高概率的模型,而困惑度是测试集概率的归一化版本。困惑度实际上源于交叉熵的信息理论概念,他解释了困惑度的神秘性质及其与熵的关系。
数学是一种工具,使用数学来描述现实中的各种事物是一个数学家本质的工作目标,而现实中不确定,或者说不太确定是否会发生的事件必须要找到一种抽象的、符号化和公式化的手段去表示。
**熵(entropy)**是信息的度量。给定一个随机变量
X
X
X ,它的范围在我们所预测的任何事物之上(单词、字母、词性,我们称之为
X
\mathcal{X}
X ),并具有特定的概率函数,将其称为
p
(
x
)
p(x)
p(x) ,随机变量
X
X
X 的熵是:
H
(
X
)
=
−
∑
x
∈
X
p
(
x
)
log
2
p
(
x
)
(2.2.5)
H(X)=-\sum_{x\in \mathcal{X}}p(x)\log_2{p(x)}\tag{2.2.5}
H(X)=−x∈X∑p(x)log2p(x)(2.2.5)
原则上,对数
log
\log
log 可以在任何底数
b
a
s
e
base
base 下计算,如果我们使用以 2 为底数的对数,则得到的熵值将是以比特来度量的。一种直观的理解熵的方式是:在最优编码方案中,熵是编码某个决策或信息所需要的比特数的下界。
信息量不等于信息熵,如果是这样的话,直接用概率来衡量就可以了,不需要再重新定义一个概念。信息熵就是描述整个概率分布的不确定性。
示例:
假设我们对天气的概率一无所知,那么这四种天气发生的概率为等概率(服从平均分布)。 P = [ p 1 , p 2 , p 3 , p 4 ] = [ 1 4 , 1 4 , 1 4 , 1 4 ] P = [p_1,p_2,p_3,p_4] = [\frac{1}{4},\frac{1}{4},\frac{1}{4},\frac{1}{4}] P=[p1,p2,p3,p4]=[41,41,41,41]。代入信息熵公式,计算可得: H ( P ) = 2 H(P)=2 H(P)=2。
继续思考,假设我们考虑天气的城市是一个地处中国南方雨季的城市,那么阴天和雨天的概率从经验角度(先验概率)来看大于晴天、雪天,我们把这种分布记为 Q = [ 1 4 , 1 8 , 1 2 , 1 8 ] Q=[\frac{1}{4},\frac{1}{8},\frac{1}{2},\frac{1}{8}] Q=[41,81,21,81]。代入信息熵公式,计算可得: H ( Q ) = 1.75 H(Q)=1.75 H(Q)=1.75。
观察一下信息熵值的变化,和我们之前建立的直观理解完全符合。
天气【阴,晴,雨,雪】 信息熵 P = [ 1 4 , 1 4 , 1 4 , 1 4 ] P=[\frac{1}{4},\frac{1}{4},\frac{1}{4},\frac{1}{4}] P=[41,41,41,41] H ( P ) = 2 H(P)=2 H(P)=2 Q = [ 1 4 , 1 8 , 1 2 , 1 8 ] Q=[\frac{1}{4},\frac{1}{8},\frac{1}{2},\frac{1}{8}] Q=[41,81,21,81] H ( Q ) = 1.75 H(Q)=1.75 H(Q)=1.75 Z = [ 1 8 , 1 16 , 3 4 , 1 16 ] Z=[\frac{1}{8},\frac{1}{16},\frac{3}{4},\frac{1}{16}] Z=[81,161,43,161] H ( Z ) = 1.29 H(Z)=1.29 H(Z)=1.29 W = [ 0 , 0 , 1 , 0 ] W=[0,0,1,0] W=[0,0,1,0] H ( W ) = 0 H(W)=0 H(W)=0
到目前为止,我们一直在计算单个变量的熵。但是我们用熵来做的大部分事情都涉及到序列。例如,对于语法,我们将计算单词 $W=\left { w_0, w_1,w_2,…,w_n \right } $ 序列的熵。一种实现方法是使用一个表示单词序列的变量。例如,我们可以计算一个随机变量(某种语言
L
L
L 中长度为 n 的所有有限单词序列)的熵,如下所示:
H
(
w
1
,
w
2
,
.
.
.
,
w
n
)
=
−
∑
w
1
:
n
∈
L
p
(
w
1
:
n
)
log
p
(
w
1
:
n
)
(2.2.6)
H(w_1,w_2,...,w_n)=-\sum_{w_{1:n}\in L}p(w_{1:n})\log{p(w_{1:n})}\tag{2.2.6}
H(w1,w2,...,wn)=−w1:n∈L∑p(w1:n)logp(w1:n)(2.2.6)
我们可以定义**熵率 entropy rate(我们也可以把它看作是每个词的熵)**为该序列的熵除以单词数:
1
n
H
(
w
1
:
n
)
=
−
1
n
∑
w
1
:
n
∈
L
p
(
w
1
:
n
)
log
p
(
w
1
:
n
)
(2.2.7)
\frac{1}{n}H(w_{1:n})=-\frac{1}{n}\sum_{w_{1:n}\in L}p(w_{1:n})\log{p(w_{1:n})}\tag{2.2.7}
n1H(w1:n)=−n1w1:n∈L∑p(w1:n)logp(w1:n)(2.2.7)
但是为了测量一种语言的真实熵,我们需要考虑无限长度的序列。如果我们把语言看作一个【产生一系列单词的】随机过程
L
L
L,并允许
W
W
W 代表单词序列
w
1
,
w
2
,
.
.
.
,
w
n
w_1,w_2, ..., w_n
w1,w2,...,wn ,则
L
L
L 的熵率
H
(
L
)
H(L)
H(L) 定义为:
H
(
L
)
=
lim
n
→
∞
1
n
H
(
w
1
.
w
2
,
.
.
.
,
w
n
)
=
−
lim
n
→
∞
1
n
∑
W
∈
L
p
(
w
1
,
w
2
,
.
.
.
,
w
n
)
log
p
(
w
1
,
w
2
,
.
.
.
,
w
n
)
(2.2.8)
Shannon-McMillan-Breiman定理指出,如果语言在某些方面是正则的(确切地说,如果它既是静止的又是遍历的),那么:
H
(
L
)
=
lim
n
→
∞
−
1
n
log
p
(
w
1
,
w
2
,
.
.
.
,
w
n
)
(2.2.9)
H(L)=\lim_{n\to \infty}{-\frac{1}{n}\log{p(w_1,w_2,...,w_n)}}\tag{2.2.9}
H(L)=n→∞lim−n1logp(w1,w2,...,wn)(2.2.9)
也就是说,我们可以取一个足够长的序列,而不是对所有可能的序列求和。Shannon-McMillan-Breiman定理的直觉是,一个足够长的单词序列将包含许多其他较短的序列,并且这些较短的序列中的每一个都将根据它们的概率在较长的序列中重复出现。
如果一个随机过程分配给一个序列的概率相对于时间指数的变化是不变的,那么这个随机过程就被称为平稳的。换句话说,单词在时间t的概率分布与时间t+1的概率分布相同。马尔可夫模型和 N-Grams 都是平稳的。但是,自然语言并不是平稳的,即将出现的单词的概率可能取决于任意距离和时间相关的时间,因此,我们的统计模型仅给出自然语言的正确分布和熵的近似值。
总之,通过做一些不正确但是很方便的简化假设,我们可以计算随机过程的熵(通过取一个很长的输出样本,并计算其平均对数概率)。
当我们不知道产生某些数据的实际概率分布
p
p
p 时,交叉熵很有用。它允许我们使用一些
m
m
m,它是
p
p
p 的模型(即
p
p
p 的近似值)。
m
m
m 在
p
p
p 上的交叉熵如下:
H
(
p
,
m
)
=
lim
n
→
∞
−
1
n
∑
W
∈
L
p
(
w
1
,
w
2
,
.
.
.
,
w
n
)
log
m
(
w
1
,
w
2
,
.
.
.
,
w
n
)
(2.2.10)
H(p,m) = \lim_{n\to \infty}{-\frac{1}{n}\sum_{W\in L} p(w_1,w_2,...,w_n)\log{m(w_1,w_2,...,w_n)}}\tag{2.2.10}
H(p,m)=n→∞lim−n1W∈L∑p(w1,w2,...,wn)logm(w1,w2,...,wn)(2.2.10)
也就是说,我们根据概率分布
p
p
p 绘制序列,但根据
m
m
m 对其概率的对数求和。
再次,我们根据 Shannon-McMillan-Breiman 定理,进行平稳的遍历过程:
H
(
p
,
m
)
=
lim
n
→
∞
−
1
n
log
m
(
w
1
,
w
2
,
.
.
.
,
w
n
)
(2.2.11)
H(p,m)=\lim_{n\to \infty}{-\frac{1}{n}\log{m(w_1,w_2,...,w_n)}}\tag{2.2.11}
H(p,m)=n→∞lim−n1logm(w1,w2,...,wn)(2.2.11)
这意味着,对于熵,我们可以通过取一个足够长的序列来估计模型
m
m
m 在某个分布
p
p
p 上的交叉熵,而不是对所有可能的序列求和。使交叉熵之所以有用,是因为交叉熵
H
(
p
,
m
)
H(p,m)
H(p,m) 是熵
H
(
p
)
H(p)
H(p) 的上界。对于任何模型
m
m
m:
H
(
p
)
≤
H
(
p
,
m
)
(2.2.12)
H(p) \le H(p,m)\tag{2.2.12}
H(p)≤H(p,m)(2.2.12)
这意味着我们可以使用一些简化的模型 m m m 来帮助估计(根据概率 p p p 来描述的符号序列的)真实熵。 m m m 越精确,交叉熵 H ( p , m ) H(p,m) H(p,m) 就越接近真实熵 H ( p ) H(p) H(p)。因此, H ( p , m ) H(p,m) H(p,m) 和 H ( p ) H(p) H(p) 之间的差异时对模型精确程度的衡量。在两个模型 m 1 m_1 m1 和 m 2 m_2 m2 中,交叉熵越小的模型越准确(交叉熵永远不会低于真实熵,因此模型不会因为低估真实熵而犯错)。
当观察到的单词序列的长度趋于无穷大时,交叉熵被定义为极限。我们将需要一个近似的交叉熵,依赖于一个固定长度的(足够长的)序列。对单词序列
W
W
W 的模型
M
=
P
(
w
i
∣
w
i
−
N
+
1
:
i
−
1
)
M=P(w_i|w_{i-N+1:i-1})
M=P(wi∣wi−N+1:i−1),这种近似的交叉熵为:
H
(
W
)
=
−
1
N
log
P
(
w
1
w
2
.
.
.
w
N
)
(2.2.13)
H(W)=-\frac{1}{N}\log{P(w_1w_2...w_N)}\tag{2.2.13}
H(W)=−N1logP(w1w2...wN)(2.2.13)
一个模型
P
P
P 在一个词序列
W
W
W 上的困惑度现在被正式定义为2的交叉熵的幂:
P
e
r
p
l
e
x
i
t
y
(
W
)
=
2
H
(
W
)
=
P
(
w
1
w
2
.
.
.
w
N
)
−
1
N
=
1
P
(
w
1
w
2
.
.
.
w
N
)
N
=
∏
i
=
1
N
1
P
(
w
i
∣
w
1
.
.
.
w
i
−
1
)
N
(2.2.14)
交叉熵:其作用和相对熵一样,也是衡量两个分布之间的差异大小,其表达式如下:
H ( P , Q ) = − ∑ i = 1 N P ( x i ) log Q ( x i ) (2.2.15) H(P,Q)=-\sum_{i=1}^NP(x_i)\log{Q(x_i)}\tag{2.2.15} H(P,Q)=−i=1∑NP(xi)logQ(xi)(2.2.15)
结合信息熵和相对熵的表达式,可得如下关系:
H ( P , Q ) = D K L ( P , Q ) + H ( P ) (2.2.16) H(P,Q)=D_{KL}(P,Q)+H(P)\tag{2.2.16} H(P,Q)=DKL(P,Q)+H(P)(2.2.16)
相对熵(KL散度):相对熵主要衡量两个分布之间的差异,描述了两个分布之间的距离。(不是距离函数求得的通常意义上的距离)
D
K
L
(
P
,
Q
)
=
E
x
∼
p
[
log
P
(
x
)
Q
(
x
)
]
=
E
x
∼
p
[
log
P
(
x
)
−
log
Q
(
x
)
]
=
∑
i
=
1
N
P
(
x
i
)
[
log
P
(
x
i
)
−
log
Q
(
x
i
)
]
=
∑
i
=
1
N
P
(
x
i
)
log
P
(
x
i
)
−
∑
i
=
1
N
P
(
x
i
)
log
Q
(
x
i
)
=
H
(
P
,
Q
)
−
H
(
P
)
(2.2.17)
传统语言模型的限制:
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。