HMM与CRF笔记

本文为阅读李航的《统计学习方法》和周志华的西瓜书后,对HMM与CRF的学习笔记,方便日后可回顾完此文即可在面试中回答诸如“简单介绍下CRF”,“HMM是如何训练的”等问题.

隐马尔可夫模型-HMM

模型定义

3个重点:图结构、变量的依赖性假设、参数化(基本符号与三要素)

HMM的图结构如下:

在这里插入图片描述HMM的假设

  • 齐次马尔可夫性假设:隐藏的马尔可夫链在任意时刻的状态只依赖于其前一时刻的状态,与其他时刻的状态和观测无关.

  • 观测独立性假设:任意时刻的观测仅依赖于该时刻的马尔可夫链的状态,与其他状态以及观测无关.

Y = ( y 1 , y 2 , . . . , y T ) Y=(y_1,y_2,...,y_T) 是长度为 T T 的状态序列, X = ( x 1 , x 2 , . . . , x T ) X=(x_1,x_2,...,x_T) 是对应的观测序列.

Q Q 为状态变量的所有取值的集合,即 y i Q = { q 1 , q 2 , . . . , q N } y_i \in Q=\{q_1,q_2,...,q_N\} N N 是状态的取值个数.

V V 为观测变量的所有取值的集合,即 x i V = { v 1 , v 2 , . . . , v M } x_i \in V=\{v_1,v_2,...,v_M\} M M 是观测的取值个数.

HMM的三要素 A , B , π A,B,\pi ,可记为三元组 λ = ( A , B , π ) \lambda=(A,B,\pi) .

1、矩阵 A N × N A_{N \times N} 为状态转移概率矩阵,其中的元素 a i j a_{ij} 表示在任意时刻 t t 从状态值 q i q_i 转移到状态值 q j q_j 的概率.

2、 π \pi 为初始状态 y 1 y_1 的分布, π i = P ( y 1 = q i ) , 1 i N \pi_i=P(y_1=q_i), \quad 1 \leq i \leq N

3、矩阵 B N × M B_{N \times M} 为输出观测概率矩阵,每一行是一个概率分布,其中 b i j = P ( x t = v j y t = q i ) , 1 i N , 1 j M b_{ij}=P(x_t=v_j|y_t=q_i),1 \leq i \leq N,1 \leq j \leq M ,表示在任意时刻 t t ,若状态值为 q i q_i ,则得到观测值 v j v_j 的概率.

注:
1、 A A π \pi 一起用于对状态变量 Y Y 构成的马尔可夫链进行建模(即上图中的 y t y_t 和向右的箭头);
2、 B B 用于对条件分布 b i ( x t ) = P ( x t y t = q i ) , 1 i N b_i(x_t) = P(x_t|y_t=q_i),1 \leq i \leq N 进行建模(即上图中的 x t , y t x_t,y_t 和向下的箭头).

训练方法

实际应用时常使用无监督的训练方法——Baum-Welch算法,这是EM算法在HMM模型中的具体应用.

1、前向概率和后向概率

(1)给定隐马尔可夫模型 λ \lambda ,定义到时刻 t t 部分观测序列为 ( x 1 , x 2 , . . . , x t ) (x_1,x_2,...,x_t) 在时刻 t t 的状态 y t = q i y_t=q_i 的概率为前向概率,记作:

α t ( i ) = P ( x 1 , x 2 , . . . x t , y t = q i λ ) (1) \alpha_t(i)=P(x_1, x_2, ...x_t,y_t=q_i | \lambda) \tag1

(2)给定隐马尔可夫模型 λ \lambda ,定义在时刻 t t 的状态 y t = q i y_t=q_i 条件下,从 t + 1 t+1 T T 的部分观测序列为 { x t + 1 , x t + 2 , . . . , x T } \{x_{t+1},x_{t+2},...,x_T\} 的概率为后向概率,记作:

β t ( i ) = P ( x t + 1 , x t + 2 , . . . , x T y t = q i , λ ) (2) \beta_t(i)=P(x_{t+1},x_{t+2},...,x_T | y_t=q_i , \lambda) \tag2

由上述定义可知:

P ( y t = q i , X λ ) = α t ( i ) β t ( i ) (3) P(y_t=q_i,X|\lambda)=\alpha_t(i)\beta_t(i) \tag3

