本文主要介绍NLP领域中很重要的一个模型——隐马尔科夫模型(Hidden Markov Model,HMM)。希望读完本文后,大家能够清楚地理解HMM并能够应用到实际中。
隐马尔科夫模型是结构最简单的动态贝叶斯网(dynamic Bayesian network,也被称作有向图模型),HMM是可以用于标注问题的统计数学模型,描述由隐藏的马尔科夫链随机生成观测序列的过程,属于生成模型。HMM模型在语音识别、自然语言处理、生物信息、模式识别等领域有广泛的应用。
首先看看什么样的问题可以使用HMM模型解决。
使用HMM模型来解决的问题一般有两个特征:
如果问题有了这两个特征,那么这个问题一般可以使用HMM模型尝试解决,这样的问题在生活中是很多的。例如,说一句话,发出的声音是观测序列,想表达的意思是隐藏状态序列;写文章的过程可以想象为先在脑海中构思好一个满足语法的词性序列,然后再将每个词性填充为具体的词语。
隐马尔科夫模型是关于时序的概率模型,描述由一个隐藏的马尔科夫链随机生成不可观测的状态随机序列,再由各个状态生成一个观测而产生观测随机序列的过程(摘自《统计学习方法》)。隐藏的马尔科夫链随机生成的状态的序列,称为状态序列(state sequence),记作 y \boldsymbol{y} y;每个状态生成一个观测,而由此产生的观测的随机序列,称为观测序列(observation sequence),记作 x \boldsymbol{x} x。序列的每一个位置又可以看作一个时刻。
首先介绍一下马尔科夫假设:每个事件的发生概率只取决于前一个事件。将满足该假设的连续多个事件串联在一起,就构成了马尔科夫链。在NLP语境下,可以将事件具象为单词,于是马尔科夫模型就是二元语法。
有了隐马尔科夫链,如何建立与观测序列 x \boldsymbol{x} x的联系呢?HMM做了第二个假设:
设 Q Q Q是所有可能的状态的集合, V V V是所有可能的观测的集合。
Q = { q 1 , q 2 , . . . , q N } , V = { v 1 , v 2 , v 3 , . . . , v N } Q=\{q_1,q_2,...,q_N\},V=\{v_1,v_2,v_3,...,v_N\} Q={q1,q2,...,qN},V={v1,v2,v3,...,vN}
其中,N是可能的状态数,M是可能的观测数。
HMM模型用三元组来表示 λ = ( π , A , B ) \lambda=(\boldsymbol{\pi},A,B) λ=(π,A,B):
系统怎么从零开始呢? 观测值是由隐藏状态产生的,所以系统最初应该是生成隐藏状态。
初始概率向量指的是系统启动时进入的第一个状态 y 1 y_1 y1成为初始状态, y \boldsymbol{y} y有 N N N种取值,从 Q Q Q集合中选取一个,即 y ∈ { q 1 , q 2 , . . . , q N } \boldsymbol{y} \in \{q_1,q_2,...,q_N\} y∈{q1,q2,...,qN}。由于 y 1 y_1 y1是第一个状态,是一个独立的离散随机变量,可以用 p ( y 1 ∣ π ) p(y_1|\boldsymbol{\pi}) p(y1∣π)来描述, y 1 y_1 y1只由 π \boldsymbol{\pi} π来控制,其中 π = ( π 1 , π 2 , π 3 , . . . , π N ) T , 0 ≤ π i ≤ 1 , ∑ i = 1 N π i \boldsymbol{\pi}=(\pi_1,\pi_2,\pi_3,...,\pi_N)^T,0\leq\pi_i\leq1,\sum\limits^{N}_{i=1}{\pi_i} π=(π1,π2,π3,...,πN)T,0≤πi≤1,i=1∑Nπi=1。 π \boldsymbol{\pi} π是概率分布的参数向量,称为初始状态概率向量。给定 π \boldsymbol{\pi} π,初始状态 y 1 y_1 y1的取值分布就确定了。以中文分词问题为例,采用{B,M,E,S}标记时,其中B代表一个词的第一个字,M代表词的中间字,E代表词的末尾字,S代表单字成词。 y 1 y_1 y1所有可能的取值及对应的概率如下:
p ( y 1 = B ) = 0.7 p(y_1=B)=0.7 p(y1=B)=0.7
p ( y 1 = M ) = 0 p(y_1=M)=0 p(y1=M)=0
p ( y 1 = E ) = 0 p(y_1=E)=0 p(y1=E)=0
p ( y 1 = s ) = 0.3 p(y_1=s)=0.3 p(y1=s)=0.3
则 π = [ 0.7 , 0 , 0 , 0.3 ] \pi=[0.7,0,0,0.3] π=[0.7,0,0,0.3],也就是说句子第一个字可能是一个单字或者一个词的首字,不可能是一个词的中间或者尾字。
y 1 y_1 y1确定之后,怎么产生 x 1 x_1 x1呢?如何确定 x 1 x_1 x1的概率分布呢?
根据第二个假设:当前观测值 x 1 x_1 x1仅取决于当前的状态 y 1 y_1 y1,对于从 Q Q Q中取出的每一种状态 y 1 y_1 y1, x 1 x_1 x1都可以从 V V V集合中的 M M M个值选一个,所以对于每一个 y , x y,x y,x都是一个独立的离散随机变量,其概率参数对应一个向量,维度为 M M M,即 x ∈ { v 1 , v 2 , . . . , v N } \boldsymbol{x} \in \{v_1,v_2,...,v_N\} x∈{v1,v2,...,vN}。由于一共有 N N N种 y y y,所以这些向量构成了一个 N × M N\times M N×M矩阵,称为发射概率矩阵 B \boldsymbol{B} B。
B = [ b i j ] N × M = [ p ( x t = v i ∣ y t = q j ) ] N × M \boldsymbol{B}=[b_{ij}]_{N\times M}=[p(x_t=v_i|y_t=q_j)]_{N\times M} B=[bij]N×M=[p(xt=vi∣yt=qj)]N×M
其中, p ( x t = v i ∣ y t = q j ) p(x_t=v_i|y_t=q_j) p(xt=vi∣yt=qj)代表t时刻,隐藏状态 y t y_t yt是 q j q_j qj,由这个状态产生的观测值 x t x_t xt等于 v i v_i vi的概率。
状态 | 观测值1 | 观测值2 | … | 观测值M |
---|---|---|---|---|
状态1 | ||||
状态2 | ||||
… | ||||
状态N |
发射概率矩阵是一个非常形象的术语:可以将 y \boldsymbol{y} y想象成为不同的彩弹枪, x \boldsymbol{x} x为不同颜色的子弹,每把彩弹枪内的颜色子弹比例不一样,导致有的彩弹枪红色子弹较多比较容易发射红色彩弹,一些彩弹枪绿色子弹较多更容易发射绿色彩弹。
发射概率在中文分词中也具有实际意义,有些字符构词的位置比较固定,比如一把作为词首的枪,不容易发射出“餮”,因为“餮”一般作为“饕餮”的词尾出现。通过给 p ( x 1 = 餮 ∣ y 1 = B ) p(x_1=餮|y_1=B) p(x1=餮∣y1=B)较低的概率,HMM模型可以有效的防止“饕餮”被错误的切分。
y 1 y_1 y1确定之后,如何转移状态到 y 2 y_2 y2?乃至 y n y_n yn?
根据HMM模型的第一个假设: t + 1 t+1 t+1时刻的状态仅仅取决于 t t t时刻的状态。类似发射概率矩阵,对于 t t t时刻的每一种状态, y t + 1 y_{t+1} yt+1是一个离散的随机变量,取值有 N N N种。 t t t时刻一共可能有 N N N种状态,所以从 t t t时刻到 t + 1 t+1 t+1时刻的状态转移矩阵为 N × N N\times N N×N的方阵,称为状态转移概率矩阵 A \boldsymbol{A} A:
A = [ a i j ] N × N = [ p ( y t + 1 = v j ∣ y t = v i ) ] N × N \boldsymbol{A}=[a_{ij}]_{N\times N}=[p(y_{t+1}=v_j|y_t=v_i)]_{N\times N} A=[aij]N×N=[p(yt+1=vj∣yt=vi)]N×N
其中, p ( y t + 1 = s j ∣ y t = s i ) p(y_{t+1}=s_j|y_t=s_i) p(yt+1=sj∣yt=si)表示 t t t时刻的状态为 v i v_i vi, t + 1 t+1 t+1时刻的状态为 v j v_j vj的概率。
当前状态 | 下一状态是状态1 | 状态2 | … | 状态N |
---|---|---|---|---|
状态1 | ||||
状态2 | ||||
… | ||||
状态N |
例如,在中文分词中,标签B后面不可能是S,于是给 p ( y t + 1 = S ∣ y t = B ) = 0 p(y_{t+1}=S|y_t=B)=0 p(yt+1=S∣yt=B)=0就可以防止B后面接S的情况出现。
初始状态概率向量、状态转移概率矩阵与发射概率矩阵称为HMM模型的三元组 λ = ( π , A , B ) \lambda=(\boldsymbol{\pi},A,B) λ=(π,A,B),只要三元组确定了,HMM模型就确定了。
举一个经典的例子:
假设有四个盒子,每个盒子里都装有红白两种颜色的球,如下表:
盒子 | 1 | 2 | 3 | 4 |
---|---|---|---|---|
红球数 | 5 | 3 | 6 | 8 |
白球数 | 5 | 7 | 4 | 2 |
一共抽取出来5个球,得到一个球的颜色观察序列:
x = { 红 , 红 , 白 , 白 , 红 } \boldsymbol{x}=\{\color{red}红,红,\color{black}白,白,\color{red}红\} x={红,红,白,白,红}
在这个过程中,观察者只能观测到球的颜色序列,观测不到球是从哪个盒子取出的,即观察不到盒子的序列。
这个例子中有两个随机序列,一个是盒子的序列(状态序列),一个是球的颜色的观测序列(观测序列),前者是隐藏的,后者是可以观测的。根据所给的条件可以明确状态集合、观测集合、序列长度以及模型的三要素。
有了HMM模型之后,如何使用模型呢?HMM模型一个可以解决三个问题:
概率计算问题,也就是在给定的模型参数三元组的条件生成观测序列的过程。给定模型参数 λ = ( π , A , B ) \lambda=(\boldsymbol{\pi},A,B) λ=(π,A,B)和一个观测序列 x \boldsymbol{x} x,,计算在这个模型参数 λ \lambda λ下,观测序列出现的最大概率,即 p ( x ∣ λ ) p(\boldsymbol{x}|\lambda) p(x∣λ)的最大值。先介绍概念上可行但计算上不行的直接计算法(暴力解法),然后介绍前向算法与后向算法。
给定模型参数 λ = ( π , A , B ) \boldsymbol{\lambda}=(\boldsymbol{\pi},A,B) λ=(π,A,B)和一个观测序列 x = { x 1 , x 2 , x 3 , . . . x T } \boldsymbol{x}=\{x_1,x_2,x_3,...x_T\} x={x1,x2,x3,...xT},计算观测序列出现的概率 p ( x ∣ λ ) p(\boldsymbol{x}|\lambda) p(x∣λ),最直接的方法就是按照概率公式直接计算,通过列举所有可能的长度为 T T T的状态序列 y = { y 1 , y 2 , y 3 , . . . , y T } \boldsymbol{y}=\{y_1,y_2,y_3,...,y_T\} y={y1,y2,y3,...,yT},求各个状态序列 y \boldsymbol{y} y与观测序列 x = ( x 1 , x 2 , x 3 , . . . , x T ) \boldsymbol{x}=(x_1,x_2,x_3,...,x_T) x=(x1,x2,x3,...,xT)的联合概率 p ( x , y ∣ λ ) p(\boldsymbol{x},\boldsymbol{y}|\boldsymbol{\lambda}) p(x,y∣λ),,然后对所有可能的状态序列求和,得到 p ( x ∣ λ ) p(\boldsymbol{x}|\boldsymbol{\lambda}) p(x∣λ)。
状态序列 y = ( y 1 , y 2 , y 3 , . . . , y T ) \boldsymbol{y}=(y_1,y_2,y_3,...,y_T) y=(y1,y2,y3,...,yT)发生的概率是:
p ( y ∣ λ ) = π y 1 a y 1 y 2 a y 2 y 3 . . . a y T − 1 y T p(\boldsymbol{y}|\boldsymbol{\lambda})=\pi_{y_1}a_{y_1y_2}a_{y_2y_3}...a_{y_{T-1}y_T} p(y∣λ)=πy1ay1y2ay2y3...ayT−1yT
对固定的状态序列 y = ( y 1 , y 2 , y 3 , . . . , y T ) \boldsymbol{y}=(y_1,y_2,y_3,...,y_T) y=(y1,y2,y3,...,yT)并且观测序列为 x = ( x 1 , x 2 , x 3 , . . . , x T ) \boldsymbol{x}=(x_1,x_2,x_3,...,x_T) x=(x1,x2,x3,...,xT)的概率是:
p ( x ∣ y , λ ) = b y 1 x 1 b y 2 x 2 b y 3 x 3 . . . b y T x T p(\boldsymbol{x}|\boldsymbol{y},\boldsymbol{\lambda})=b_{y_1x_1}b_{y_2x_2}b_{y_3x_3}...b_{y_Tx_T} p(x∣y,λ)=by1x1by2x2by3x3...byTxT
在给定HMM模型参数 λ \boldsymbol{\lambda} λ的条件下, x , y \boldsymbol{x},\boldsymbol{y} x,y同时出现的联合概率为:
p ( x , y ∣ λ ) = p ( x ∣ y , λ ) p ( y ∣ λ ) = π y 1 b y 1 x 1 a y 1 y 2 b y 2 x 2 a y 2 y 3 b y 3 x 3 . . . a y T − 1 y T b y T x T \begin{aligned}p(\boldsymbol{x},\boldsymbol{y}|\boldsymbol{\lambda})&=p(\boldsymbol{x}|\boldsymbol{y},\boldsymbol{\lambda})p(\boldsymbol{y}|\boldsymbol{\lambda})\\ &=\pi_{y_1}b_{y_1x_1}a_{y_1y_2}b_{y_2x_2}a_{y_2y_3}b_{y_3x_3}...a_{y_{T-1}y_T}b_{y_Tx_T} \end{aligned} p(x,y∣λ)=p(x∣y,λ)p(y∣λ)=πy1by1x1ay1y2by2x2ay2y3by3x3...ayT−1yTbyTxT
然后,对所有可能的状态序列 y \boldsymbol{y} y求和,得到观测序列 x \boldsymbol{x} x的概率 p ( x ∣ λ ) p(\boldsymbol{x}|\lambda) p(x∣λ),即:
p ( x ∣ λ ) = ∑ y p ( x , y ∣ λ ) = ∑ y p ( x ∣ y , λ ) p ( y ∣ λ ) = ∑ y 1 , y 2 , y 3 , . . . , y T π y 1 b y 1 x 1 a y 1 y 2 b y 2 x 2 a y 2 y 3 b y 3 x 3 . . . a y T − 1 y T b y T x T \begin{aligned} p(\boldsymbol{x}|\lambda)&=\sum\limits_\boldsymbol{y}p(\boldsymbol{x},\boldsymbol{y}|\boldsymbol{\lambda})\\ &=\sum\limits_\boldsymbol{y}p(\boldsymbol{x}|\boldsymbol{y},\boldsymbol{\lambda})p(\boldsymbol{y}|\boldsymbol{\lambda})\\ &=\sum\limits_{y_1,y_2,y_3,...,y_T}\pi_{y_1}b_{y_1x_1}a_{y_1y_2}b_{y_2x_2}a_{y_2y_3}b_{y_3x_3}...a_{y_{T-1}y_T}b_{y_Tx_T} \end{aligned} p(x∣λ)=y∑p(x,y∣λ)=y∑p(x∣y,λ)p(y∣λ)=y1,y2,y3,...,yT∑πy1by1x1ay1y2by2x2ay2y3by3x3...ayT−1yTbyTxT
利用这个公式计算量很大,复杂度是 O ( T N T ) O(TN^T) O(TNT),在实际中是不可行的。
首先需要定义前向概率:给定HMM模型 λ \boldsymbol{\lambda} λ,定义时刻 t t t部分观测序列为 x = ( x 1 , x 2 , x 3 , . . . , x t ) \boldsymbol{x}=(x_1,x_2,x_3,...,x_t) x=(x1,x2,x3,...,xt)且状态为 q i q_i qi的概率为前向概率,记作:
α t ( i ) = p ( x 1 , x 2 , x 3 , . . . , x t , y t = q i ∣ λ ) \alpha_t(i)=p(x_1,x_2,x_3,...,x_t,y_t=q_i|\boldsymbol{\lambda}) αt(i)=p(x1,x2,x3,...,xt,yt=qi∣λ)
前向算法:
算法步骤:
对 t = 1 , 2 , 3 , . . . T − 1 t=1,2,3,...T-1 t=1,2,3,...T−1,有:
α t + 1 ( i ) = [ ∑ j = 1 N α t ( j ) a j i ] b i x t + 1 , i = 1 , 2 , 3 , . . . N \alpha_{t+1}(i)=[\sum\limits^N_{j=1}\alpha_t(j)a_{ji}]b_{ix_{t+1}},\quad i=1,2,3,...N αt+1(i)=[j=1∑Nαt(j)aji]bixt+1,i=1,2,3,...N
3. 终止:
时刻 t = T t=T t=T:
根据定义可知: α T ( i ) \alpha_T(i) αT(i)表示, t = T t=T t=T时刻,处于状态 y T = q i y_T=q_i yT=qi,并且观察到的序列为 x = ( x 1 , x 2 , x 3 , . . . , x T ) \boldsymbol{x}=(x_1,x_2,x_3,...,x_T) x=(x1,x2,x3,...,xT)的概率:
α T ( i ) = p ( x 1 , x 2 , x 3 , . . . , x T , y T = q i ∣ λ ) = p ( x , y T = q i ∣ λ ) \begin{aligned} \alpha_T(i)&=p(x_1,x_2,x_3,...,x_T,y_T=q_i|\boldsymbol{\lambda})\\ &=p(\boldsymbol{x},y_T=q_i|\boldsymbol{\lambda}) \end{aligned} αT(i)=p(x1,x2,x3,...,xT,yT=qi∣λ)=p(x,yT=qi∣λ)
所以:
p ( x ∣ λ ) = ∑ i = 1 N α T ( i ) p(\boldsymbol{x}|\boldsymbol{\lambda})=\sum\limits^N_{i=1}\alpha_T(i) p(x∣λ)=i=1∑NαT(i)
前向算法实际是基于“状态序列的路径结构”递推计算 p ( x ∣ λ ) p(\boldsymbol{x}|\boldsymbol{\lambda}) p(x∣λ)的算法。前向算法高效的关键是其局部计算前向概率,然后利用路径结构将前向概率递推到全局,得到 p ( x ∣ λ ) p(\boldsymbol{x}|\boldsymbol{\lambda}) p(x∣λ)。在 t = 1 t=1 t=1时刻计算 α 1 ( i ) \alpha_1(i) α1(i)的 N N N个值,而当 t ≥ 2 t\geq2 t≥2时,计算每一个\alpha_t(i)的值都会利用前 N N N个 α t − 1 ( i ) \alpha_{t-1}(i) αt−1(i)的值,减少计算量的原因在于每一次计算都直接引用前一个时刻的计算结果,避免了概率的重复计算,复杂度为 O ( N ∗ N ∗ T ) O(N*N*T) O(N∗N∗T),而不是直接算法的 O ( T N T ) O(TN^T) O(TNT)。
例:上文中的盒子和球模型,状态集合为 Q = { 1 , 2 , 3 } Q=\{1,2,3\} Q={1,2,3},观测集合为 V = { 红 , 白 } V=\{红,白\} V={红,白},
A = [ 0.5 0.2 0.3 0.3 0.5 0.2 0.2 0.3 0.5 ] A=\begin{bmatrix} 0.5 & 0.2 & 0.3\\ 0.3 & 0.5 & 0.2\\ 0.2 & 0.3 & 0.5 \end{bmatrix} A=⎣⎡0.50.30.20.20.50.30.30.20.5⎦⎤ , B = [ 0.5 0.5 0.4 0.6 0.7 0.3 ] B=\begin{bmatrix} 0.5 & 0.5 \\ 0.4 & 0.6\\ 0.7 & 0.3 \end{bmatrix} B=⎣⎡0.50.40.70.50.60.3⎦⎤ , π = ( 0.2 , 0.4 , 0.4 ) T \pi=(0.2,0.4,0.4)^T π=(0.2,0.4,0.4)T
设 T = 3 T=3 T=3, x = ( 红 , 白 , 红 ) \boldsymbol{x}=(红,白,红) x=(红,白,红),用前向算法来计算 p ( x ∣ λ ) p(\boldsymbol{x}|\boldsymbol{\lambda}) p(x∣λ)。
解:
α 1 ( 2 ) = π 2 b 2 x 1 = 0.4 × 0.4 = 0.16 \alpha_1(2)=\pi_2b_{2x_1}=0.4\times0.4=0.16 α1(2)=π2b2x1=0.4×0.4=0.16
α 1 ( 3 ) = π 3 b 3 x 1 = 0.4 × 0.7 = 0.28 \alpha_1(3)=\pi_3b_{3x_1}=0.4\times0.7=0.28 α1(3)=π3b3x1=0.4×0.7=0.28
2. 递推计算:
α 2 ( 1 ) = [ ∑ i = 1 3 α 1 ( i ) a i 1 ] b 1 x 2 = [ 0.10 × 0.5 + 0.16 × 0.3 + 0.28 × 0.2 ) ] × 0.5 = 0.077 \alpha_2(1)=[\sum\limits_{i=1}^3\alpha_1(i)a_{i1}]b_{1x_2}=[0.10\times0.5+0.16\times0.3+0.28\times0.2)]\times0.5=0.077 α2(1)=[i=1∑3α1(i)ai1]b1x2=[0.10×0.5+0.16×0.3+0.28×0.2)]×0.5=0.077
α 2 ( 2 ) = [ ∑ i = 1 3 α 1 ( i ) a i 2 ] b 2 x 2 = [ 0.10 × 0.2 + 0.16 × 0.5 + 0.28 × 0.3 ) ] × 0.5 = 0.1104 \alpha_2(2)=[\sum\limits_{i=1}^3\alpha_1(i)a_{i2}]b_{2x_2}=[0.10\times0.2+0.16\times0.5+0.28\times0.3)]\times0.5=0.1104 α2(2)=[i=1∑3α1(i)ai2]b2x2=[0.10×0.2+0.16×0.5+0.28×0.3)]×0.5=0.1104
α 2 ( 3 ) = [ ∑ i = 1 3 α 1 ( i ) a i 3 ] b 3 x 2 = [ 0.10 × 0.3 + 0.16 × 0.2 + 0.28 × 0.5 ) ] × 0.5 = 0.0606 \alpha_2(3)=[\sum\limits_{i=1}^3\alpha_1(i)a_{i3}]b_{3x_2}=[0.10\times0.3+0.16\times0.2+0.28\times0.5)]\times0.5=0.0606 α2(3)=[i=1∑3α1(i)ai3]b3x2=[0.10×0.3+0.16×0.2+0.28×0.5)]×0.5=0.0606
α 3 ( 1 ) = [ ∑ i = 1 3 α 2 ( i ) a i 1 ] b 1 x 3 = 0.04187 \alpha_3(1)=[\sum\limits_{i=1}^3\alpha_2(i)a_{i1}]b_{1x_3}=0.04187 α3(1)=[i=1∑3α2(i)ai1]b1x3=0.04187
α 3 ( 2 ) = [ ∑ i = 1 3 α 2 ( i ) a i 2 ] b 2 x 3 = 0.03551 \alpha_3(2)=[\sum\limits_{i=1}^3\alpha_2(i)a_{i2}]b_{2x_3}=0.03551 α3(2)=[i=1∑3α2(i)ai2]b2x3=0.03551
α 3 ( 3 ) = [ ∑ i = 1 3 α 2 ( i ) a i 3 ] b 3 x 3 = 0.05284 \alpha_3(3)=[\sum\limits_{i=1}^3\alpha_2(i)a_{i3}]b_{3x_3}=0.05284 α3(3)=[i=1∑3α2(i)ai3]b3x3=0.05284
p ( x ∣ λ ) = ∑ i = 1 3 α 3 ( i ) = 0.13022 p(\boldsymbol{x}|\boldsymbol{\lambda})=\sum\limits_{i=1}^3\alpha_3(i)=0.13022 p(x∣λ)=i=1∑3α3(i)=0.13022
类似前向算法,定义:给定HMM模型 λ \boldsymbol{\lambda} λ,定义时刻 t t t状态为 q i q_i qi的条件下,从 t + 1 到 T t+1到T t+1到T的部分观测序列为 x t + 1 , x t + 2 , x t + 3 , . . . , x T x_{t+1},x_{t+2},x_{t+3},...,x_T xt+1,xt+2,xt+3,...,xT的概率为后向概率,记作:
β t ( i ) = p ( x t + 1 , x t + 2 , x t + 3 , . . . , x T ∣ y t = q i , λ ) \beta_t(i)=p(x_{t+1},x_{t+2},x_{t+3},...,x_T|y_t=q_i,\boldsymbol{\lambda}) βt(i)=p(xt+1,xt+2,xt+3,...,xT∣yt=qi,λ)
后向算法:
a i j = p ( y t + 1 = q j ∣ y t = q i , λ ) ) a_{ij}=p(y_{t+1}=q_j|y_t=q_i,\boldsymbol{\lambda})) aij=p(yt+1=qj∣yt=qi,λ))
β t + 1 ( j ) = p ( x t + 2 , x t + 3 , . . . , x T ∣ y t + 1 = q j , λ ) \beta_{t+1}(j)=p(x_{t+2},x_{t+3},...,x_T|y_{t+1}=q_j,\boldsymbol{\lambda}) βt+1(j)=p(xt+2,xt+3,...,xT∣yt+1=qj,λ)
由状态 y t + 1 = q j y_{t+1}=q_j yt+1=qj生成 t + 1 t+1 t+1时刻的观测值 x t + 1 x_{t+1} xt+1:
b j x t + 1 β t + 1 ( j ) = p ( x t + 1 ∣ y t + 1 = q j , λ ) p ( x t + 2 , x t + 3 , . . . , x T ∣ y t + 1 = q j , λ ) = p ( x t + 1 , x t + 2 , . . . , x T ∣ y t + 1 = q j , λ ) \begin{aligned} b_{jx_{t+1}}\beta_{t+1}(j)&=p(x_{t+1}|y_{t+1}=q_j,\boldsymbol{\lambda})p(x_{t+2},x_{t+3},...,x_T|y_{t+1}=q_j,\boldsymbol{\lambda})\\ &=p(x_{t+1},x_{t+2},...,x_T|y_{t+1}=q_j,\boldsymbol{\lambda})\end{aligned} bjxt+1βt+1(j)=p(xt+1∣yt+1=qj,λ)p(xt+2,xt+3,...,xT∣yt+1=qj,λ)=p(xt+1,xt+2,...,xT∣yt+1=qj,λ)
按照条件概率来理解:在 t + 1 t+1 t+1时刻状态为 y t + 1 = q j y_{t+1}=q_j yt+1=qj的条件下,观察到 x t + 1 , x t + 2 , . . . , x T x_{t+1},x_{t+2},...,x_T xt+1,xt+2,...,xT的概率为 b j x t + 1 β t + 1 ( j ) b_{jx_{t+1}}\beta_{t+1}(j) bjxt+1βt+1(j),由于 β t ( i ) \beta_t(i) βt(i)与 t t t时刻的状态 y t y_t yt有关,根据HMM模型的第一个假设, y t + 1 y_{t+1} yt+1仅仅与 y t y_t yt有关,且概率 a i j a_{ij} aij由状态转移矩阵矩阵A提供。 β t ( i ) \beta_t(i) βt(i)表示在 t t t时刻状态为 y t = q i y_t=q_i yt=qi的条件下,观察到 x t + 1 , x t + 2 , . . . , x T x_{t+1},x_{t+2},...,x_T xt+1,xt+2,...,xT的概率,这个概率若要用 β t + 1 ( j ) \beta_{t+1}(j) βt+1(j)来表示,针对每一个 y t + 1 = q j y_{t+1}=q_j yt+1=qj,都要乘以从 y t = q i y_t=q_i yt=qi到 y t + 1 = q j y_{t+1}=q_j yt+1=qj的状态转移概率 a i j a_{ij} aij, y t + 1 y_{t+1} yt+1一共有N种状态,所以:
a i j b j x t + 1 β t + 1 ( j ) = p ( x t + 1 , x t + 2 , . . . , x T ∣ y t + 1 = q j , λ ) a i j = p ( x t + 1 , x t + 2 , . . . , x T ∣ y t + 1 = q j , λ ) p ( y t + 1 = q j ∣ y t = q i , λ ) ) = p ( x t + 1 , x t + 2 , . . . , x T , y t + 1 = q j , ∣ y t = q i , λ ) \begin{aligned} a_{ij}b_{jx_{t+1}}\beta_{t+1}(j)&=p(x_{t+1},x_{t+2},...,x_T|y_{t+1}=q_j,\boldsymbol{\lambda})a_{ij}\\ &=p(x_{t+1},x_{t+2},...,x_T|y_{t+1}=q_j,\boldsymbol{\lambda})p(y_{t+1}=q_j|y_t=q_i,\boldsymbol{\lambda}))\\ &=p(x_{t+1},x_{t+2},...,x_T,y_{t+1}=q_j,|y_t=q_i,\boldsymbol{\lambda}) \end{aligned} aijbjxt+1βt+1(j)=p(xt+1,xt+2,...,xT∣yt+1=qj,λ)aij=p(xt+1,xt+2,...,xT∣yt+1=qj,λ)p(yt+1=qj∣yt=qi,λ))=p(xt+1,xt+2,...,xT,yt+1=qj,∣yt=qi,λ)
β t ( i ) = p ( x t + 1 , x t + 2 , . . . , x T ∣ y t = q i , λ ) = ∑ y t + 1 p ( x t + 1 , x t + 2 , . . . , x T , y t + 1 = q j , ∣ y t = q i , λ ) = ∑ j = 1 N a i j b j x t + 1 β t + 1 ( j ) \begin{aligned}\beta_t(i)&=p(x_{t+1},x_{t+2},...,x_T|y_t=q_i,\boldsymbol{\lambda})\\ &=\sum\limits_{y_{t+1}}p(x_{t+1},x_{t+2},...,x_T,y_{t+1}=q_j,|y_t=q_i,\boldsymbol{\lambda})\\ &=\sum\limits_{j=1}^Na_{ij}b_{jx_{t+1}}\beta_{t+1}(j) \end{aligned} βt(i)=p(xt+1,xt+2,...,xT∣yt=qi,λ)=yt+1∑p(xt+1,xt+2,...,xT,yt+1=qj,∣yt=qi,λ)=j=1∑Naijbjxt+1βt+1(j)
所以:
β t ( i ) = ∑ j = 1 N a i j b j x t + 1 β t + 1 ( j ) , i = 1 , 2 , 3 , . . . , N \beta_t(i)=\sum\limits_{j=1}^Na_{ij}b_{jx_{t+1}}\beta_{t+1}(j),\quad i=1,2,3,...,N βt(i)=j=1∑Naijbjxt+1βt+1(j),i=1,2,3,...,N
3. 当 t = 1 t=1 t=1时, β 1 ( i ) = p ( x 2 , x 3 , x 4 , . . . , x T ∣ y 1 = q i , λ ) \beta_1(i)=p(x_2,x_3,x_4,...,x_T|y_1=q_i,\boldsymbol{\lambda}) β1(i)=p(x2,x3,x4,...,xT∣y1=qi,λ);按照步骤2的思想,针对 t = 1 t=1 t=1时刻的每一种状态 y 1 = q i y_1=q_i y1=qi,都需要乘上初始状态概率向量和相应的发射概率矩阵。
p ( x ∣ λ ) = ∑ i = 1 N π i b i x 1 β 1 ( i ) p(\boldsymbol{x}|\boldsymbol{\lambda})=\sum\limits_{i=1}^N\pi_ib_{ix_1}\beta_{1}(i) p(x∣λ)=i=1∑Nπibix1β1(i)
利用前向概率和后向概率,可以得到关于单个状态和两个状态概率的计算公式。
可以用过前向和后向算法来算:
γ t ( i ) = p ( y t = q i ∣ x , λ ) = p ( y t = q i , x ∣ λ ) p ( x ∣ λ ) \begin{aligned} \gamma_t(i)=p(y_t=q_i|\boldsymbol{x},\boldsymbol{\lambda})=\frac{p(y_t=q_i,\boldsymbol{x}|\boldsymbol{\lambda})}{p(\boldsymbol{x}|\boldsymbol{\lambda})} \end{aligned} γt(i)=p(yt=qi∣x,λ)=p(x∣λ)p(yt=qi,x∣λ)
α t ( i ) \alpha_t(i) αt(i)定义为时刻 t t t部分观测序列为 x = ( x 1 , x 2 , x 3 , . . . , x t ) \boldsymbol{x}=(x_1,x_2,x_3,...,x_t) x=(x1,x2,x3,...,xt)且状态为 q i q_i qi的概率, β t ( i ) \beta_t(i) βt(i)定义为时刻 t t t状态为 q i q_i qi的条件下,从 t + 1 到 T t+1到T t+1到T的部分观测序列为 x t + 1 , x t + 2 , x t + 3 , . . . , x T x_{t+1},x_{t+2},x_{t+3},...,x_T xt+1,xt+2,xt+3,...,xT的概率,则两者相乘表示,观察序列为 x = ( x 1 , x 2 , x 3 , . . . , x T ) \boldsymbol{x}=(x_1,x_2,x_3,...,x_T) x=(x1,x2,x3,...,xT)且状态为 q i q_i qi的概率,数学表示为:
α t ( i ) β t ( i ) = p ( y t = q i , x ∣ λ ) \alpha_t(i)\beta_t(i)=p(y_t=q_i,\boldsymbol{x}|\boldsymbol{\lambda}) αt(i)βt(i)=p(yt=qi,x∣λ)
p ( x ∣ λ ) = ∑ y t p ( y t = q i , x ∣ λ ) = ∑ j = 1 N α t ( i ) β t ( i ) p(\boldsymbol{x}|\boldsymbol{\lambda})=\sum\limits_{y_t}p(y_t=q_i,\boldsymbol{x}|\boldsymbol{\lambda})=\sum\limits_{j=1}^N\alpha_t(i)\beta_t(i) p(x∣λ)=yt∑p(yt=qi,x∣λ)=j=1∑Nαt(i)βt(i)
所以:
γ t ( i ) = α t ( i ) β t ( i ) p ( x ∣ λ ) = α t ( i ) β t ( i ) ∑ j = 1 N α t ( i ) β t ( i ) \gamma_t(i)=\frac{\alpha_t(i)\beta_t(i)}{p(\boldsymbol{x}|\boldsymbol{\lambda})}=\frac{\alpha_t(i)\beta_t(i)}{\sum\limits_{j=1}^N\alpha_t(i)\beta_t(i)} γt(i)=p(x∣λ)αt(i)βt(i)=j=1∑Nαt(i)βt(i)αt(i)βt(i)
2. 给定HMM模型参数 λ \boldsymbol{\lambda} λ和观测序列 x \boldsymbol{x} x,在时刻 t t t处于状态 q i q_i qi且在时刻 t + 1 t+1 t+1处于状态 q j q_j qj的概率,记作 ξ t ( i , j ) \xi_t(i,j) ξt(i,j):
ξ t ( i , j ) = p ( y t = q i , y t + 1 = q j ∣ x , λ ) \xi_t(i,j)=p(y_t=q_i,y_{t+1}=q_j|\boldsymbol{x},\boldsymbol{\lambda}) ξt(i,j)=p(yt=qi,yt+1=qj∣x,λ)
使用前向和后向算法来计算:
ξ t ( i , j ) = p ( y t = q i , y t + 1 = q j ∣ x , λ ) = p ( y t = q i , y t + 1 = q j , x ∣ λ ) p ( x , λ ) = p ( y t = q i , y t + 1 = q j , x ∣ λ ) ∑ i = 1 N ∑ j = 1 N p ( y t = q i , y t + 1 = q j , x ∣ λ ) \begin{aligned} \xi_t(i,j)&=p(y_t=q_i,y_{t+1}=q_j|\boldsymbol{x},\boldsymbol{\lambda})\\ &=\frac{p(y_t=q_i,y_{t+1}=q_j,\boldsymbol{x}|\boldsymbol{\lambda})}{p(\boldsymbol{x},\boldsymbol{\lambda)}}\\ &=\frac{p(y_t=q_i,y_{t+1}=q_j,\boldsymbol{x}|\boldsymbol{\lambda})}{\sum\limits_{i=1}^N\sum\limits_{j=1}^Np(y_t=q_i,y_{t+1}=q_j,\boldsymbol{x}|\boldsymbol{\lambda})} \end{aligned} ξt(i,j)=p(yt=qi,yt+1=qj∣x,λ)=p(x,λ)p(yt=qi,yt+1=qj,x∣λ)=i=1∑Nj=1∑Np(yt=qi,yt+1=qj,x∣λ)p(yt=qi,yt+1=qj,x∣λ)
而 p ( y t = q i , y t + 1 = q j , x ∣ λ ) p(y_t=q_i,y_{t+1}=q_j,\boldsymbol{x}|\boldsymbol{\lambda}) p(yt=qi,yt+1=qj,x∣λ)表示在模型参数下,观测序列 x \boldsymbol{x} x以及 t t t时刻状态为 q i q_i qi且时刻 t + 1 t+1 t+1处于状态 q j q_j qj的概率, α t ( i ) = p ( y t = q i , x 1 , x 2 , x 3 , . . . , x t ∣ λ ) \alpha_t(i)=p(y_t=q_i,x_1,x_2,x_3,...,x_t|\boldsymbol{\lambda}) αt(i)=p(yt=qi,x1,x2,x3,...,xt∣λ)表示在模型参数下,观测序列 x 1 , x 2 , x 3 , . . . , x t x_1,x_2,x_3,...,x_t x1,x2,x3,...,xt以及 t t t时刻状态为 q i q_i qi的概率, β t + 1 ( j ) = p ( x t + 2 , x t + 3 , . . . , x T ∣ y t + 1 = q j , λ ) \beta_{t+1}(j)=p(x_{t+2},x_{t+3},...,x_T|y_{t+1}=q_j,\boldsymbol{\lambda}) βt+1(j)=p(xt+2,xt+3,...,xT∣yt+1=qj,λ)表示在模型参数和 t + 1 t+1 t+1时刻状态为 q j q_j qj的条件下,观察序列为 x t + 2 , x t + 3 , . . . , x T x_{t+2},x_{t+3},...,x_T xt+2,xt+3,...,xT,两者之间差一个从时刻 t 到 t + 1 t到t+1 t到t+1的状态转移概率以及时刻 t + 1 t+1 t+1状态 q j q_j qj产生序列 x t + 1 x_{t+1} xt+1的概率:
p ( y t = q i , y t + 1 = q j , x ∣ λ ) = p ( y t = q i , x 1 , x 2 , . . . , x t ∣ λ ) p ( y t + 1 ∣ y t , λ ) p ( x t + 1 ∣ y t + 1 , λ ) p ( x t + 2 , x t + 3 , . . . , x T ∣ y t + 1 = q j , λ ) = α t ( i ) a i j b j x t + 1 β t + 1 ( j ) \begin{aligned} p(y_t=q_i,y_{t+1}=q_j,\boldsymbol{x}|\boldsymbol{\lambda})&=p(y_t=q_i,x_1,x_2,...,x_t|\boldsymbol{\lambda})p(y_{t+1}|y_t,\boldsymbol{\lambda})\\&\qquad p(x_{t+1}|y_{t+1},\boldsymbol{\lambda})p(x_{t+2},x_{t+3},...,x_T|y_{t+1}=q_j,\boldsymbol{\lambda})\\ &=\alpha_t(i)a_{ij}b_{jx_{t+1}}\beta_{t+1}(j) \end{aligned} p(yt=qi,yt+1=qj,x∣λ)=p(yt=qi,x1,x2,...,xt∣λ)p(yt+1∣yt,λ)p(xt+1∣yt+1,λ)p(xt+2,xt+3,...,xT∣yt+1=qj,λ)=αt(i)aijbjxt+1βt+1(j)
所以:
ξ t ( i , j ) = α t ( i ) a i j b j x t + 1 β t + 1 ( j ) ∑ i = 1 N ∑ j = 1 N α t ( i ) a i j b j x t + 1 β t + 1 ( j ) \xi_t(i,j)=\frac{\alpha_t(i)a_{ij}b_{jx_{t+1}}\beta_{t+1}(j)}{\sum\limits_{i=1}^N\sum\limits_{j=1}^N\alpha_t(i)a_{ij}b_{jx_{t+1}}\beta_{t+1}(j)} ξt(i,j)=i=1∑Nj=1∑Nαt(i)aijbjxt+1βt+1(j)αt(i)aijbjxt+1βt+1(j)
3.将 ξ t ( i , j ) \xi_t(i,j) ξt(i,j)和 γ t ( i ) \gamma_t(i) γt(i)对各个时刻求和,可以得到一些有用的期望值:
给定训练集 ( x ( i ) , y ( i ) ) (\boldsymbol{x}^{(i)},\boldsymbol{y}^{(i)}) (x(i),y(i)),估计模型参数 λ = ( π , A , B ) \lambda=(\boldsymbol{\pi},A,B) λ=(π,A,B),使得在该模型下观测序列概率 p ( x ∣ λ ) p(\boldsymbol{x}|\lambda) p(x∣λ)最大。根据训练数据是否有状态序列数据分为:完全数据和非完全数据,分别使用监督学习和非监督学习实现。
在监督学习中,我们使用极大似然法来估计HMM模型参数。
假设给定训练数据包含S个长度相同的观测序列 { ( x 1 , y 1 ) , ( x 2 , y 2 ) , . . . , ( x S , y S ) } \{(\boldsymbol{x}^1,\boldsymbol{y}^1),(\boldsymbol{x}^2,\boldsymbol{y}^2),...,(\boldsymbol{x}^S,\boldsymbol{y}^S)\} {(x1,y1),(x2,y2),...,(xS,yS)},使用极大似然法来估计HMM模型参数。
初始状态概率向量的估计:
统计S个样本中,初始状态为 q i q_i qi的频率。
π ^ i = N q i S \hat{\pi}_i=\frac{N_{q_i}}{S} π^i=SNqi
其中, N q i N_{q_i} Nqi是初始状态为 q i q_i qi的样本数量,S是样本的数量。
状态转移概率矩阵的估计:
设样本中时刻t处于状态 q i q_i qi,时刻t+1处于状态 q j q_j qj的频数为 A i j A_{ij} Aij,那么状态转移概率矩阵的估计为:
a ^ i j = A i j ∑ j = 1 N A i j , j = 1 , 2 , 3 , . . . , N ; i = 1 , 2 , 3 , . . . , N \hat{a}_{ij}=\frac{A_{ij}}{\sum\limits_{j=1}^NA_{ij}},\quad j=1,2,3,...,N;\quad i=1,2,3,...,N a^ij=j=1∑NAijAij,j=1,2,3,...,N;i=1,2,3,...,N
发射概率矩阵的估计:
设样本中状态为 i i i并观测值为 j j j的频数 B i j B_{ij} Bij,那么状态为 i i i观测为 j j j的概率 b i j b_{ij} bij的估计为:
b ^ i j = B i j ∑ j = 1 M B i j , j = 1 , 2 , 3 , . . . , M ; i = 1 , 2 , 3 , . . . , N \hat{b}_{ij}=\frac{B_{ij}}{\sum\limits_{j=1}^MB_{ij}},\quad j=1,2,3,...,M;\quad i=1,2,3,...,N b^ij=j=1∑MBijBij,j=1,2,3,...,M;i=1,2,3,...,N
监督学习的方法就是拿频率来估计概率。
假设给定训练数据只包含S个长度为T的观测序列 x = { x 1 , x 2 , , . . . , x S } \boldsymbol{x}=\{\boldsymbol{x}^1,\boldsymbol{x}^2,,...,\boldsymbol{x}^S\} x={x1,x2,,...,xS}而没有对应的状态序列,目标是学习HMM模型的参数 λ = ( π , A , B ) \boldsymbol{\lambda}=(\boldsymbol{\pi},A,B) λ=(π,A,B)。将状态序列看作不可观测的隐数据 Y \boldsymbol{Y} Y,HMM模型事实上是一个含有隐变量的概率模型:
p ( X ∣ λ ) = ∑ Y p ( X ∣ Y , λ ) p ( Y ∣ λ ) p(\boldsymbol{X}|\boldsymbol{\lambda})=\sum\limits_\boldsymbol{Y}p(\boldsymbol{X}|\boldsymbol{Y},\boldsymbol{\lambda})p(\boldsymbol{Y}|\boldsymbol{\lambda}) p(X∣λ)=Y∑p(X∣Y,λ)p(Y∣λ)
这个参数可以由EM算法实现。
确定数据的对数似然函数
所有观测数据写成 x = { x 1 , x 2 , x 3 , . . . , x T } \boldsymbol{x}=\{x_1,x_2,x_3,...,x_T\} x={x1,x2,x3,...,xT},所有的隐藏状态数据写成 y = { y 1 , y 2 , , . . . , y T } \boldsymbol{y}=\{y_1,y_2,,...,y_T\} y={y1,y2,,...,yT},则完全数据是 ( x , y ) = ( x 1 , x 2 , x 3 , . . . , x T , y 1 , y 2 , , . . . , y T ) (\boldsymbol{x},\boldsymbol{y})=(x_1,x_2,x_3,...,x_T,y_1,y_2,,...,y_T) (x,y)=(x1,x2,x3,...,xT,y1,y2,,...,yT),完全数据的对数似然函数是 log p ( x , y ∣ λ ) \log{p(\boldsymbol{x},\boldsymbol{y}|\boldsymbol{\lambda})} logp(x,y∣λ)。
Em算法的E步:求Q函数 Q ( λ , λ ‾ ) = E y [ log p ( y , y ∣ λ ) ∣ x , λ ‾ ] = ∑ y log p ( x , y ∣ λ ) p ( x , y ∣ λ ‾ ) \begin{aligned} Q(\boldsymbol{\lambda},\overline{\boldsymbol{\lambda}})&=E_\boldsymbol{y}[\log{p(\boldsymbol{y},\boldsymbol{y}|\boldsymbol{\lambda})}|\boldsymbol{x},\overline{\boldsymbol{\lambda}}]\\ &=\sum\limits_\boldsymbol{y}\log{p(\boldsymbol{x},\boldsymbol{y}|\boldsymbol{\lambda})}p(\boldsymbol{x},\boldsymbol{y}|\overline{\boldsymbol{\lambda}}) \end{aligned} Q(λ,λ)=Ey[logp(y,y∣λ)∣x,λ]=y∑logp(x,y∣λ)p(x,y∣λ)
其中 λ ‾ \overline{\boldsymbol{\lambda}} λ是HMM模型参数的当前估计值, λ \boldsymbol{\lambda} λ是要极大化的HMM模型参数。
p ( x , y ∣ λ ) = π y 1 b y 1 x 1 a y 1 y 2 b y 2 x 2 ⋅ . . . ⋅ a y T − 1 y T b y T x T p(\boldsymbol{x},\boldsymbol{y}|\boldsymbol{\lambda})=\pi_{y_1}b_{y_1x_1}a_{y_1y_2}b_{y_2x_2}\cdot ...\cdot a_{y_{T-1}y_T}b_{y_Tx_T} p(x,y∣λ)=πy1by1x1ay1y2by2