文章目录
信息论基础
熵*
如果X是一个离散型随机变量,其概率分布为
p
(
x
)
=
P
(
X
=
x
)
,
x
∈
X
p(x)=P(X=x),x\in X
p(x)=P(X=x),x∈X,那么
X
X
X的伤
H
(
X
)
H(X)
H(X)为
H
(
X
)
=
−
∑
x
∈
X
p
(
x
)
log
2
p
(
x
)
H(X)=-\sum_{x\in X}p(x)\log_2p(x)
H(X)=−x∈X∑p(x)log2p(x)
熵的单位为bit。
熵又称为自信息,表示信源 X X X每发一个符号所需要的平均信息量,或者说描述了一个系统的混乱程度。一个随机变量的熵越大,它的不确定性越大,正确估计其值的可能性越大。
熵的单位bit是与计算机存储单位bit在意义上有所区别的。
题型一:计算熵
说明:实际概率下的熵要小于等概率下的熵。
对于一个系统,表示某一个字符所需要的平均信息量大小。
联合熵*
如果X,Y是一对离散型随机变量
X
,
Y
~
p
(
x
,
y
)
X,Y~p(x,y)
X,Y~p(x,y),
X
,
Y
X,Y
X,Y的联合熵
H
(
X
,
Y
)
H(X,Y)
H(X,Y)为
H
(
X
,
Y
)
=
−
∑
x
∈
X
∑
y
∈
Y
=
p
(
x
,
y
)
log
2
p
(
x
,
y
)
H(X,Y)=-\sum_{x\in X}\sum_{y\in Y}=p(x,y)\log_2p(x,y)
H(X,Y)=−x∈X∑y∈Y∑=p(x,y)log2p(x,y)
联合熵实际上是描述一对随机变量平均需要的信息量。
条件熵*
H ( Y ∣ X ) = ∑ x ∈ X p ( x ) H ( Y ∣ X = x ) = ∑ x ∈ X p ( x ) [ − ∑ y ∈ Y p ( y ∣ x ) log 2 p ( y ∣ x ) ] = − ∑ x ∈ X ∑ y ∈ Y p ( x , y ) log 2 p ( y ∣ x ) H(Y|X)=\sum_{x\in X}p(x)H(Y|X=x)\\=\sum_{x\in X}p(x)[-\sum_{y\in Y}p(y|x)\log_2p(y|x)]\\=-\sum_{x\in X}\sum_{y\in Y}p(x,y)\log_2p(y|x) H(Y∣X)=x∈X∑p(x)H(Y∣X=x)=x∈X∑p(x)[−y∈Y∑p(y∣x)log2p(y∣x)]=−x∈X∑y∈Y∑p(x,y)log2p(y∣x)
另外,有连锁规则
H
(
X
,
Y
)
=
H
(
X
)
+
H
(
Y
∣
X
)
H(X,Y)=H(X)+H(Y|X)
H(X,Y)=H(X)+H(Y∣X)
题型二:计算联合熵与条件熵
括号中的,都是Y取1、2、3、4下的条件概率。
熵率*
以一句话为例,长度为n,每一个字符的熵为
H
r
a
t
e
=
1
n
H
(
X
1
n
)
=
−
1
n
∑
x
1
n
p
(
x
1
n
)
log
2
p
(
x
1
n
)
H_{rate}=\frac{1}{n}H(X_{1n})=-\frac{1}{n}\sum_{x_{1n}}p(x_{1n})\log_2p(x_{1n})
Hrate=n1H(X1n)=−n1x1n∑p(x1n)log2p(x1n)
这称为熵率。其中,变量
X
1
n
X_{1n}
X1n表示随机变量序列。
对一个系统,某一句话所需用到的平均信息量大小再平均,折合为每一个字所需的平均信息量大小。
互信息*
I
(
X
;
Y
)
=
H
(
X
)
−
H
(
X
∣
Y
)
=
H
(
Y
)
−
H
(
Y
∣
X
)
I(X;Y)=H(X)-H(X|Y)=H(Y)-H(Y|X)
I(X;Y)=H(X)−H(X∣Y)=H(Y)−H(Y∣X)
反应的是知道了Y的值以后X的不确定性的减少量。可以理解为Y的值透露了多少关于X的信息量。
互信息又提现了两个变量之间的依赖程度:如果
I
(
X
;
Y
)
>
>
0
I(X;Y)>>0
I(X;Y)>>0,表明X和Y是高度相关的;如果
I
(
X
;
Y
)
=
0
I(X;Y)=0
I(X;Y)=0,表面X和Y是相互独立的;如果
I
(
X
;
Y
)
<
<
0
I(X;Y)<<0
I(X;Y)<<0,表明Y的出现不但未使X的不确定性减小,反而增大了X的不确定性,常常是不利的。
相对熵*
两个概率分布
p
(
x
)
p(x)
p(x)和
q
(
x
)
q(x)
q(x)的相对熵定义为
D
(
p
∣
∣
q
)
=
∑
x
∈
X
p
(
x
)
log
p
(
x
)
q
(
x
)
D(p||q)=\sum_{x\in X}p(x)\log\frac{p(x)}{q(x)}
D(p∣∣q)=x∈X∑p(x)logq(x)p(x)
是衡量相同事件空间里两个概率分布相对差距的测度。当两个随机分布相同时,其相对熵为0。当两个随机分布的差别增加时,其相对熵也增加。
互信息实际上就是衡量一个联合分布与独立性差距多大的测度。
I
(
X
;
Y
)
=
D
(
p
(
x
,
y
)
∣
∣
p
(
x
)
p
(
y
)
)
I(X;Y)=D(p(x,y)||p(x)p(y))
I(X;Y)=D(p(x,y)∣∣p(x)p(y))
相对熵是非对称的, D ( p ∣ ∣ q ) D(p||q) D(p∣∣q)表示当用概率分布q来拟合真实分布p时,产生的信息损耗,其中p表示真实分布,q表示拟合分布。
交叉熵*
如果一个随机变量
X
∼
p
(
x
)
X\sim p(x)
X∼p(x),
q
(
x
)
q(x)
q(x)为近似
p
(
x
)
p(x)
p(x)的概率分布,随机变量
X
X
X和模型
q
q
q之间的交叉熵定义为
H
(
X
,
q
)
=
H
(
X
)
+
D
(
p
∣
∣
q
)
=
−
∑
x
p
(
x
)
log
q
(
x
)
H(X,q)=H(X)+D(p||q)\\=-\sum_xp(x)\log q(x)
H(X,q)=H(X)+D(p∣∣q)=−x∑p(x)logq(x)
交叉熵的概念也可以用来衡量估计模型与真实概率分布之间的差异。
交叉熵时用分布q来表示真实分布为p的信息的熵。
对于语言
L
=
(
X
i
)
∼
p
(
x
)
L=(X_i)\sim p(x)
L=(Xi)∼p(x)与其模型
q
q
q的交叉熵定义为
H
(
L
,
q
)
=
−
lim
n
−
>
∞
1
n
∑
x
1
n
p
(
x
1
n
)
log
q
(
x
1
n
)
H(L,q)=-\lim_{n->∞}\frac{1}{n}\sum_{x_1^n}p(x_1^n)\log q(x_1^n)
H(L,q)=−n−>∞limn1x1n∑p(x1n)logq(x1n)
比如一篇文章,其中的每个文字都出现了,那么我们判断写篇文章为A的概率就是1,或者说,一张图每个像素值都给出来了,明确可以区分出这张图是啥,n趋向于∞的意思就是说,给的信息尽可能多一些。所以,交叉熵可以化简为:
H
(
L
,
q
)
=
−
1
n
∑
x
1
n
log
q
(
x
1
n
)
H(L,q)=-\frac{1}{n}\sum_{x_1^n}\log q(x_1^n)
H(L,q)=−n1x1n∑logq(x1n)
换句话说,只要样本数据够大,就可以近似。
我认为这个n是有相对性的,如果我这个“语言”或者说target本身也不大的话,一个数值不大的n也可以算是无穷。
困惑度*
在设计语言模型时,通常采用困惑度来代替交叉熵衡量语言模型的好坏。给定语言L的语言样本 l 1 n = l 1 . . . L n l_1^n=l_1...L_n l1n=l1...Ln,则该样本下,该语言的困惑度为 P P q = 2 H ( L , q ) = [ q ( l n ) ] − 1 n PP_q=2^{H(L,q)}=[q(l^n)]^{-\frac{1}{n}} PPq=2H(L,q)=[q(ln)]−n1
熵之间的关系*
汉语分词问题*
互信息可以度量两个汉字之间的关联程度,但通常采用双字耦合度。
假设
c
i
c_i
ci,
c
i
+
1
c_{i+1}
ci+1是两个连续出现的汉字,统计样本中
c
i
c_i
ci,
c
i
+
1
c_{i+1}
ci+1连续出现在一个词中的次数和连续出现的总字数,二者之比就是
c
i
c_i
ci,
c
i
+
1
c_{i+1}
ci+1的双字耦合度。
C
o
u
p
l
e
(
c
i
,
c
i
+
1
)
=
N
(
c
i
c
i
+
1
)
N
(
c
i
c
i
+
1
)
N
(
.
.
.
c
i
∣
c
i
+
1
.
.
.
)
Couple(c_i,c_{i+1})=\frac{N(c_ic_{i+1})}{N(c_ic_{i+1})N(...c_i|c_{i+1}...)}
Couple(ci,ci+1)=N(cici+1)N(...ci∣ci+1...)N(cici+1)
互信息涉及的概率情况有三种:
- 两个汉字连续出现,并且在一个词中;
- 两个汉字连续出现,但分属于两个不同的词;
- 非连续出现。
两个汉字的第三种情况出现的比较多,所以说,自信息会比较小甚至为负数,一旦两者结合在一起,往往是一个词。而双字耦合度不考虑第三种情况,所以更合适一些。
应用实例
词汇歧义消解
如何区分上下文中的词汇语义,就是词汇歧义消解问题,或称词义消歧。
基本思路:不同词义对应不同的上下文,因此。如果能将多义词的上下文区别开,词义就明确了。
我们主要探讨基于上下文分类的消歧方法
基于贝叶斯分类器
假设多义词 w w w所处的上下文语境为 C C C,如果 w w w的多个语义记作 s i ( i ≥ 2 ) s_i(i\ge2) si(i≥2),那么,可通过计算 arg max s i p ( s i ∣ C ) \argmax_{s_i}p(s_i|C) siargmaxp(si∣C)确定 w w w的词义。
根据贝叶斯公式 p ( s i ∣ C ) = p ( s i ) × ( C ∣ s i ) p ( C ) p(s_i|C)=\frac{p(s_i)\times(C|s_i)}{p(C)} p(si∣C)=p(C)p(si)×(C∣si);
考虑分母的不变性(不管词义是啥,咱就这个上下文);考虑独立性假设(上下文的词之间没啥联系),有
s
^
i
=
arg max
s
i
[
p
(
s
i
)
∏
v
k
∈
C
p
(
v
k
∣
s
i
)
]
\hat s_i=\argmax_{s_i}[p(s_i)\prod_{v_k\in C}p(v_k|s_i)]
s^i=siargmax[p(si)vk∈C∏p(vk∣si)]
上述数据都可以通过最大似然估计求得:
p
(
v
k
∣
s
i
)
=
N
(
v
k
,
s
i
)
N
(
s
i
)
p(v_k|s_i)=\frac{N(v_k,s_i)}{N(s_i)}
p(vk∣si)=N(si)N(vk,si)
N
(
s
i
)
N(s_i)
N(si)是在训练数据中词
w
w
w用于语义
s
i
s_i
si时的次数,而
N
(
v
k
,
s
i
)
N(v_k,s_i)
N(vk,si)时
w
w
w用于语义
s
i
s_i
si时,词
v
k
v_k
vk出现在
w
w
w上下文时的次数。
p
(
s
i
)
=
N
(
s
i
)
N
(
w
)
p(s_i)=\frac{N(s_i)}{N(w)}
p(si)=N(w)N(si)
N
(
w
)
N(w)
N(w)为w在训练数据中出现的总次数。
1个核心公式;2个过程概率;3个底层计数
算法描述*
- 对于多义词 w w w的每个语义 s i s_i si执行如下循环:对于词典中所有词 v k v_k vk利用训练语料计算 p ( v k ∣ s i ) = N ( v k , s i ) N ( s i ) p(v_k|s_i)=\frac{N(v_k,s_i)}{N(s_i)} p(vk∣si)=N(si)N(vk,si)
- 对于 w w w的每个语义 s i s_i si计算 p ( s i ) = N ( s i ) N ( w ) p(s_i)=\frac{N(s_i)}{N(w)} p(si)=N(w)N(si)
- 对于
w
w
w的每个语义
s
i
s_i
si计算
p
(
s
i
)
p(s_i)
p(si),并根据上下文中的每个词
v
k
v_k
vk计算
p
(
v
k
∣
s
i
)
p(v_k|s_i)
p(vk∣si),选择
s ^ i = arg max s i [ p ( s i ) ∏ v k ∈ C p ( v k ∣ s i ) ] \hat s_i=\argmax_{s_i}[p(s_i)\prod_{v_k\in C}p(v_k|s_i)] s^i=siargmax[p(si)vk∈C∏p(vk∣si)]
1、2为训练过程,3为测试过程。
基于最大熵的方法
思想核心:估计在条件 b ∈ B b\in B b∈B下,发生某个事件的概率 p ( a ∣ b ) p(a|b) p(a∣b),该概率使熵 H ( p ( A ∣ B ) ) H(p(A|B)) H(p(A∣B))最大。
于是可以推导得到事件a发生的概率: p ∗ ( a ∣ b ) = 1 Z ( b ) e x p ( ∑ j = 1 l λ j ⋅ f j ( a , b ) ) p^*(a|b)=\frac{1}{Z(b)}exp(\sum_{j=1}^l\lambda_j\cdot f_j(a,b)) p∗(a∣b)=Z(b)1exp(j=1∑lλj⋅fj(a,b))
其中 Z ( b ) = ∑ a e x p ( ∑ j = 1 l λ j ⋅ f j ( a , b ) ) Z(b)=\sum_{a}exp(\sum_{j=1}^l\lambda_j\cdot f_j(a,b)) Z(b)=∑aexp(∑j=1lλj⋅fj(a,b)), l l l为特征函数数量。
对于词义消歧而言,设A为某一多义词所有义项的集合,B为所有上下文的集合。可定义{0,1}域上的二值函数
f
(
a
,
b
)
f(a,b)
f(a,b)来表示上下文条件与义项之间的关系:
f
(
a
,
b
)
=
1
i
f
(
a
,
b
)
∈
(
A
,
B
)
,
且
满
足
某
种
条
件
0
e
l
s
e
f(a,b)=\begin{array}{c}1~~&if(a,b)\in(A,B),且满足某种条件\\0~~&else\end{array}
f(a,b)=1 0 if(a,b)∈(A,B),且满足某种条件else
计算公式为 a ^ = arg max a p ∗ ( a ∣ b ) \hat a = \argmax_{a}p^*(a|b) a^=aargmaxp∗(a∣b)
两种表示方式*
- 位置无关:目标词周围的词形、词性或其组合构成的集合;
- 位置有关:为每个位置的上下文标注位置信息。
参数训练
上下文条件主要有以下几个参数:
- 特征类型(3):词性、词性、词性+词形;
- 上下文窗口大小(1):左右两个词;
- 是否考虑位置(2):是 / 否。
最大熵模型参数训练的任务就是选取有效的特征
f
i
f_i
fi及其权重
λ
i
\lambda_i
λi。由于可以利用歧义点所在的上下文信息作为特征条件,而**
**,因此,各种特征条件和歧义候选可以组合出很多特征函数。常用的筛选方法有:
- 从候选特征集中选择在训练数据中出现频次超过一定阈值的特征;
- 利用互信息作为评价尺度从候选特征集中选择满足一定互信息要求的特征;
- 利用增量式特征选择方法从候选特征集中选择特征。
而权重的计算采用GIS算法。
算法描述*
- 特征提取和筛选;
- GIS算法确定权重;
- 将a、b带入表达式,取 a ^ = arg max a p ∗ ( a ∣ b ) \hat a = \argmax_{a}p^*(a|b) a^=aargmaxp∗(a∣b)。