最近两天在复习贝叶斯算法,看了不少相关文章,但发现绝大部分都过分强调于公式的演算,个人认为首先应该掌握其中的思想。
本文会按照以下顺序介绍相关内容:
- 贝叶斯方法由来
- 贝叶斯公式理解
- 贝叶斯在NLP中的应用
- 朴素贝叶斯分类实例
历史
所谓的贝叶斯方法源于他生前为解决一个“逆概”问题写的一篇文章,而这篇文章是在他死后才由他的一位朋友发表出来的。在贝叶斯写这篇文章之前,人们已经能够计算“正向概率”,如“假设袋子里面有N个白球,M个黑球,你伸手进去摸一把,摸出黑球的概率是多大”。而一个自然而然的问题是反过来:“如果我们事先并不知道袋子里面黑白球的比例,而是闭着眼睛摸出一个(或好几个)球,观察这些取出来的球的颜色之后,那么我们可以就此对袋子里面的黑白球的比例作出什么样的推测”。这个问题,就是所谓的逆概问题。 —wikipedia
贝叶斯公式
让我们先来了解概率和统计的关系:
百度百科:贝叶斯概率(Bayesian Probability)是由贝叶斯理论所提供的一种对概率的解释,它采用将概率定义为某人对一个命题信任的程度的概念。
概率论是统计推断的基础,在给定数据生成过程下观测、研究数据的性质;而统计推断则根据观测的数据,反向思考其数据生成过程。预测、分类、聚类、估计等,都是统计推断的特殊形式,强调对于数据生成过程的研究。
举例来说,概率论研究的是一个白箱子,你知道这个箱子的构造(里面有几个红球、几个白球,也就是所谓的分布函数),然后计算下一个摸出来的球是红球的概率。而统计学面对的是一个黑箱子,你只看得到每次摸出来的是红球还是白球,然后需要猜测这个黑箱子的内部结构,例如红球和白球的比例是多少?
总结来说就是:通过已知的概率模型来精确的计算各种结果的可能性就是概率论;根据观测的结果来推断模型的不确定性就是统计学。
贝叶斯公式本质:执果索因,在知道结果的情况下去推断原因的方法。
贝叶斯定理的推导始于条件概率,条件概率可以定义为:在事件B发生的前提下,事件A发生的概率,数学上用P(A|B)来表示这个条件概率,其数学表达为:
P
(
A
∣
B
)
=
P
(
A
B
)
P
(
B
)
(
1
)
P(A|B)=\frac{P(AB)}{P(B)} (1)
P(A∣B)=P(B)P(AB)(1)
举例来说,学校里60%是男生,40%是女生,男生留长发的概率是20%,女生留长发的概率是80%,那么校园里一个留长发的学生,是女生的概率为多少?
对于这个问题,我们假设A代表”学生是女生“这一事件,B代表”学生留长发“这一事件,那么,公式1中
P
(
B
)
=
P
(
A
)
P
(
B
∣
A
)
+
P
(
A
′
)
P
(
B
∣
A
′
)
=
0.4
∗
0.8
+
0.6
∗
0.2
P(B)=P(A)P(B|A)+P(A')P(B|A')=0.4*0.8+0.6*0.2
P(B)=P(A)P(B∣A)+P(A′)P(B∣A′)=0.4∗0.8+0.6∗0.2
我们可以发现这其实就是全概率公式,表达的含义是学生留长发的概率,包括了两部分,长发男生和长发女生;同样地,可以得到:
P
(
B
∣
A
)
=
P
(
B
A
)
P
(
A
)
(
2
)
P(B|A)=\frac{P(BA)}{P(A)} (2)
P(B∣A)=P(A)P(BA)(2)
公式(1)等式两边乘以P(B),公式(2)等式两边乘以P(A),得到:
P
(
A
B
)
=
P
(
A
∣
B
)
P
(
B
)
(
3
)
P(AB)=P(A|B)P(B) (3)
P(AB)=P(A∣B)P(B)(3)
P
(
B
A
)
=
P
(
B
∣
A
)
P
(
A
)
(
4
)
P(BA)=P(B|A)P(A) (4)
P(BA)=P(B∣A)P(A)(4)
由于P(AB)=P(BA),最终得到贝叶斯公式:
P
(
A
∣
B
)
=
P
(
B
∣
A
)
P
(
A
)
P
(
B
)
(
5
)
P(A|B)=\frac{P(B|A)P(A)}{P(B)} (5)
P(A∣B)=P(B)P(B∣A)P(A)(5)
其中,分母部分是全概率,P(A)是先验概率,我们最终要求的P(A|B)是后验概率。
中文分词
隐马尔可夫模型(HMM)是将分词作为字在字符串中的序列标注任务来实现的,其基本思路是:每个字在构造一个特定的词语时占据一个确定的构词位置,现规定每个字最多只有4个构词位置,即B(词首)、M(词中)、E(词尾)、S(单独成词)。
对于句子“中文/分词/是/文本处理/不可或缺/的/一步!”,可以直接表示成“中/B文/E分/B词/E是/S文/B本/M处/M理/E不/B可/M或/M缺/E的/S一/B步/E!/S”
用数学抽象表示为:用 x=c1c2…cn 代表输入的句子,n为句子长度,ci表示第i个字符;
y=y1y2…yn 代表输出的标签,那么理想的输出为:
y m a x = m a x P ( y 1 y 2... y n ∣ c 1 c 2... c n ) ( 6 ) ymax=max P(y1y2...yn|c1c2...cn) (6) ymax=maxP(y1y2...yn∣c1c2...cn)(6)
在分词任务上,y即为B、M、E、S这4中标签,c为诸如“中”“文”等句子中的每个字(包括标点),这里引入独立性假设,即每个字的输出仅与当前字有关,于是能得到:
P
(
y
1
y
2...
y
n
∣
c
1
c
2...
c
n
)
=
P
(
y
1
∣
c
1
)
P
(
y
2
∣
c
2
)
.
.
.
P
(
y
n
∣
c
n
)
(
7
)
P(y1y2...yn|c1c2...cn)=P(y1|c1)P(y2|c2)...P(yn|cn)(7)
P(y1y2...yn∣c1c2...cn)=P(y1∣c1)P(y2∣c2)...P(yn∣cn)(7)
但是这种方法完全没有考虑上下文,容易出现分词不合理的情况,例如BBB、BEM等输出结果。我们希望最大化P(y|x),通过贝叶斯公式转换能得到,
P
(
y
∣
x
)
=
P
(
x
∣
y
)
P
(
y
)
P
(
x
)
(
8
)
P(y|x)=\frac{P(x|y)P(y)}{P(x)} (8)
P(y∣x)=P(x)P(x∣y)P(y)(8)
x为给定的输入,因此P(x)计算为常数,最大化P(y|x),等价于最大化P(x|y)P(y)。针对P(x|y)P(y)做马尔科夫假设,得到:
P
(
x
∣
y
)
=
P
(
x
1
∣
y
1
)
P
(
x
2
∣
y
2
)
.
.
.
P
(
x
n
∣
y
n
)
(
9
)
P(x|y)=P(x1|y1)P(x2|y2)...P(xn|yn) (9)
P(x∣y)=P(x1∣y1)P(x2∣y2)...P(xn∣yn)(9)
P
(
y
)
=
P
(
y
1
)
P
(
y
2
∣
y
1
)
P
(
y
3
∣
y
1
,
y
2
)
.
.
.
P
(
y
n
∣
y
1
,
y
2
,
.
.
.
,
y
n
−
1
)
(
10
)
P(y)=P(y1)P(y2|y1)P(y3|y1,y2) ...P(yn|y1,y2,...,yn-1) (10)
P(y)=P(y1)P(y2∣y1)P(y3∣y1,y2)...P(yn∣y1,y2,...,yn−1)(10)
实际上,HMM做了另一个假设——齐次马尔可夫假设,每个输出仅与上一个输出有关:
P
(
y
)
=
P
(
y
1
)
P
(
y
2
∣
y
1
)
P
(
y
3
∣
y
2
)
.
.
.
P
(
y
n
∣
y
n
−
1
)
(
11
)
P(y)=P(y1)P(y2|y1)P(y3|y2) ...P(yn|yn-1) (11)
P(y)=P(y1)P(y2∣y1)P(y3∣y2)...P(yn∣yn−1)(11)
于是,
P
(
x
∣
y
)
P
(
y
)
=
P
(
x
1
∣
y
1
)
P
(
y
2
∣
y
1
)
P
(
x
2
∣
y
2
)
P
(
y
3
∣
y
2
)
.
.
.
P
(
y
n
∣
y
n
−
1
)
P
(
x
n
∣
y
n
)
P(x|y)P(y)=P(x1|y1)P(y2|y1)P(x2|y2)P(y3|y2)...P(yn|yn-1)P(xn|yn)
P(x∣y)P(y)=P(x1∣y1)P(y2∣y1)P(x2∣y2)P(y3∣y2)...P(yn∣yn−1)P(xn∣yn)
在HMM中,将P(xk|yk)成为发射概率,P(yk|yk-1)称为转移概率,通过设置某些P(yk|yk-1)=0来排除不合理标签组合。最后利用Viterbi算法来求解,此处不再赘述。
朴素贝叶斯分类
此处参考 https://www.cnblogs.com/taich-flute/p/6813815.html
参考:
https://zhuanlan.zhihu.com/p/38553838
https://blog.csdn.net/u012845311/article/details/73549585
https://www.zhihu.com/question/51448623