并且:

P ( y t = q i , y t + 1 = q j , X λ ) = α t ( i ) a i j b j ( x t + 1 ) β t + 1 ( j ) (4) P(y_t=q_i,y_{t+1}=q_j,X|\lambda)=\alpha_t(i)a_{ij}b_j(x_{t+1})\beta_{t+1}(j) \tag4

注: a i j a_{ij} b j ( x t + 1 ) b_j(x_{t+1}) 的含义见《模型定义》一节

2、单个状态概率和两个状态概率

(1)给定模型 λ \lambda 和观测 X X ,在时刻 t t 处于状态 q i q_i 的概率记为:

γ t ( i ) = P ( y t = q i X , λ ) (5) \gamma_t(i)=P(y_t=q_i|X,\lambda) \tag5

代入式子 ( 3 ) (3) 有,

γ t ( i ) = P ( y t = q i , X λ ) P ( X λ ) = P ( y t = q i , X λ ) j = 1 N P ( y t = q j , X λ ) = α t ( i ) β t ( i ) j = 1 N α t ( j ) β t ( j ) (6) \gamma_t(i)=\frac{P(y_t=q_i,X|\lambda)}{P(X|\lambda)}=\frac{P(y_t=q_i,X|\lambda)}{\sum_{j=1}^{N}P(y_t=q_j,X|\lambda)}=\frac{\alpha_t(i)\beta_t(i)}{\sum_{j=1}^{N}\alpha_t(j)\beta_t(j)} \tag6

(2)给定模型 λ \lambda 和观测 X X ,在时刻 t t 处于状态 q i q_i 且在时刻 t + 1 t+1 处于状态 q j q_j 的概率记为:

ξ t ( i , j ) = P ( y t = q i , y t + 1 = q j X , λ ) (7) \xi_t(i,j)=P(y_t=q_i,y_{t+1}=q_j|X,\lambda) \tag7

带入式子 ( 4 ) (4) 有,

ξ t ( i , j ) = 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 λ ) = α 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 ) (8) \begin{aligned} \xi_t(i,j)&=\frac{P(y_t=q_i,y_{t+1}=q_j,X|\lambda)}{P(X|\lambda)}\\ &=\frac{P(y_t=q_i,y_{t+1}=q_j,X|\lambda)}{\sum_{i=1}^{N}\sum_{j=1}^{N}P(y_t=q_i,y_{t+1}=q_j,X|\lambda)} \\ &=\frac{\alpha_t(i)a_{ij}b_j(x_{t+1})\beta_{t+1}(j)}{\sum_{i=1}^{N}\sum_{j=1}^{N}\alpha_t(i)a_{ij}b_j(x_{t+1})\beta_{t+1}(j)} \tag8 \end{aligned}

3、Baum-Welch算法运行过程

输入:观测数据 X = ( x 1 , x 2 , . . . , x T ) X=(x_1,x_2,...,x_T)

输出:HMM参数 λ \lambda

(1)初始化

n = 0 n=0 ,选取 a i j ( 0 ) a_{ij}^{(0)} b j ( k ) ( 0 ) b_j(k)^{(0)} π i ( 0 ) \pi_i^{(0)} ,得到模型 λ ( 0 ) = ( A ( 0 ) , B ( 0 ) , π ( 0 ) ) \lambda^{(0)}=(A^{(0)},B^{(0)},\pi^{(0)}) .

(2)递推,对 n = 1 , 2 , . . . , n=1,2,...,

a i j n + 1 = t = 1 T 1 ξ t ( i , j ) t = 1 T 1 γ t ( i ) (9) a_{ij}^{n+1}=\frac{\sum_{t=1}^{T-1}\xi_t(i,j)}{\sum_{t=1}^{T-1}\gamma_t(i)} \tag9

b j ( k ) ( n + 1 ) = t = 1 , x t = v k T γ t ( j ) t = 1 T γ t ( j ) (10) b_j(k)^{(n+1)}=\frac{\sum_{t=1,x_t=v_k}^{T}\gamma_t(j)}{\sum_{t=1}^{T}\gamma_t(j)} \tag{10}

π i ( n + 1 ) = γ 1 ( i ) (11) \pi_i^{(n+1)}=\gamma_1(i)\tag{11}

