本文为阅读李航的《统计学习方法》和周志华的西瓜书后,对HMM与CRF的学习笔记,方便日后可回顾完此文即可在面试中回答诸如“简单介绍下CRF”,“HMM是如何训练的”等问题.
隐马尔可夫模型-HMM
模型定义
3个重点:图结构、变量的依赖性假设、参数化(基本符号与三要素)
HMM的图结构如下:
HMM的假设 :
设
Y
=
(
y
1
,
y
2
,
.
.
.
,
y
T
)
Y=(y_1,y_2,...,y_T)
Y = ( y 1 , y 2 , . . . , y T ) 是长度为
T
T
T 的状态序列,
X
=
(
x
1
,
x
2
,
.
.
.
,
x
T
)
X=(x_1,x_2,...,x_T)
X = ( x 1 , x 2 , . . . , x T ) 是对应的观测序列.
设
Q
Q
Q 为状态变量的所有取值的集合,即
y
i
∈
Q
=
{
q
1
,
q
2
,
.
.
.
,
q
N
}
y_i \in Q=\{q_1,q_2,...,q_N\}
y i ∈ Q = { q 1 , q 2 , . . . , q N } ,
N
N
N 是状态的取值个数.
设
V
V
V 为观测变量的所有取值的集合,即
x
i
∈
V
=
{
v
1
,
v
2
,
.
.
.
,
v
M
}
x_i \in V=\{v_1,v_2,...,v_M\}
x i ∈ V = { v 1 , v 2 , . . . , v M } ,
M
M
M 是观测的取值个数.
HMM的三要素
A
,
B
,
π
A,B,\pi
A , B , π ,可记为三元组
λ
=
(
A
,
B
,
π
)
\lambda=(A,B,\pi)
λ = ( A , B , π ) .
1、矩阵
A
N
×
N
A_{N \times N}
A N × N 为状态转移概率矩阵,其中的元素
a
i
j
a_{ij}
a i j 表示在任意时刻
t
t
t 从状态值
q
i
q_i
q i 转移到状态值
q
j
q_j
q j 的概率.
2、
π
\pi
π 为初始状态
y
1
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
π i = P ( y 1 = q i ) , 1 ≤ i ≤ N
3、矩阵
B
N
×
M
B_{N \times M}
B N × 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
b i j = P ( x t = v j ∣ y t = q i ) , 1 ≤ i ≤ N , 1 ≤ j ≤ M ,表示在任意时刻
t
t
t ,若状态值为
q
i
q_i
q i ,则得到观测值
v
j
v_j
v j 的概率.
注: 1、
A
A
A 与
π
\pi
π 一起用于对状态变量
Y
Y
Y 构成的马尔可夫链进行建模(即上图中的
y
t
y_t
y t 和向右的箭头); 2、
B
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
b i ( x t ) = P ( x t ∣ y t = q i ) , 1 ≤ i ≤ N 进行建模(即上图中的
x
t
,
y
t
x_t,y_t
x t , y t 和向下的箭头).
训练方法
实际应用时常使用无监督的训练方法——Baum-Welch算法,这是EM算法 在HMM模型中的具体应用.
1、前向概率和后向概率
(1)给定隐马尔可夫模型
λ
\lambda
λ ,定义到时刻
t
t
t 部分观测序列为
(
x
1
,
x
2
,
.
.
.
,
x
t
)
(x_1,x_2,...,x_t)
( x 1 , x 2 , . . . , x t ) 且 在时刻
t
t
t 的状态
y
t
=
q
i
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
α t ( i ) = P ( x 1 , x 2 , . . . x t , y t = q i ∣ λ ) ( 1 )
(2)给定隐马尔可夫模型
λ
\lambda
λ ,定义在时刻
t
t
t 的状态
y
t
=
q
i
y_t=q_i
y t = q i 的条件 下,从
t
+
1
t+1
t + 1 到
T
T
T 的部分观测序列为
{
x
t
+
1
,
x
t
+
2
,
.
.
.
,
x
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
β t ( i ) = P ( x t + 1 , x t + 2 , . . . , x T ∣ y t = q i , λ ) ( 2 )
由上述定义可知:
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 , X ∣ λ ) = α t ( i ) β t ( i ) ( 3 )
并且:
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
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 )
注:
a
i
j
a_{ij}
a i j 和
b
j
(
x
t
+
1
)
b_j(x_{t+1})
b j ( x t + 1 ) 的含义见《模型定义》一节
2、单个状态概率和两个状态概率
(1)给定模型
λ
\lambda
λ 和观测
X
X
X ,在时刻
t
t
t 处于状态
q
i
q_i
q i 的概率记为:
γ
t
(
i
)
=
P
(
y
t
=
q
i
∣
X
,
λ
)
(5)
\gamma_t(i)=P(y_t=q_i|X,\lambda) \tag5
γ t ( i ) = P ( y t = q i ∣ X , λ ) ( 5 )
代入式子
(
3
)
(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
γ t ( i ) = P ( X ∣ λ ) P ( y t = q i , X ∣ λ ) = ∑ j = 1 N P ( y t = q j , X ∣ λ ) P ( y t = q i , X ∣ λ ) = ∑ j = 1 N α t ( j ) β t ( j ) α t ( i ) β t ( i ) ( 6 )
(2)给定模型
λ
\lambda
λ 和观测
X
X
X ,在时刻
t
t
t 处于状态
q
i
q_i
q i 且在时刻
t
+
1
t+1
t + 1 处于状态
q
j
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
ξ t ( i , j ) = P ( y t = q i , y t + 1 = q j ∣ X , λ ) ( 7 )
带入式子
(
4
)
(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}
ξ t ( i , j ) = 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 ∣ λ ) P ( y t = q i , y t + 1 = q j , X ∣ λ ) = ∑ i = 1 N ∑ j = 1 N α t ( i ) a i j b j ( x t + 1 ) β t + 1 ( j ) α t ( i ) a i j b j ( x t + 1 ) β t + 1 ( j ) ( 8 )
3、Baum-Welch算法运行过程
输入:观测数据
X
=
(
x
1
,
x
2
,
.
.
.
,
x
T
)
X=(x_1,x_2,...,x_T)
X = ( x 1 , x 2 , . . . , x T )
输出:HMM参数
λ
\lambda
λ
(1)初始化
对
n
=
0
n=0
n = 0 ,选取
a
i
j
(
0
)
a_{ij}^{(0)}
a i j ( 0 ) ,
b
j
(
k
)
(
0
)
b_j(k)^{(0)}
b j ( k ) ( 0 ) ,
π
i
(
0
)
\pi_i^{(0)}
π i ( 0 ) ,得到模型
λ
(
0
)
=
(
A
(
0
)
,
B
(
0
)
,
π
(
0
)
)
\lambda^{(0)}=(A^{(0)},B^{(0)},\pi^{(0)})
λ ( 0 ) = ( A ( 0 ) , B ( 0 ) , π ( 0 ) ) .
(2)递推,对
n
=
1
,
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
a i j n + 1 = ∑ t = 1 T − 1 γ t ( i ) ∑ t = 1 T − 1 ξ t ( i , j ) ( 9 )
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}
b j ( k ) ( n + 1 ) = ∑ t = 1 T γ t ( j ) ∑ t = 1 , x t = v k T γ t ( j ) ( 1 0 )
π
i
(
n
+
1
)
=
γ
1
(
i
)
(11)
\pi_i^{(n+1)}=\gamma_1(i)\tag{11}
π i ( n + 1 ) = γ 1 ( i ) ( 1 1 )
式子
(
9
)
,
(
10
)
,
(
11
)
(9),(10),(11)
( 9 ) , ( 1 0 ) , ( 1 1 ) 的等号右端使用观测
X
X
X 和第
n
n
n 步的模型
λ
(
n
)
=
(
A
(
n
)
,
B
(
n
)
,
π
(
n
)
)
\lambda^{(n)}=(A^{(n)},B^{(n)},\pi^{(n)})
λ ( n ) = ( A ( n ) , B ( n ) , π ( n ) ) 来计算
(3)终止,得到
λ
(
0
)
=
(
A
(
n
+
1
)
,
B
(
n
+
1
)
,
π
(
n
+
1
)
)
\lambda^{(0)}=(A^{(n+1)},B^{(n+1)},\pi^{(n+1)})
λ ( 0 ) = ( A ( n + 1 ) , B ( n + 1 ) , π ( n + 1 ) ) .
预测方法
预测 指的是给定模型
λ
=
(
A
,
B
,
π
)
\lambda=(A,B,\pi)
λ = ( A , B , π ) 和观测序列
X
=
(
x
1
,
x
2
,
.
.
.
,
x
T
)
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^*)
Y ∗ = ( y 1 ∗ , y 2 ∗ , . . . , y T ∗ ) 使得条件概率
P
(
Y
∣
X
)
P(Y|X)
P ( Y ∣ X ) 最大化.
一般情况下使用维特比算法来进行预测. 维特比算法中,将一个状态序列
(
y
1
,
y
2
,
.
.
.
,
y
T
)
(y_1,y_2,...,y_T)
( y 1 , y 2 , . . . , y T ) 称为一个路径 ,部分路径 指的是状态序列的子串,即其中的状态在时间上是连续的,如
(
y
1
,
y
2
,
y
3
)
(y_1,y_2,y_3)
( y 1 , y 2 , y 3 ) 是一个部分路径. 一个路径中的状态变量有不同取值,对应了不同的路径概率.
维特比算法使用动态规划来求解HMM的预测问题,即用动态规划求概率最大 的路径(最优路径). 和 DP 解决很多问题的过程类似,维特比算法先找到最优子结构性质,并定义了一个数组用于递推,另一个数组用于记录辅助信息,经过初始化、递推后得到最优路径的概率 ,但最后还需要回溯才能得到具体的最优解 .
HMM预测问题的最优子结构性质 体现在,最优路径的部分路径也是最优的 ,否则,将一条更优的部分路径替换掉原来的部分路径,则能得到一条更优的解,这是矛盾的.
设观测序列长度为
T
T
T ,则可以使用一个
T
×
N
T \times N
T × N 的二维DP数组来解本问题。当然,可以将空间优化为一个长度为
T
T
T 的一维数组. 下面用二维数组来解释。
假设第一个二维数组元素为
δ
t
,
i
\delta_{t, i}
δ t , i ,
1
≤
t
≤
T
,
1
≤
i
≤
N
1\leq t \leq T, 1\leq i \leq N
1 ≤ t ≤ T , 1 ≤ i ≤ N ,表示在时刻
t
t
t 状态变量
y
t
=
v
i
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)
( y 1 , y 2 , ⋯ , 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}
δ t , i = y 1 , y 2 , . . . , y t − 1 max P ( y t = v i , y t − 1 , ⋯ , y 1 , x t , ⋯ , x 1 ∣ λ ) , i = 1 , 2 , ⋯ , N ( 1 2 )
首先初始化第一行
δ
1
,
i
=
π
i
b
i
(
x
1
)
\delta_{1,i}=\pi_ib_i(x_1)
δ 1 , i = π i b i ( x 1 )
然后由前面所述的最优子结构可得
δ
t
,
i
\delta_{t,i}
δ 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}
δ t + 1 , i = y 1 , y 2 , ⋯ , y t max P ( y t + 1 = v i , y t , y t , ⋯ , y 1 , x t + 1 , ⋯ , x 1 ∣ λ ) = 1 ≤ j ≤ N max [ δ t , j a j i ] b i ( x t + 1 ) ( 1 3 )
意思是求下面一行的第
i
i
i 个元素时,给矩阵的上面一行(子问题的最优解)乘以对应的转移概率
a
j
i
a_{ji}
a j i 后取其中的最大值,最后乘以出现观测
x
t
+
1
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})
P ( x t + 1 ∣ y t + 1 = v i ) = b i ( x t + 1 ) .
为了便于回溯求解得到具体的路径,定义另一个
T
×
N
T\times N
T × 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 = 1 ≤ j ≤ N a r g m a x [ δ t − 1 , j a j i ] ( 1 4 )
即
ϕ
t
,
i
\phi_{t, i}
ϕ t , i 记录了在使用递推式
(
13
)
(13)
( 1 3 ) 时,是上一行的哪个
δ
t
−
1
,
j
\delta_{t-1,j}
δ t − 1 , j 转移到
δ
t
,
i
\delta_{t, i}
δ t , i 的. 如下图所示,
δ
t
,
i
\delta_{t, i}
δ t , i 是图中的二维矩阵,
ϕ
t
,
i
\phi_{t, i}
ϕ t , i 记录的是转移信息. 这样在递推到最后一行求得最大概率对应
δ
T
,
i
\delta_{T,i}
δ T , i 后,根据保存下来的转移信息即可回溯得到最优路径(图中的红色箭头组成的路径).
维特比算法更具体的描述以及例子可以见李航《统计学习方法》第10.4节,注意书中的状态
i
i
i 对应本文的状态
y
y
y ,书中的观测
o
o
o 对应本文的观测
x
x
x 。个人认为书中用
i
i
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
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
CRF对条件概率
P
(
y
∣
x
)
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}
P ( y ∣ x ) = Z 1 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 ) ) ( 1 5 )
其中
t
j
(
y
i
+
1
,
y
i
,
x
,
i
)
t_j(y_{i+1},y_i,x,i)
t j ( y i + 1 , y i , x , i ) 是定义在两个相邻标记位置
i
i
i 和
i
+
1
i+1
i + 1 上的转移特征函数,用于刻画相邻标记变量
y
i
y_i
y i 和
y
i
+
1
y_{i+1}
y i + 1 之间的相关关系以及观测序列
x
x
x 对它们的影响,
s
k
(
y
i
,
x
,
i
)
s_k(y_i,x,i)
s k ( y i , x , i ) 是定义在标记位置
i
i
i 上的状态特征函数,用于刻画观测序列
x
x
x 对标记变量
y
i
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)\}
X = { ( X 1 , Y 1 ) , ( X 2 , Y 2 ) , ⋯ , ( X N , Y N ) } ,使用极大似然估计来求CRF的参数
w
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}
L ( w ) = log i = 1 ∏ N P ( Y i ∣ X i ) = i = 1 ∑ N log P ( Y i ∣ X i ) = i = 1 ∑ N log ( Z ( X i ) 1 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 ) ( 1 6 )
预测方法
同样使用维特比算法,细节见李航《统计学习方法》第11.5节,或参考 可以参考 这篇博客
但是注意,CRF中只需要求解最大非规范化概率对应的路径。理由见下(来自李航的书):
下面直接把预测问题当做动态规划问题来解释。
问题:假设所有可能的标签为
V
=
[
v
1
,
v
2
,
.
.
.
,
v
N
]
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 1 = < s t a r t > ,
v
N
=
<
e
n
d
>
v_N=<end>
v N = < e n d > ,输入文本序列
x
=
[
x
1
,
x
2
,
.
.
.
,
x
T
]
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 = [ y 1 , y 2 , . . . , y T ] , 另外,我们添加上
y
0
y_0
y 0 和
y
T
+
1
y_{T+1}
y T + 1 ,分别对应
v
1
=
<
s
t
a
r
t
>
v_1=<start>
v 1 = < s t a r t > ,
v
N
=
<
e
n
d
>
v_N=<end>
v N = < e n d >
另外,CRF模型由状态特征函数和转移特征函数来定义,这里我们用矩阵的形式表示这两个函数:
非规范化概率,即一个标记序列的“分数”,等于状态特征分数+转移特征分数。
设状态特征矩阵为
S
S
S ,
S
i
,
j
S_{i,j}
S i , j 表示
y
i
=
v
j
y_i=v_j
y i = v j 即第
i
i
i 个标签为
v
j
v_j
v j 的分数.
设转移特征矩阵为
T
T
T ,
T
i
,
j
T_{i,j}
T i , j 表示
(
y
t
−
1
=
v
i
,
y
t
=
v
j
)
(y_{t-1}=v_i,y_{t}=v_j)
( y t − 1 = v i , y t = v j ) 即前一个标签为
v
i
v_i
v i 后一个标签为
v
j
v_j
v j 的分数.
使用动态规划来求解最大分数,设
d
p
[
i
]
[
j
]
dp[i][j]
d p [ i ] [ j ] 表示以
y
i
=
v
j
y_i=v_j
y i = v j 结尾的子标签序列的最大分数,并设辅助保存信息的矩阵
H
H
H ,
H
[
i
]
[
j
]
H[i][j]
H [ i ] [ j ] 记录的是
d
p
[
i
]
[
j
]
dp[i][j]
d p [ i ] [ j ] 是由上一行的哪个状态转移而来的。
初始化:
对于
1
≤
j
≤
N
1 \le j \le N
1 ≤ j ≤ N ,
d
p
[
1
]
[
j
]
=
T
0
,
j
+
S
1
,
j
dp[1][j]=T_{0,j} + S_{1,j}
d p [ 1 ] [ j ] = T 0 , j + S 1 , j
递推:
对于
1
≤
i
≤
T
1 \le i \le T
1 ≤ i ≤ 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}\}
d p [ i ] [ j ] = 1 ≤ k ≤ N max { d p [ 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}\}
H [ i ] [ j ] = 1 ≤ k ≤ N a r g m a x { d p [ i − 1 ] [ k ] + T k , j + S i , j }
计算完第
T
T
T 行后,最优标签序列的分数为dp矩阵该行的最大值,即
max
j
{
d
p
[
T
,
j
]
}
\max_j\{dp[T,j]\}
max j { d p [ T , j ] } ,其最后一个单词的标签在
V
V
V 中的下标 为
i
T
=
arg max
j
{
d
p
[
T
,
j
]
}
i_T=\argmax_j\{dp[T,j]\}
i T = j a r g m a x { d p [ T , j ] }
回溯:
最优标签序列的每个标签都对应标签集
V
V
V 的一个下标,求出对应的下标序列就是求出了标签序列。
由
i
T
i_T
i T 的值和之前记录的
H
H
H 矩阵来求解下标序列。
对于
t
=
T
−
1
,
T
−
2
,
.
.
.
,
1
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 t = H t + 1 , i t + 1
故可求得下标序列
[
i
1
,
i
2
,
.
.
.
,
i
T
]
[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}]
y ∗ = [ v i 1 , v i 2 , . . . , v i T ]
PS:用图来理解则类似前面 HMM 中的图。