文章目录
0. 背景
本系列博文尝试系统化地梳理概率图模型。本文以朴素贝叶斯和HMM为切入点尝试窥探概率图模型一二。
1. 预备知识
在介绍朴素贝叶斯之前,需要先简单介绍下概率论中的基础知识:条件概率、贝叶斯公式和全概率公式。
1.1 条件概率
当给定条件发生变化后,会导致事件发生的可能性发生变化。比如:背对着一个人,让你猜猜背后这个人是 男/女的概率是多少? 在没有其他先验信息的情况下,只能猜测50%。但是如果有了先验信息,比如你从旁边玻璃的反光中看到 ta 头发是长的,那么在知晓这个信息的前提下,你猜测此人性别的概率是会发生变化的,是不是? 其实这其中隐藏着信息论的真理,用信息来消除不确定性。
我们先来看表示事件 B 发生后事件 A 发生的概率(即条件概率)
P
(
A
∣
B
)
P(A | B)
P(A∣B)在数学表达式上的定义:
P
(
A
∣
B
)
=
P
(
A
∩
B
)
P
(
B
)
P(A | B)=\frac{P(A \cap B)}{P(B)}
P(A∣B)=P(B)P(A∩B)
解释为"A在B发生的条件下发生的概率"。由定义引申得到:
P
(
A
∩
B
)
=
P
(
A
∣
B
)
P
(
B
)
P(A \cap B) = P(A|B) P(B)
P(A∩B)=P(A∣B)P(B)
其中
P
(
A
∩
B
)
P(A\cap B)
P(A∩B)也记为
P
(
A
,
B
)
P(A,B)
P(A,B)是联合概率,表示两个事件共同发生的概率。
我们对上述公式从两个角度进行理解。因为
P
(
A
,
B
)
P(A,B)
P(A,B)可以站在A的角度去看B,也可以站在B的角度去看A,看到的事实应该是一致。
在空间
Ω
\Omega
Ω中有2个集合A、B,具体如下所示:
从B的角度去看A,此时的 P ( A , B ) P(A,B) P(A,B)解释如下:
从A的角度去看B,此时的 P ( A , B ) P(A,B) P(A,B)解释如下:
可以看出,不管是从公式还是从结果上来看,二者结果是一致的。
1.2 贝叶斯公式
由上述条件概率得到
P
(
A
∩
B
)
=
P
(
A
∣
B
)
P
(
B
)
=
P
(
B
∣
A
)
P
(
A
)
P(A \cap B) = P(A|B) P(B)=P(B|A) P(A)
P(A∩B)=P(A∣B)P(B)=P(B∣A)P(A),进而可以得到常规的贝叶斯公式:
P
(
A
∣
B
)
=
P
(
B
∣
A
)
P
(
A
)
P
(
B
)
P(A | B)=\frac{P(B | A) P(A)}{P(B)}
P(A∣B)=P(B)P(B∣A)P(A)
(1)
P
(
A
)
P(A)
P(A)称为
A
A
A的先验概率(或者边缘概率),之所以称为"先验"是因为它不考虑任何
B
B
B方面的因素;
(2)
P
(
B
)
P(B)
P(B)称为
B
B
B的先验概率;
(3)
P
(
A
∣
B
)
P(A | B)
P(A∣B)是已知
B
B
B发生后,发生
A
A
A的条件概率。从A的角度,这就意味着我们认为B是果,A是因。
由于得自
B
B
B的取值而被称作
A
A
A的后验概率;此时的
P
(
B
∣
A
)
P(B|A)
P(B∣A)就是似然。
(4) 同理
P
(
B
∣
A
)
P(B|A)
P(B∣A)是已知
A
A
A发生后,
B
B
B的条件概率。从B的角度,此时,A是果,B是因。也由于得自
A
A
A的取值而被称作
B
B
B的后验概率。所以,后验概率是相对的。
单从上述贝叶斯公式来讲,因为这个公式的潜在语义是,B是观测结果,我们希望获得A这个原因,即参数。 P ( A ∣ B ) P(A |B) P(A∣B) 叫做后验概率, P ( B ∣ A ) P(B|A) P(B∣A)称为似然,其他称为先验概率。如果替换成 P ( Y ∣ X ) P(Y |X) P(Y∣X)理解上应该更直观些。
1.3 全概率公式
若事件
B
1
,
B
2
…
…
,
B
n
B1,B2 ……,Bn
B1,B2……,Bn是样本空间Ω中的一个划分,则:
P
(
A
)
=
∑
i
=
1
n
P
(
A
∩
B
i
)
P(A)=\sum_{i=1}^{n} P\left(A \cap B_{i}\right)
P(A)=i=1∑nP(A∩Bi)
可以从条件概率进一步得到:
P
(
A
)
=
∑
i
=
1
n
P
(
A
∩
B
i
)
=
∑
i
=
1
n
P
(
A
∣
B
i
)
∙
P
(
B
i
)
P(A)=\sum_{i=1}^{n} P\left(A \cap B_{i}\right)=\sum_{i=1}^{n} P\left(A | B_{i}\right) \bullet P\left(B_{i}\right)
P(A)=i=1∑nP(A∩Bi)=i=1∑nP(A∣Bi)∙P(Bi)
全概率公式的意义在于,当某一事件的概率难以求得时,可转化为在一系列条件下发生概率的和。
全概率公式和贝叶斯公式的合体形式,即将贝叶斯公式分母这一先验概率以全概率公式展开而已:
P
(
A
∣
B
)
=
P
(
B
∣
A
)
∙
P
(
A
)
P
(
B
)
=
P
(
B
∣
A
)
∙
P
(
A
)
∑
i
=
1
n
P
(
B
∣
A
i
)
⋅
P
(
A
i
)
P(A | B)=\frac{P(B | A) \bullet P(A)}{P(B)}=\frac{P(B | A) \bullet P(A)}{\sum_{i=1}^{n} P\left(B | A_{i}\right) \cdot P\left(A_{i}\right)}
P(A∣B)=P(B)P(B∣A)∙P(A)=∑i=1nP(B∣Ai)⋅P(Ai)P(B∣A)∙P(A)
2. 朴素贝叶斯
上面我们已经介绍过了贝叶斯公式:
P
(
A
∣
B
)
=
P
(
B
∣
A
)
P
(
A
)
P
(
B
)
P(A | B)=\frac{P(B | A) P(A)}{P(B)}
P(A∣B)=P(B)P(B∣A)P(A)
那么现在我们将以垃圾邮件分类为例,详细阐述如何在贝叶斯公式的基础上引入朴素贝叶斯方法处理垃圾邮件分类这一任务。
我们将A、B分别替换成Y和X:
P
(
Y
∣
X
)
=
P
(
X
∣
Y
)
P
(
Y
)
P
(
X
)
P(Y | X)=\frac{P(X | Y) P(Y)}{P(X)}
P(Y∣X)=P(X)P(X∣Y)P(Y)
对分类任务来说,
P
(
属
于
某
类
∣
具
体
某
特
征
)
=
P
(
具
体
某
特
征
∣
属
于
某
类
)
P
(
属
于
某
类
)
P
(
具
体
某
特
征
)
P(属于某类|具体某特征)=\frac{P(具体某特征|属于某类) P(属于某类)}{P(具体某特征)}
P(属于某类∣具体某特征)=P(具体某特征)P(具体某特征∣属于某类)P(属于某类)
通过上述贝叶斯公式,将
P
(
属
于
某
类
∣
具
体
某
特
征
)
P(属于某类|具体某特征)
P(属于某类∣具体某特征)的计算转为求
P
(
具
体
某
特
征
∣
属
于
某
类
)
P(具体某特征|属于某类)
P(具体某特征∣属于某类)
这里我们再强调下或者说再啰嗦一下下下:
- P(“属于某类”|“具有某特征”)=在已知某样本“具有某特征”的条件下,该样本“属于某类”的概率。所以叫做『后验概率』。
- P(“具有某特征”|“属于某类”)=在已知某样本“属于某类”的条件下,该样本“具有某特征”的概率。
- P(“属于某类”)=(在未知某样本具有该“具有某特征”的条件下,)该样本“属于某类”的概率。所以叫做『先验概率』。
- P(“具有某特征”)=(在未知某样本“属于某类”的条件下,)该样本“具有某特征”的概率。
只需要找到一些包含已知特征标签的样本,即可进行训练。而样本的类别标签都是明确的。
整个句子作为特征
具体到这里的垃圾邮件分类任务上,观测值
X
X
X是邮件的内容,需要比较
P
(
是
垃
圾
邮
件
∣
X
)
P(是垃圾邮件|X)
P(是垃圾邮件∣X) 和
P
(
是
正
常
邮
件
∣
X
)
P(是正常邮件|X)
P(是正常邮件∣X)的大小。
P
(
是
垃
圾
邮
件
∣
X
)
=
P
(
X
∣
是
垃
圾
邮
件
)
P
(
是
垃
圾
邮
件
)
P
(
X
)
=
P
(
X
,
是
垃
圾
邮
件
)
P
(
X
)
P(是垃圾邮件|X)=\frac{P(X|是垃圾邮件)P(是垃圾邮件)}{P(X)}=\frac{P(X,是垃圾邮件)}{P(X)}
P(是垃圾邮件∣X)=P(X)P(X∣是垃圾邮件)P(是垃圾邮件)=P(X)P(X,是垃圾邮件)
P ( 是 正 常 邮 件 ∣ X ) = P ( X ∣ 是 正 常 邮 件 ) P ( 是 正 常 邮 件 ) P ( X ) = P ( X , 是 正 常 邮 件 ) P ( X ) P(是正常邮件|X)=\frac{P(X|是正常邮件)P(是正常邮件)}{P(X)}=\frac{P(X,是正常邮件)}{P(X)} P(是正常邮件∣X)=P(X)P(X∣是正常邮件)P(是正常邮件)=P(X)P(X,是正常邮件)
假设此时的邮件内容 X X X=“我们拥有300多名来自全国各地各行业的博士、工程师、行业专家、副教授水平以上的兼职写作人员,倾心为你代写各类原创的高水平的论文”
P
(
是
垃
圾
邮
件
∣
X
)
=
垃
圾
邮
件
中
出
现
这
句
话
的
次
数
垃
圾
邮
件
中
出
现
这
句
话
的
次
数
+
正
常
邮
件
中
出
现
这
句
话
的
次
数
P(是垃圾邮件|X)=\frac{垃圾邮件中出现这句话的次数}{垃圾邮件中出现这句话的次数+正常邮件中出现这句话的次数}
P(是垃圾邮件∣X)=垃圾邮件中出现这句话的次数+正常邮件中出现这句话的次数垃圾邮件中出现这句话的次数
同理可以统计得到
P
(
是
正
常
邮
件
∣
X
)
P(是正常邮件|X)
P(是正常邮件∣X),最后进行比较即可。当然,由于我们这里只有2个类别,只需计算
P
(
是
垃
圾
邮
件
∣
X
)
P(是垃圾邮件|X)
P(是垃圾邮件∣X)的概率,如果大于0.5即可判断是垃圾邮件。
分词
但是,由于训练集有限,而句子的可能性则是无限的。所以覆盖所有句子可能性的训练集是不存在的。虽然句子的可能性无限,但是词语就那么些!!汉语常用字2500个,常用词语也就56000个。按人们的经验理解,两句话意思相近并不强求非得每个字、词语都一样。且同一个意思的句子存在多样化的表达方式。
于是,可以不拿句子作为特征,而是拿句子里面的词语(组合)作为特征去考虑。所以,这里就用到了分词!所谓的分词就是把一整句话拆分成更细粒度的词语来进行表示。另外,分词之后去除标点符号、数字甚至无关成分(停用词)是特征预处理中的一项技术。
我们对原始的邮件进行分词,结果 X s e g X_{seg} Xseg是:
我们 / 拥有 / 300 / 多名 / 来自 / 全国 / 各地 / 各 / 行业 / 的 / 博士 / 、 / 工程师 / 、 / 行业 / 专家 / 、 / 副教授 / 水平 / 以上 / 的 / 兼职 / 写作 / 人员 / , / 倾心 / 为 / 你 / 代写 / 各类 / 原创 / 的 / 高水平 / 的 / 论文 / 。
那么此时的贝叶斯公式就可以写成:
P
(
是
垃
圾
邮
件
∣
(
我
们
,
拥
有
,
…
…
,
论
文
)
)
=
P
(
(
我
们
,
拥
有
,
…
…
,
论
文
)
∣
是
垃
圾
邮
件
)
P
(
是
垃
圾
邮
件
)
P
(
(
我
们
,
拥
有
,
…
…
,
论
文
)
)
P(是垃圾邮件|(我们,拥有,……,论文))=\frac{P((我们,拥有,……,论文)|是垃圾邮件)P(是垃圾邮件)}{P((我们,拥有,……,论文))}
P(是垃圾邮件∣(我们,拥有,……,论文))=P((我们,拥有,……,论文))P((我们,拥有,……,论文)∣是垃圾邮件)P(是垃圾邮件)
P ( 是 正 常 邮 件 ∣ ( 我 们 , 拥 有 , … … , 论 文 ) ) = P ( ( 我 们 , 拥 有 , … … , 论 文 ) ∣ 是 正 常 邮 件 ) P ( 是 正 常 邮 件 ) P ( ( 我 们 , 拥 有 , … … , 论 文 ) ) P(是正常邮件|(我们,拥有,……,论文))=\frac{P((我们,拥有,……,论文)|是正常邮件)P(是正常邮件)}{P((我们,拥有,……,论文))} P(是正常邮件∣(我们,拥有,……,论文))=P((我们,拥有,……,论文))P((我们,拥有,……,论文)∣是正常邮件)P(是正常邮件)
此时分子部分的 P ( ( 我 们 , 拥 有 , … … , 论 文 ) ∣ 是 垃 圾 邮 件 ) P ( 是 垃 圾 邮 件 ) P((我们,拥有,……,论文)|是垃圾邮件)P(是垃圾邮件) P((我们,拥有,……,论文)∣是垃圾邮件)P(是垃圾邮件),仍旧不好计算,为此引入一个很朴素的近似:
假设所有特征都彼此独立!
那么上述分子就可以等价于:
P
(
(
我
们
,
拥
有
,
…
…
,
论
文
)
∣
是
垃
圾
邮
件
)
=
P
(
我
们
∣
是
垃
圾
邮
件
)
⋅
P
(
拥
有
∣
是
垃
圾
邮
件
)
⋅
…
…
⋅
P
(
论
文
∣
是
垃
圾
邮
件
)
P((我们,拥有,……,论文)|是垃圾邮件)=P(我们|是垃圾邮件) \cdot P(拥有|是垃圾邮件) \cdot …… \cdot P(论文|是垃圾邮件)
P((我们,拥有,……,论文)∣是垃圾邮件)=P(我们∣是垃圾邮件)⋅P(拥有∣是垃圾邮件)⋅……⋅P(论文∣是垃圾邮件)
同理可以得到:
P
(
(
我
们
,
拥
有
,
…
…
,
论
文
)
∣
是
正
常
邮
件
)
=
P
(
我
们
∣
是
正
常
邮
件
)
⋅
P
(
拥
有
∣
是
正
常
邮
件
)
⋅
…
…
⋅
P
(
论
文
∣
是
正
常
邮
件
)
P((我们,拥有,……,论文)|是正常邮件)=P(我们|是正常邮件) \cdot P(拥有|是正常邮件) \cdot …… \cdot P(论文|是正常邮件)
P((我们,拥有,……,论文)∣是正常邮件)=P(我们∣是正常邮件)⋅P(拥有∣是正常邮件)⋅……⋅P(论文∣是正常邮件)
最终只需要比较:
P
(
(
我
们
,
拥
有
,
…
…
,
论
文
)
∣
是
垃
圾
邮
件
)
⋅
P
(
是
垃
圾
邮
件
)
=
P
(
我
们
∣
是
垃
圾
邮
件
)
⋅
P
(
拥
有
∣
是
垃
圾
邮
件
)
⋅
…
…
⋅
P
(
论
文
∣
是
垃
圾
邮
件
)
⋅
P
(
是
垃
圾
邮
件
)
P((我们,拥有,……,论文)|是垃圾邮件) \cdot P(是垃圾邮件)=P(我们|是垃圾邮件) \cdot P(拥有|是垃圾邮件) \cdot …… \cdot P(论文|是垃圾邮件) \cdot P(是垃圾邮件)
P((我们,拥有,……,论文)∣是垃圾邮件)⋅P(是垃圾邮件)=P(我们∣是垃圾邮件)⋅P(拥有∣是垃圾邮件)⋅……⋅P(论文∣是垃圾邮件)⋅P(是垃圾邮件)
和
P
(
(
我
们
,
拥
有
,
…
…
,
论
文
)
∣
是
正
常
邮
件
)
⋅
P
(
是
正
常
邮
件
)
=
P
(
我
们
∣
是
正
常
邮
件
)
⋅
P
(
拥
有
∣
是
正
常
邮
件
)
⋅
…
…
⋅
P
(
论
文
∣
是
正
常
邮
件
)
⋅
P
(
是
正
常
邮
件
)
P((我们,拥有,……,论文)|是正常邮件) \cdot P(是正常邮件)=P(我们|是正常邮件) \cdot P(拥有|是正常邮件) \cdot …… \cdot P(论文|是正常邮件) \cdot P(是正常邮件)
P((我们,拥有,……,论文)∣是正常邮件)⋅P(是正常邮件)=P(我们∣是正常邮件)⋅P(拥有∣是正常邮件)⋅……⋅P(论文∣是正常邮件)⋅P(是正常邮件)
这两者的概率大小即可。
在假设特征条件独立之后,每一项就很好计算了,比如“代写”这个词:
P
(
代
写
∣
是
垃
圾
邮
件
)
=
垃
圾
邮
件
中
出
现
“
代
写
”
的
次
数
垃
圾
邮
件
中
所
有
词
的
次
数
P(代写|是垃圾邮件)=\frac{垃圾邮件中出现“代写”的次数}{垃圾邮件中所有词的次数}
P(代写∣是垃圾邮件)=垃圾邮件中所有词的次数垃圾邮件中出现“代写”的次数
统计次数非常方便,而且样本数量足够大,算出来的概率比较接近真实。于是垃圾邮件识别的问题就可解了。
从图模型的角度看朴素贝叶斯:
每个特征都在一定的条件下,这里是指定类别,比如是垃圾邮件(Y),特征之间(X)是相互独立的!
3. 概率图模型(PGM)
上面既然提到了图模型,那么我们这里就先较为宏观地介绍下概率图模型的概貌。
概率图模型(Probabilistic GraphicalModel,PGM),简称图模型(Graphical Model,GM)是指一种用图结构来描述多元随机变量之间条件独立关系的概率模型,从而给研究高维空间中的概率模型带来了很大的便捷性。其中涉及两个概念:
(1)节点:表示变量
(2)节点之间的边:表示变量之间的概率关系
概率图模型根据边是否有向分为:
- 有向图模型或贝叶斯网(Bayesian network)
- 无向图模型或马尔可夫网(Markov network)
概率图模型的体系如下图所示:
这里就先不就此体系展开说明了,仅先给一个概貌,后续再逐个娓娓道来。
4. 马尔科夫链
在介绍隐马尔可夫之前,我们需要先介绍下马尔科夫链。
马尔可夫链(Markov chain), 又称离散时间马尔可夫链(discrete-time Markov chain,缩写为DTMC)。因俄国数学家安德烈·马尔可夫得名,为状态空间中经过从一个状态到另一个状态的转换的随机过程。
该过程要求具备“无记忆”的性质:
下一状态的概率分布只能由当前状态决定,在时间序列中它前面的历史事件均与之无关。这种特定类型的“无记忆性”称作马尔可夫性质。换一句话说,历史是应该被遗忘的,当前决定了未来。
数据表达式:
P
(
x
t
+
1
∣
⋯
,
x
t
−
2
,
x
t
−
1
,
x
t
)
=
P
(
x
t
+
1
∣
x
t
)
P\left(x_{t+1} | \cdots, x_{t-2}, x_{t-1}, x_{t}\right)=P\left(x_{t+1} | x_{t}\right)
P(xt+1∣⋯,xt−2,xt−1,xt)=P(xt+1∣xt)
马尔科夫链的三要素:
1.状态 S:能够被观测到的可能结果
2.初始向量
π
\pi
π:定义系统在时间为0,即初始时刻的状态概率
3.状态转移矩阵 A:每种状态之间的转换概率
假设天气有两种状态 晴、阴,即S=晴、阴
状态转移矩阵:
那么在很多天之后,比如n天之后,
q
=
lim
n
→
∞
(
1
0
)
P
n
=
(
0.8330.167
)
p
∞
=
(
0.833
0.167
0.833
0.167
)
\begin{array}{c}{q=\lim _{n \rightarrow \infty}(1 \quad 0) P^{n}=(0.8330 .167)} \\ {p^{\infty}=\left(\begin{array}{cc}{0.833} & {0.167} \\ {0.833} & {0.167}\end{array}\right)}\end{array}
q=limn→∞(10)Pn=(0.8330.167)p∞=(0.8330.8330.1670.167)
不管今天晴还是阴,很多天之后的晴阴分布收敛到一个固定分布,这个固定分布叫做稳态分布。上述例子说明,未来每一天天气都是q=(0.833,0.167)的一个样本点。
但是,实现中有的状态是无法观测到的,即隐状态,这时候对应的模型就是隐马尔科夫HMM。
5. 隐马尔可夫链
5.1 HMM的概念
隐马尔科夫模型也同样有三要素:
- 初始状态概率分布 π \pi π
- 状态转移矩阵 A
- 观测概率矩阵 B
则隐马尔可夫模型可以用以下表示:
λ = ( A , B , π ) \lambda = (A,B,\pi) λ=(A,B,π)
HMM两个基本假设:
-
齐次马尔科夫假设:
t 时刻状态仅取决于前一时刻 (t-1)的状态,与其他状态和观测无关,也与时刻 t 无关 -
观测独立性假设:
任意时刻的观测只依赖于该时刻的状态,与其他观测和状态无关
5.2 HMM示例
示例1:分词
我们以序列标注中的分词为例:
观测序列: 南京市长江大桥欢迎您
隐状态序列1: 南京市 / 长江大桥 / 欢迎您
隐状态序列2: 南京市长 / 江大桥 / 欢迎您
此时的停顿位置就是隐状态!
示例2:股市
再以股市为例,如果只是观测市场,我们只能知道当天的价格、交易量等信息,但是并不知道当前股市处于什么状态(牛市、熊市、震荡、反弹等)。此时,我们就有2个状态集合:
- 可以观测到的状态集合,包括股市成交价格、成交量等
- 另一个隐藏的状态集合,即股市的状态,是牛市还是熊市等
观测状态序列与隐藏的状态序列是概率相关的。
5.3 HMM的3个基本问题
估计:
已知模型 λ = ( A , B , π ) \lambda = (A,B,\pi) λ=(A,B,π)和 观测序列 O = ( o 1 , o 2 , … … , o T ) O=(o_1,o_2,……,o_T) O=(o1,o2,……,oT)。估计在该模型下观测序列 O O O出现的概率,即 P ( O ∣ λ ) P(O|\lambda) P(O∣λ)
学习:
已知观测序列
O
=
(
o
1
,
o
2
,
…
…
,
o
T
)
O=(o_1,o_2,……,o_T)
O=(o1,o2,……,oT),求模型
λ
=
(
A
,
B
,
π
)
\lambda = (A,B,\pi)
λ=(A,B,π)的参数,使得在该模型下观测序列概率最大,即
argmax
P
(
O
∣
λ
)
\operatorname{argmax}P(O|\lambda)
argmaxP(O∣λ)
预测(解码):
已知模型
λ
=
(
A
,
B
,
π
)
\lambda = (A,B,\pi)
λ=(A,B,π)和观测序列
O
=
(
o
1
,
o
2
,
…
…
,
o
T
)
O=(o_1,o_2,……,o_T)
O=(o1,o2,……,oT),
求给定观测序列条件概率
P
(
I
∣
O
)
P(I|O)
P(I∣O)最大的状态序列
I
=
(
i
1
,
i
2
,
…
…
,
i
T
)
I=(i_1,i_2,……,i_T)
I=(i1,i2,……,iT)
即,给定观测序列,求最有可能的状态序列。