式子 ( 9 ) , ( 10 ) , ( 11 ) (9),(10),(11) 的等号右端使用观测 X X 和第 n n 步的模型 λ ( n ) = ( A ( n ) , B ( n ) , π ( n ) ) \lambda^{(n)}=(A^{(n)},B^{(n)},\pi^{(n)}) 来计算

(3)终止,得到 λ ( 0 ) = ( A ( n + 1 ) , B ( n + 1 ) , π ( n + 1 ) ) \lambda^{(0)}=(A^{(n+1)},B^{(n+1)},\pi^{(n+1)}) .

预测方法

预测指的是给定模型 λ = ( A , B , π ) \lambda=(A,B,\pi) 和观测序列 X = ( x 1 , x 2 , . . . , x T ) X=(x_1,x_2,...,x_T) ,求最有可能的状态序列 Y = ( y 1 , y 2 , . . . , y T ) Y^*=(y_1^*,y_2^*,...,y_T^*) 使得条件概率 P ( Y X ) P(Y|X) 最大化.

一般情况下使用维特比算法来进行预测. 维特比算法中,将一个状态序列 ( y 1 , y 2 , . . . , y T ) (y_1,y_2,...,y_T) 称为一个路径部分路径指的是状态序列的子串,即其中的状态在时间上是连续的,如 ( y 1 , y 2 , y 3 ) (y_1,y_2,y_3) 是一个部分路径. 一个路径中的状态变量有不同取值,对应了不同的路径概率.

维特比算法使用动态规划来求解HMM的预测问题,即用动态规划求概率最大的路径(最优路径). 和 DP 解决很多问题的过程类似,维特比算法先找到最优子结构性质,并定义了一个数组用于递推,另一个数组用于记录辅助信息,经过初始化、递推后得到最优路径的概率,但最后还需要回溯才能得到具体的最优解.

HMM预测问题的最优子结构性质体现在,最优路径的部分路径也是最优的,否则,将一条更优的部分路径替换掉原来的部分路径,则能得到一条更优的解,这是矛盾的.

设观测序列长度为 T T ,则可以使用一个 T × N T \times N 的二维DP数组来解本问题。当然,可以将空间优化为一个长度为 T T 的一维数组. 下面用二维数组来解释。

假设第一个二维数组元素为 δ t , i \delta_{t, i} 1 t T , 1 i N 1\leq t \leq T, 1\leq i \leq N ,表示在时刻 t t 状态变量 y t = v i y_t=v_i 的所有部分路径 ( y 1 , y 2 , , y t 1 , y t = v i ) (y_1,y_2,\cdots,y_{t-1},y_t=v_i) 中的最优路径的概率,即:

δ t , i = max y 1 , y 2 , . . . , y t 1 P ( y t = v i , y t 1 , , y 1 , x t , , x 1 λ ) , i = 1 , 2 , , N (12) \delta_{t, i}=\max_{y_1,y_2,...,y_{t-1}}P(y_t=v_i,y_{t-1},\cdots,y_1,x_t,\cdots,x_1|\lambda),\quad i=1,2,\cdots,N \tag{12}

首先初始化第一行 δ 1 , i = π i b i ( x 1 ) \delta_{1,i}=\pi_ib_i(x_1)

然后由前面所述的最优子结构可得 δ t , i \delta_{t,i} 的递推式:

δ t + 1 , i = max y 1 , y 2 , , y t P ( y t + 1 = v i , y t , y t , , y 1 , x t + 1 , , x 1 λ ) = max 1 j N [ δ t , j a j i ] b i ( x t + 1 ) (13) \begin{aligned} \delta_{t+1,i}&=\max_{y_1,y_2,\cdots,y_t}P(y_{t+1}=v_i,y_t,y_t,\cdots,y_1,x_{t+1},\cdots,x_1|\lambda) \\ &=\max_{1\leq j \leq N}[\delta_{t, j} a_{ji}]b_i(x_{t+1}) \tag{13} \end{aligned}

意思是求下面一行的第 i i 个元素时,给矩阵的上面一行(子问题的最优解)乘以对应的转移概率 a j i a_{ji} 后取其中的最大值,最后乘以出现观测 x t + 1 x_{t+1} 的条件概率 P ( x t + 1 y t + 1 = v i ) = b i ( x t + 1 ) P(x_{t+1}|y_{t+1}=v_i)=b_i(x_{t+1}) .

