CRF(条件随机场)

1适用场景

CRF是用于序列标注的模型,区别于其他算法对一个随机变量建模,CRF是对一组随机变量的联合概率分布进行建模。

2算法原理

CRF做了一下假设:

1假设联合概率分布是指数族分布
p ( y 1 , y 2 , . . . , y n ∣ X ) = 1 Z ( x ) e x p ( f ( y 1 , y 2 , . . . , y n ; X ) ) p(y_1,y_2,...,y_n|X)=\frac{1}{Z(x)}exp(f(y_1,y_2,...,y_n;X)) p(y1,y2,...,ynX)=Z(x)1exp(f(y1,y2,...,yn;X))
2成对/局部/全局马尔科夫假设

先给出一些概念定义

(1)如果联合概率分布 p ( Y ) p(Y) p(Y)满足成对/局部/全局马尔科夫性,则称该联合分布为概率无向图模型,或马尔科夫随机场。

(2)马尔科夫随机场的因子分解:概率无向图(马尔科夫随机场)的概率概率分布可表示为最大团上的随机变量函数乘积的形式(由Hammersley-Clifford定理保证)。

(3)在给定随机变量 X X X的情况下,随机变量 Y Y Y的马尔科夫随机场称为条件随机场。

一般常用的是用于序列标注的线性链条件随机场。每两个相邻节点构成极大团。根据线性链条件随机场的因子分解,可将联合概率分布表示为:
p ( y 1 , y 2 , . . . , y n ∣ x ) = 1 Z ( x ) e x p ( ∑ i = 1 n − 1 ( h ( y i ; x ) + g ( y i , y i + 1 ; x ) + h ( y n ; x ) ) p(y_1,y_2,...,y_n|x)=\frac{1}{Z(x)}exp(\sum_{i=1}^{n-1}(h(y_i;x)+g(y_i,y_{i+1};x)+h(y_n;x)) p(y1,y2,...,ynx)=Z(x)1exp(i=1n1(h(yi;x)+g(yi,yi+1;x)+h(yn;x))
一般将CRF用于神经网络中时,为简化在 g ( y i , y i + 1 ; x ) g(y_i,y_{i+1};x) g(yi,yi+1;x)中不考虑x的影响。即:
p ( y 1 , y 2 , . . . , y n ∣ x ) = 1 Z ( x ) e x p ( ∑ i = 1 n − 1 ( h ( y i ; x ) + g ( y i , y i + 1 ) + h ( y n ; x ) ) p(y_1,y_2,...,y_n|x)=\frac{1}{Z(x)}exp(\sum_{i=1}^{n-1}(h(y_i;x)+g(y_i,y_{i+1})+h(y_n;x)) p(y1,y2,...,ynx)=Z(x)1exp(i=1n1(h(yi;x)+g(yi,yi+1)+h(yn;x))
其中:

h ( y i ; x ) h(y_i;x) h(yi;x)发射得分由神经网络(多分类)给出,网络考虑X的上下文给出每一个时刻的标签。

g ( y i , y i + 1 ) g(y_i,y_{i+1}) g(yi,yi+1)转移得分由CRF给出,CRF考虑标签label的上下文。

3算法优化

用对数似然作为损失函数,然后可以使用梯度下降进行优化。
L L ( θ ) = − ∑ j = i N l o g p ( y 1 j , y 2 j , . . . , y n j ∣ x ) = − ∑ i = 1 N [ ∑ i = 1 n − 1 ( h ( y i j ; x ) + g ( y i j , y i + 1 j ) + h ( y n j ; x ) ) + l o g Z ( x ) ] LL(\theta)=-\sum_{j=i}^N\mathop{log}p(y_1^j,y_2^j,...,y_n^j|x)\\ =-\sum_{i=1}^N[\sum_{i=1}^{n-1}(h(y_i^j;x)+g(y_i^j,y_{i+1}^j)+h(y_n^j;x))+\mathop{logZ(x)}] LL(θ)=j=iNlogp(y1j,y2j,...,ynjx)=i=1N[i=1n1(h(yij;x)+g(yij,yi+1j)+h(ynj;x))+logZ(x)]
这个Loss函数的难点在于计算归一化因为Z(x)上。因为联合概率共有 K n K^n Kn种可能(K是y可能取值的个数,n是序列长度)。一般使用动态规划将其复杂度降为 n K 2 nK^2 nK2

3.1 归一化因子的计算

归一化因子Z(x)共有 K n K^n Kn可能,计算复杂,但是由于只考虑相邻节点的联系,所以可以递推的算出Z(x)。具体过程如下:

(1)计算 Z 0 Z_0 Z0递推出 Z 1 Z_1 Z1,然后一次递推出 Z 2 , Z 3 , . . . , Z n Z_2,Z_3,...,Z_n Z2,Z3,...,Zn

(2) Z 0 = Z 0 1 + Z 0 2 + Z 0 3 + . . . + Z 0 k Z_0=Z_0^1+Z_0^2+Z_0^3+...+Z_0^k Z0=Z01+Z02+Z03+...+Z0k Z i Z_i Zi每一个时刻是对其每一种可能取值计算后求和。

(3) Z i j Z_i^j Zij的计算。

根据对CRF的定义。已知 Z t Z_t Zt,具有以下递推关系
Z t + 1 1 = ( Z t 0 G 11 + Z t 1 G 21 + . . . + Z t k G k 1 ) H t + 1 ( 1 ∣ x ) Z t + 1 2 = ( Z t 0 G 12 + Z t 1 G 22 + . . . + Z t k G k 2 ) H t + 1 ( 2 ∣ x ) . . . Z t + 1 k = ( Z t 0 G 1 k + Z t 1 G 2 k + . . . + Z t k G k k ) H t + 1 ( k ∣ x ) Z_{t+1}^1=(Z_t^0G_{11}+Z_t^1G_{21}+...+Z_t^kG_{k1})H_{t+1}(1|x)\\ Z_{t+1}^2=(Z_t^0G_{12}+Z_t^1G_{22}+...+Z_t^kG_{k2})H_{t+1}(2|x)\\ ...\\ Z_{t+1}^k=(Z_t^0G_{1k}+Z_t^1G_{2k}+...+Z_t^kG_{kk})H_{t+1}(k|x) Zt+11=(Zt0G11+Zt1G21+...+ZtkGk1)Ht+1(1x)Zt+12=(Zt0G12+Zt1G22+...+ZtkGk2)Ht+1(2x)...Zt+1k=(Zt0G1k+Zt1G2k+...+ZtkGkk)Ht+1(kx)
G G G是kxk的状态转移矩阵, G i j G_{ij} Gij代表从状态i转移到状态j的得分(注意区别于hmm不是概率)。 Z t = [ Z t 1 , Z t 2 , Z t 3 , . . . , Z t k ] Z_t=[Z_t^1,Z_t^2,Z_t^3,...,Z_t^k] Zt=[Zt1,Zt2,Zt3,...,Ztk]代表在递推过程中t时刻计算的结果(行向量)。 H t + 1 = [ H t + 1 ( 1 ∣ x ) , H t + 1 ( 1 ∣ x ) , . . . , H t + 1 ( 1 ∣ x ) ] H_{t+1}=[H_{t+1}(1|x),H_{t+1}(1|x),...,H_{t+1}(1|x)] Ht+1=[Ht+1(1x),Ht+1(1x),...,Ht+1(1x)]代表t+1时刻各状态可能取值的得分(行向量)。那么以上的递推关系可以用矩阵形式表示
Z t + 1 = Z t G ⊗ H t + 1 ( y ∣ x ) Z_{t+1}=Z_tG{\otimes}H_{t+1}(y|x) Zt+1=ZtGHt+1(yx)
按以上递推关系依次计算 Z 1 , Z 2 , . . . , Z n Z_1,Z_2,...,Z_n Z1,Z2,...,Zn,然后对最后的 Z n Z_n Zn各分量求和即得到最终的结果

3.2类比softmax多分类

4其他

模型预测:使用维特比算法。

你可能感兴趣的:(机器学习)