在讲HMM(Hidden Markov Model) 之前,应该先搞清楚马尔可夫链,因为 HMM 是根据马尔可夫链建立的一个统计模型,属于马尔可夫链的一种。
不太清楚马尔可夫链的,可以看我这篇文章马尔可夫链(Markov Chain)是什么?通俗易懂 - csdn
直接去看公式的话很难理解 HMM 模型,因为涉及很多专业名词。这里先讲一个 HMM 实例:
还是用最经典的例子,掷骰子。假设我手里有三个不同的骰子。第一个骰子是我们平常见的骰子(称这个骰子为D6),6个面,每个面(1,2,3,4,5,6)出现的概率是1/6。第二个骰子是个四面体(称这个骰子为D4),每个面(1,2,3,4)出现的概率是1/4。第三个骰子有八个面(称这个骰子为D8),每个面(1,2,3,4,5,6,7,8)出现的概率是1/8。如下图:
假设我们开始掷骰子,我们先从三个骰子里挑一个,挑到每一个骰子的概率都是1/3。然后我们掷骰子,得到一个数字,1,2,3,4,5,6,7,8中的一个。不停的重复上述过程,我们会得到一串数字,每个数字都是1,2,3,4,5,6,7,8中的一个。例如我们可能得到这么一串数字(掷骰子10次):
1 6 3 5 2 7 3 5 2 4
这串数字叫做可见状态链。但是在隐马尔可夫模型中,我们不仅仅有这么一串可见状态链,还有一串隐含状态链。在这个例子里,这串隐含状态链就是你用的骰子的序列。比如,隐含状态链有可能是:
D6 D8 D8 D6 D4 D8 D6 D6 D4 D8
一般来说, HMM 中说到的马尔可夫链其实是指隐含状态链,因为隐含状态(骰子)之间存在转换概率(transition probability)。在我们这个例子里,D6的下一个状态是D4,D6,D8的概率都是1/3。D4,D8的下一个状态是D4,D6,D8的转换概率也都一样是1/3。这样设定是为了最开始容易说清楚,但是我们其实是可以随意设定转换概率的。比如,我们可以这样定义,D6后面不能接D4,D6后面是D6的概率是0.9,是D8的概率是0.1。这样就是一个新的HMM。
同样的,尽管可见状态之间没有转换概率,但是隐含状态和可见状态之间有一个概率叫做输出概率(emission probability)。就我们的例子来说,六面骰(D6)产生1的输出概率是1/6。产生2,3,4,5,6的概率也都是1/6。我们同样可以对输出概率进行其他定义。比如,我有一个被赌场动过手脚的六面骰子,掷出来是1的概率更大,是1/2,掷出来是2,3,4,5,6的概率是1/10。
其实对于 HMM 来说,如果提前知道所有隐含状态之间的转换概率和所有隐含状态到所有可见状态之间的输出概率,做模拟是相当容易的。但是应用 HMM 模型时候呢,往往是缺失了一部分信息的,有时候你知道骰子有几种,每种骰子是什么,但是不知道掷出来的骰子序列;有时候你只是看到了很多次掷骰子的结果,剩下的什么都不知道。这就涉及到了 HMM 的三个基本问题,以后用到了再说。
数学定义看着头大,但是学习一个模型的时候,如果不去看数学定义,不去理解数学定义的话,我们很容易学的云里雾里的,好像自己懂了,又没完全懂,然后过阵子就忘了。我们结合上面的例子去对应数学定义中的符号,更容易理解。
HMM 由初始概率分布、状态转移概率分布以及观测概率分布确定。
骰子例子中,初始概率分布就是第一次选骰子的概率分布,比如第一次投掷时,我们有三个骰子,每一个骰子被选的概率都是1/3,就是初始概率分布。
状态转移概率分布就是每个骰子之间的转移概率分布,比如这一次我们用了 D4 骰子,下一次是 D4、D6 还是 D8 的概率,就叫做转移概率。就像下面的图一样,我们每条有向线都有一个概率,组合起来就是状态转移概率分布。
观测概率分布就是上面例子所说的输出概率(emission probability)。就我们的例子来说,六面骰(D6)产生1的输出概率是1/6。产生2,3,4,5,6的概率也都是1/6。同样可以对输出概率进行其他定义。比如,我有一个被赌场动过手脚的六面骰子,掷出来是1的概率更大,是1/2,掷出来是2,3,4,5,6的概率是1/10。
HMM 的形式定义如下:
首先我们假设 Q是所有可能的状态的集合, V是所有可能的观测的集合,即:
Q = { q 1 , q 2 , … , q N } , V = { v 1 , v 2 , … v M } Q=\left\{q_{1}, q_{2}, \ldots, q_{N}\right\}, V=\left\{v_{1}, v_{2}, \ldots v_{M}\right\} Q={q1,q2,…,qN},V={v1,v2,…vM}
其中, N是可能的状态数, M是可能的观测数。
骰子例子中,Q的集合就是{D4,D6,D8},V的集合就是{1,2,3,4,5,6,7,8}
I I I是长度为 T T T的状态序列,O是对应的观测序列:
I = { i 1 , i 2 , … , i T } , O = { o 1 , o 2 , … o T } I=\left\{i_{1}, i_{2}, \ldots, i_{T}\right\}, O=\left\{o_{1}, o_{2}, \ldots o_{T}\right\} I={i1,i2,…,iT},O={o1,o2,…oT}
其中,任意一个隐藏状态 i ∈ i_ \in it∈Q,任意一个观察状态 o t ∈ o_t \in ot∈V
骰子例子中, I I I就是我们的隐含状态链{D6 D8 D8 D6 D4 D8 D6 D6 D4 D8}, O O O就是我们投骰子10次获得的结果{1 6 3 5 2 7 3 5 2 4}
HMM模型做了两个很重要的假设如下:
1)齐次马尔科夫链假设。即任意时刻的隐藏状态只依赖于它前一个隐藏状态。当然这样假设有点极端,因为很多时候我们的某一个隐藏状态不仅仅只依赖于前一个隐藏状态,可能是前两个或者是前三个。但是这样假设的好处就是模型简单,便于求解。如果在时刻 t的隐藏状态是 i = q i_=q_ it=qi,在时刻 + 1 +1 t+1的隐藏状态是 + 1 = _{+1}=_ it+1=qj, 则从时刻 t到时刻 + 1 +1 t+1的 HMM 状态转移概率 a i j a_{ij} aij可以表示为:
a i j = P ( i t + 1 = q j ∣ i t = q i ) a_{i j}=P\left(i_{t+1}=q_{j} \mid i_{t}=q_{i}\right) aij=P(it+1=qj∣it=qi)
这样 a i j a_{ij} aij可以组成马尔科夫链的状态转移矩阵 A:
A = [ a i j ] N × N A=\left[a_{i j}\right]_{N \times N} A=[aij]N×N
骰子例子中,转移矩阵即是下图有向边的概率,组成的转换关系的矩阵,标示着 D4 到 D6 的概率、D4 到 D8 的概率…
2)观测独立性假设。即任意时刻的观察状态只仅仅依赖于当前时刻的隐藏状态,这也是一个为了简化模型的假设。如果在时刻 t的隐藏状态是 = _=_ it=qj, 而对应的观察状态为 = _=_ ot=vk, 则该时刻观察状态 _ vk在隐藏状态 _ qj下生成的概率为 ( ) _() bj(k),满足:
b j ( k ) = P ( o t = v k ∣ i t = q j ) b_{j}(k)=P\left(o_{t}=v_{k} \mid i_{t}=q_{j}\right) bj(k)=P(ot=vk∣it=qj)
其中 k = 1 , 2 , . . . M ; j = 1 , 2 , . . . , N k=1,2,...M; j=1,2,...,N k=1,2,...M;j=1,2,...,N.
这样 ( ) _() bj(k)可以组成观测状态生成的概率矩阵 B:
B = [ b j ( k ) ] N × M B=\left[b_{j}(k)\right]_{N \times M} B=[bj(k)]N×M
骰子例子中,矩阵 B B B就是文中所说的输出概率(emission probability)组成的矩阵。
除此之外,我们需要知道在 = 1 =1 t=1时刻的初始状态概率向量:
π = ( π i ) \pi = (\pi_i) π=(πi)
其中,
π i = P ( i 1 = q i ) , i = 1 , 2 , . . . , N \pi_i = P(i_1 = q_i), i=1,2,...,N πi=P(i1=qi),i=1,2,...,N
是 t = 1 t=1 t=1时刻处于状态 q i q_i qi的概率。
骰子例子中, π \pi π 就是我们第一次投骰子,选到每个骰子的概率都是1/3,则 π = { 1 / 3 , 1 / 3 , 1 / 3 } \pi=\{1/3,1/3,1/3\} π={1/3,1/3,1/3}
一个 HMM 模型,可以由状态初始概率分布 π \pi π, 状态转移概率矩阵 A和观测状态概率矩阵 B决定。 π , A \pi,A π,A决定状态序列, B 决定观测序列。因此,HMM 模型可以由一个三元组Font metrics not found for font: .表示如下:
λ = ( A , B , π ) \lambda = (A,B,\pi) λ=(A,B,π)
A , B , π A,B,\pi A,B,π称为隐马尔可夫模型的三要素。
状态转移概率矩阵A与初始状态概率向量pi确定了隐藏的马尔可夫链,生成不可观测的状态序列。观测概率矩阵B确定了如何从状态生成观测序列。
隐马尔可夫模型可用于标注,这时状态对应这标记。标注问题是给定观测序列预测其对应的标记序列。可以假设标注问题的数据是由隐马尔可夫模型生成的。
比如在 NLP 的词性标记任务中,可以将待标注的句子看作已知的观测序列,将该句子对应的词性序列看作隐藏状态序列。而这个隐藏状态序列是由隐藏的马尔可夫链生成的,从而对词性问题进行 HMM 模型的建模。
参考链接:
如何用简单易懂的例子解释隐马尔可夫模型?-知乎
HMM模型-博客园
李航统计学习方法-哔哩哔哩