为了便于回溯求解得到具体的路径,定义另一个 T × N T\times N 数组 ϕ \phi 用于保存一些有用的信息.

令:

ϕ t , i = arg max 1 j N [ δ t 1 , j a j i ] (14) \phi_{t, i}=\argmax_{1\leq j\leq N}[\delta_{t-1,j}a_{ji}] \tag{14}

ϕ t , i \phi_{t, i} 记录了在使用递推式 ( 13 ) (13) 时,是上一行的哪个 δ t 1 , j \delta_{t-1,j} 转移到 δ t , i \delta_{t, i} 的. 如下图所示, δ t , i \delta_{t, i} 是图中的二维矩阵, ϕ t , i \phi_{t, i} 记录的是转移信息. 这样在递推到最后一行求得最大概率对应 δ T , i \delta_{T,i} 后,根据保存下来的转移信息即可回溯得到最优路径(图中的红色箭头组成的路径).

在这里插入图片描述

维特比算法更具体的描述以及例子可以见李航《统计学习方法》第10.4节,注意书中的状态 i i 对应本文的状态 y y ,书中的观测 o o 对应本文的观测 x x 。个人认为书中用 i i 表示状态(随机变量)会很容易让人将其与公式中随处可见的下标 i i 混淆.

线性链条件随机场-linear chain CRF

模型定义

3个重点:图结构、变量的依赖性假设、参数化

线性链CRF(后文的CRF默认指线性链CRF)的图结构:

在这里插入图片描述

CRF的假设:

给定观测变量x的条件下,状态变量Y构成马尔可夫随机场. 在线性链CRF中,“给定x时,y满足马尔可夫性”可以表示为:
P ( y i x , y 1 , . . . , y i 1 , y i + 1 , . . . , y n ) = P ( y i x , y i 1 , y i + 1 ) , i = 1 , 2 , , n P(y_i | x, y_1, ..., y_{i-1},y_{i+1},...,y_n)=P(y_i | x, y_{i-1}, y_{i+1}),\quad i=1,2,\cdots,n

CRF对条件概率 P ( y x ) P(y|x) 进行建模,其参数化形式为:

P ( y x ) = 1 Z exp ( j i = 1 n 1 λ j t j ( y i + 1 , y i , x , i ) + k i = 1 n u k s k ( y i , x , i ) ) (15) P(y|x)=\frac1Z\exp\left( \sum_j \sum_{i=1}^{n-1} \lambda_jt_j(y_{i+1},y_i,x,i)+\sum_k \sum_{i=1}^{n}u_ks_k(y_i,x,i)\right) \tag{15}

其中 t j ( y i + 1 , y i , x , i ) t_j(y_{i+1},y_i,x,i) 是定义在两个相邻标记位置 i i i + 1 i+1 上的转移特征函数,用于刻画相邻标记变量 y i y_i y i + 1 y_{i+1} 之间的相关关系以及观测序列 x x 对它们的影响, s k ( y i , x , i ) s_k(y_i,x,i) 是定义在标记位置 i i 上的状态特征函数,用于刻画观测序列 x x 对标记变量 y i y_i 的影响.

CRF的简化形式:

在这里插入图片描述

其他内容可以参考 这篇博客,至少其符号用的比较清楚,不像李航的书比较乱,而且我感觉李航的书在CRF那节也有几个地方写错了.

训练方法

假设有数据集 X = { ( X 1 , Y 1 ) , ( X 2 , Y 2 ) , , ( X N , Y N ) } X=\{(X_1,Y_1),(X_2,Y_2),\cdots,(X_N,Y_N)\} ,使用极大似然估计来求CRF的参数 w w 。对于使用简化形式的CRF模型,训练数据的对数似然函数为:

L ( w ) = log i = 1 N P ( Y i X i ) = i = 1 N log P ( Y i X i ) = i = 1 N log ( 1 Z ( X i ) exp k = 1 K w k f k ( Y i , X i ) ) = i = 1 N k = 1 K w k f k ( Y i , X i ) i = 1 N log Z ( X i ) (16) \begin{aligned} L(w)&=\log \prod_{i=1}^NP(Y_i|X_i)\\ \tag{16} &=\sum_{i=1}^N \log P(Y_i|X_i) \\ &=\sum_{i=1}^N \log \left( \frac{1}{Z(X_i)} \exp \sum_{k=1}^{K}w_kf_k(Y_i,X_i) \right) \\ &=\sum_{i=1}^N\sum_{k=1}^{K}w_kf_k(Y_i,X_i)-\sum_{i=1}^N \log Z(X_i)\\ \end{aligned}

预测方法

同样使用维特比算法,细节见李航《统计学习方法》第11.5节,或参考 可以参考 这篇博客

但是注意,CRF中只需要求解最大非规范化概率对应的路径。理由见下(来自李航的书):

在这里插入图片描述

下面直接把预测问题当做动态规划问题来解释。

问题:假设所有可能的标签为 V = [ v 1 , v 2 , . . . , v N ] V=[v_1,v_2,...,v_N] ,其中 v 1 = < s t a r t > v_1=<start> v N = < e n d > v_N=<end> ,输入文本序列 x = [ x 1 , x 2 , . . . , x T ] x=[x_1,x_2,...,x_T] ,我们的目标是根据CRF模型来求解非规范化概率最大的标记序列 y = [ y 1 , y 2 , . . . , y T ] y=[y_1,y_2,...,y_T] , 另外,我们添加上 y 0 y_0 y T + 1 y_{T+1} ,分别对应 v 1 = < s t a r t > v_1=<start> v N = < e n d > v_N=<end>

另外,CRF模型由状态特征函数和转移特征函数来定义,这里我们用矩阵的形式表示这两个函数:

非规范化概率,即一个标记序列的“分数”,等于状态特征分数+转移特征分数。

设状态特征矩阵为 S S S i , j S_{i,j} 表示 y i = v j y_i=v_j 即第 i i 个标签为 v j v_j 的分数.

设转移特征矩阵为 T T T i , j T_{i,j} 表示 ( y t 1 = v i , y t = v j ) (y_{t-1}=v_i,y_{t}=v_j) 即前一个标签为 v i v_i 后一个标签为 v j v_j 的分数.

使用动态规划来求解最大分数,设 d p [ i ] [ j ] dp[i][j] 表示以 y i = v j y_i=v_j 结尾的子标签序列的最大分数,并设辅助保存信息的矩阵 H H H [ i ] [ j ] H[i][j] 记录的是 d p [ i ] [ j ] dp[i][j] 是由上一行的哪个状态转移而来的。

初始化:

对于 1 j N 1 \le j \le N d p [ 1 ] [ j ] = T 0 , j + S 1 , j dp[1][j]=T_{0,j} + S_{1,j}

递推:

对于 1 i T 1 \le i \le T d p [ i ] [ j ] = max 1 k N { d p [ i 1 ] [ k ] + T k , j + S i , j } dp[i][j]=\max_{1 \le k \le N}\{dp[i-1][k]+T_{k,j}+S_{i,j}\}

H [ i ] [ j ] = arg max 1 k N { d p [ i 1 ] [ k ] + T k , j + S i , j } H[i][j]=\argmax_{1 \le k \le N}\{dp[i-1][k]+T_{k,j}+S_{i,j}\}

计算完第 T T 行后,最优标签序列的分数为dp矩阵该行的最大值,即 max j { d p [ T , j ] } \max_j\{dp[T,j]\} ,其最后一个单词的标签在 V V 中的下标 i T = arg max j { d p [ T , j ] } i_T=\argmax_j\{dp[T,j]\}

回溯:

最优标签序列的每个标签都对应标签集 V V 的一个下标,求出对应的下标序列就是求出了标签序列。

i T i_T 的值和之前记录的 H H 矩阵来求解下标序列。

对于 t = T 1 , T 2 , . . . , 1 t =T-1,T-2,...,1

i t = H t + 1 , i t + 1 i_{t}=H_{t+1,i_{t+1}}

故可求得下标序列 [ i 1 , i 2 , . . . , i T ] [i_1,i_2,...,i_T] ,因此最优标签序列就是 y = [ v i 1 , v i 2 , . . . , v i T ] y^*=[v_{i_1},v_{i_2},...,v_{i_T}]

PS:用图来理解则类似前面 HMM 中的图。

发布了67 篇原创文章 · 获赞 27 · 访问量 7万+

猜你喜欢

转载自blog.csdn.net/xpy870663266/article/details/104728845
今日推荐