条件随机场-Conditional Random Field(CRF)

什么是条件随机场?

Random指的隐藏状态随机变量Y和观测状态随机变量X。
Conditional指条件概率,所以CRF是一个判别式模型 (discriminative model)。而生成式模型则计算联合概率分布。

关于生成模型和判别模型:
生成模型VS判别模型
机器学习面试之生成模型VS判别模型

前言

对于序列标注模型,输入一个文本序列,输出标注结果。在HMM和CRF模型中,输入的文本序列对应观测序列,标注结果对应隐藏状态,所以模型的目的是根据观测序列计算隐藏状态。

隐马尔科夫模型HMM (生成模型)

以词性标注任务为例,给定一个观测序列即输入文本X,计算输出词性序列Y
P ( Y ∣ X ) = P ( X ∣ Y ) ∗ P ( Y ) P ( X ) P ( X , Y ) = P ( X ∣ Y ) P ( Y ) = ∏ i = 1 n p ( x i ∣ Y ) ∗ P ( Y ) = ∏ i = 1 n p ( x i ∣ y i ) ∗ P ( Y ) = p ( y 1 ) ∗ p ( y 1 ∣ x 1 ) ∏ i = 2 n p ( x i ∣ y i ) ∗ p ( y i ∣ y i − 1 ) P(Y|X)=\frac{P(X|Y)*P(Y)}{P(X)}\\ P(X,Y)=P(X|Y)P(Y)\\ =\prod_{i=1}^{n}p(x_i|Y)*P(Y)\\ =\prod_{i=1}^{n}p(x_i|y_i)*P(Y)\\ =p(y_1)*p(y_1|x_1)\prod_{i=2}^{n}p(x_i|y_i)*p(y_i|y_{i-1}) P(YX)=P(X)P(XY)P(Y)P(X,Y)=P(XY)P(Y)=i=1np(xiY)P(Y)=i=1np(xiyi)P(Y)=p(y1)p(y1x1)i=2np(xiyi)p(yiyi1)
上述公式每一步对应一个假设

  • 由输入词间的条件独立性得到 ∏ i = 1 n p ( x i ∣ Y ) \prod_{i=1}^{n}p(x_i|Y) i=1np(xiY)
  • 当前观测结果只与当前隐层状态有关 ∏ i = 1 n p ( x i ∣ y i ) \prod_{i=1}^{n}p(x_i|y_i) i=1np(xiyi) p ( x i ∣ y i ) p(x_i|y_i) p(xiyi)为发射概率(emission probabilities )。
  • 马尔科夫假设,每一个隐层状态仅与上一个隐层状态有关 p ( y i ∣ y i − 1 ) p(y_i|y_{i-1}) p(yiyi1) p ( y i ∣ y i − 1 ) p(y_i|y_{i-1}) p(yiyi1)为转移概率(transition probabilities),例如介词后面跟一个名词,则转移概率高。

CRF

CRF使用feature function来更抽象的表达特征,使得它不再局限于HMM的两类特征。特征函数可以表示为 f ( x , i , y i , y i − 1 ) f(x, i, y_i, y_{i-1}) f(x,i,yi,yi1),其中X表示输入序列,i表示当前位置, y i y_i yi表示当前状态,在linear-chain CRF中 y i − 1 y_{i-1} yi1表示前一个状态。
我们赋予每个特征函数一个权重 λ j \lambda_j λj,给定一个输入序列,我们累加所有输入加权的特征值标注 y y y
s c o r e ( y ∣ x ) = ∑ j = 1 m ∑ i = 1 n λ j f j ( x , i , y i , y i − 1 ) score(y|x)=\sum_{j=1}^{m}\sum_{i=1}^{n}\lambda_jf_j(x,i,y_i,y_{i-1}) score(yx)=j=1mi=1nλjfj(x,i,yi,yi1)
最终可以得到一条输出 y y y的概率值(0~1)
p ( y ∣ x ) = e x p [ s c o r e ( y ∣ x ) ] ∑ y ′ e x p [ s c o r e ( y ′ ∣ x ) ] = e x p [ ∑ j = 1 m ∑ i = 1 n λ j f j ( x , i , y i , y i − 1 ) ] ∑ y ′ e x p [ ∑ j = 1 m ∑ i = 1 n λ j f j ( x , i , y ′ i , y ′ i − 1 ) ] p(y|x)=\frac{exp[score(y|x)]}{\sum_{y'}exp[score(y'|x)]}=\frac{exp[\sum_{j=1}^{m}\sum_{i=1}^{n}\lambda_jf_j(x,i,y_i,y_{i-1})]}{\sum_{y'}exp[\sum_{j=1}^{m}\sum_{i=1}^{n}\lambda_jf_j(x,i,{y'}_i,{y'}_{i-1})]} p(yx)=yexp[score(yx)]exp[score(yx)]=yexp[j=1mi=1nλjfj(x,i,yi,yi1)]exp[j=1mi=1nλjfj(x,i,yi,yi1)]

特征函数举例

我们以英文单词的词性建模,这里举例的特征函数不仅仅局限于线性链CRF:

  • 如果满足条件:当前英文单词以 ‘ly’ 结尾 && 特征函数标注 y i y_i yi为副词
    则记 f 1 ( x , i , y i , y i − 1 ) = 1    e l s e   0 f_1(x,i,y_i,y_{i-1})=1\ \ else \ 0 f1(x,i,yi,yi1)=1  else 0,则控制该特征函数的权重 λ 1 \lambda_1 λ1倾向一个大的正值,因为以 ‘ly’ 结尾通常为副词。
  • 如果满足条件:当前位置为1 && 输入的结尾是问好 && 特征函数标注 y i y_i yi为动词
    则记 f 2 ( x , i , y i , y i − 1 ) = 1   e l s e   0 f_2(x,i,y_i,y_{i-1})=1\ else\ 0 f2(x,i,yi,yi1)=1 else 0,则控制该特征函数的权重 λ 2 \lambda_2 λ2倾向一个大的正值。例如 “Is this a sentence beginning with a verb?”
  • 如果满足条件: y i − 1 y_{i-1} yi1为形容词 && y i y_i yi为名词
    则记 f 3 ( x , i , y i , y i − 1 ) = 1    e l s e   0 f_3(x,i,y_i,y_{i-1})=1\ \ else \ 0 f3(x,i,yi,yi1)=1  else 0,则控制该特征函数的权重 λ 3 \lambda_3 λ3倾向一个大的正值,因为形容词后面通常跟名词。
  • 如果满足条件: y i − 1 y_{i-1} yi1为介词 && y i y_i yi为介词
    则记 f 4 ( x , i , y i , y i − 1 ) = 1    e l s e   0 f_4(x,i,y_i,y_{i-1})=1\ \ else \ 0 f4(x,i,yi,yi1)=1  else 0,则控制该特征函数的权重 λ 4 \lambda_4 λ4为一个负值,因为介词通常后面不再跟介词。

假定输入为n,一条路径的score包含n个位置的多个特征函数的计算,要将每条路径输出一个概率,则需累加所有路径的exp[score],通过 e x p [ s c o r e ( y ) ] ∑ e x p [ s c o r e ( y ′ ) ] \frac{exp[score(y)]}{\sum exp[score(y')]} exp[score(y)]exp[score(y)]计算一个概率值(0~1)。

逻辑回归

CRF概率的形式 p ( l ∣ x ) = e x p [ ∑ j = 1 m ∑ i = 1 n λ j f j ( x , i , y i , y i − 1 ) ] ∑ y ′ e x p [ ∑ j = 1 m ∑ i = 1 n λ j f j ( x , i , y ′ i , y ′ i − 1 ) ] p(l|x)=\frac{exp[\sum_{j=1}^{m}\sum_{i=1}^{n}\lambda_jf_j(x,i,y_i,y_{i-1})]}{\sum_{y'}exp[\sum_{j=1}^{m}\sum_{i=1}^{n}\lambda_jf_j(x,i,{y'}_i,{y'}_{i-1})]} p(lx)=yexp[j=1mi=1nλjfj(x,i,yi,yi1)]exp[j=1mi=1nλjfj(x,i,yi,yi1)]看起来很像逻辑回归,CRF实际上是基础的逻辑回归的序列化版本,逻辑回归是一个log-linear的分类模型,CRF是一个log-linear的序列模型。

逻辑回归介绍

HMM

根据前面对HMM的介绍,HMM模型可以定义为 p ( y 1 ) ∗ ∏ i p ( x i ∣ y i ) ∗ p ( y i ∣ y i − 1 ) p(y_1)*\prod_{i}p(x_i|y_i)*p(y_i|y_{i-1}) p(y1)ip(xiyi)p(yiyi1)
将上式取log得 log ⁡ p ( y , x ) = log ⁡ p ( l 1 ) + ∑ i log ⁡ p ( y i ∣ y i − 1 ) + ∑ i log ⁡ p ( y i ∣ x i ) \log{p(y,x)}=\log{p(l_1)}+\sum_i\log{p(y_i|y_{i-1})}+\sum_i\log{p(y_i|x_i)} logp(y,x)=logp(l1)+ilogp(yiyi1)+ilogp(yixi),我们可以构建一个等效于HMM的CRF模型:

  • 对于转移概率 p ( y i = b ∣ y i − 1 = a ) p(y_i=b|y_{i-1}=a) p(yi=byi1=a),当 y i = b , y i − 1 = a y_i=b,y_{i-1}=a yi=b,yi1=a时我们定义一组CRF转移特征函数 f ( a , b ) ( x , i , y i , y i − 1 ) = 1 f_{(a,b)}(x,i,y_i,y_{i-1})=1 f(a,b)(x,i,yi,yi1)=1,赋予特征函数的权重 λ ( a , b ) = log ⁡ p ( y i = a ∣ y i − 1 = b ) \lambda_{(a,b)}=\log{p(y_i=a|y_{i-1}=b)} λ(a,b)=logp(yi=ayi1=b)
  • 对于发射概率 p ( x i = c ∣ y i = b ) p(x_i=c|y_i=b) p(xi=cyi=b),当 y i = b , x i = c y_i=b,x_i=c yi=b,xi=c时定义一组发射特征函数 g ( x , y ) ( x , i , y i , y i − 1 ) = 1 g_{(x,y)}(x,i,y_i,y_{i-1})=1 g(x,y)(x,i,yi,yi1)=1,赋予特征函数的权重 λ ( c , b ) = log ⁡ p ( x i = c ∣ y i = b ) \lambda_{(c,b)}=\log{p(x_i=c|y_i=b)} λ(c,b)=logp(xi=cyi=b)

这样,计算的score p ( y ∣ x ) p(y|x) p(yx)成比例关联于HMM的结果。
CRF优于HMM的原因是:

  • CRF可以构建更多丰富的特征,HMM只能构建二元转移和发射特征,CRF可以使用全局的特征,例如上述CRF特征函数举例2。
  • CRF特征函数的权重不受限制,HMM的概率需要满足一定的约束: 0 < = p ( x i ∣ y i ) < = 1 ,   ∑ x p ( x i = x ∣ y 1 ) = 1 0<=p(x_i|y_i)<=1,\ \sum_xp(x_i=x|y_1)=1 0<=p(xiyi)<=1, xp(xi=xy1)=1

学习CRF的参数

采用梯度下降学习CRF的特征函数的权重。首先,随机初始化CRF模型的权重,采用梯度更新算法更新权重。
对于每一个样本

  • 计算特征权重 λ i \lambda_i λi的梯度 ∂ ∂ w j log ⁡ p ( y ∣ x ) = ∑ j = 1 m f i ( x , j , y j , y j − 1 ) − ∑ y ′ ∑ j = 1 m f i ( x , j , y j ′ , y j − 1 ′ ) \frac{\partial}{\partial{w_j}}\log{p(y|x)}=\sum_{j=1}^mf_i(x,j,y_j,y_{j-1})-\sum_{y'}\sum_{j=1}^{m}f_i(x,j,y'_j,y'_{j-1}) wjlogp(yx)=j=1mfi(x,j,yj,yj1)yj=1mfi(x,j,yj,yj1)
  • 更新权重 λ i = λ i + α [ ∑ j = 1 m f i ( x , j , y j , y j − 1 ) − ∑ y ′ ∑ j = 1 m f i ( x , j , y j ′ , y j − 1 ′ ) ] \lambda_i=\lambda_i+\alpha[\sum_{j=1}^mf_i(x,j,y_j,y_{j-1})-\sum_{y'}\sum_{j=1}^{m}f_i(x,j,y'_j,y'_{j-1})] λi=λi+α[j=1mfi(x,j,yj,yj1)yj=1mfi(x,j,yj,yj1)]

CRF实现细节

CRF的计算难点在于分母归一化因子的计算(配分函数),这里推导一下计算的细节。
假定标签数为2,序列长度为3,计算归一化因子。在CRF模型中,只考虑了临近标签的联系,所有归一化因子包含的路径数应为 2 3 = 8 2^3=8 23=8条。我们按时刻t计算不同标签(记为k)的的归一化因子 Z t ( k ) Z_t^{(k)} Zt(k) Z t = Z t ( 1 ) + Z t ( 2 ) + . . . + Z t ( k ) Z_t=Z_t^{(1)}+Z_t^{(2)}+...+Z_t^{(k)} Zt=Zt(1)+Zt(2)+...+Zt(k) Z t ( k ) Z_t^{(k)} Zt(k)分别是截止到当前时刻 t t t、以标签 1 , 2 , . . . k 1,2,...k 1,2,...k为终点的所有路径的得分指数和。接下来,我们具体计算一下:
记编码模型(RNN、CNN)对位置 t t t标签k的打分为 h t ( k ) h_t^{(k)} ht(k),标签 i i i j j j的转移概率 g i j g_{ij} gij

位置1:

初始 Z t ( k ) Z_t^{(k)} Zt(k)采用模型编码分 h t k h_t^{k} htk

位置2

Z 2 ( 1 ) = log ⁡ ( e [ Z 1 ( 1 ) + g 11 ] + e [ Z 1 ( 2 ) + g 21 ] ) + h 2 ( 1 ) = log ⁡ ( e [ Z 1 ( 1 ) + g 11 + h 2 ( 1 ) ] + e [ Z 1 ( 2 ) + g 21 + h 2 ( 1 ) ] ) Z 2 ( 2 ) = log ⁡ ( e [ Z 1 ( 1 ) + g 12 ] + e [ Z 1 ( 2 ) + g 22 ] ) + h 2 ( 2 ) = log ⁡ ( e [ Z 1 ( 1 ) + g 12 + h 2 ( 2 ) ] + e [ Z 1 ( 2 ) + g 22 + h 2 ( 2 ) ] ) Z_2^{(1)}=\log{(e^{[Z_1^{(1)}+g_{11}]} + e^{[Z_1^{(2)}+g_{21}]})}+h_2^{(1)}=\log{(e^{[Z_1^{(1)}+g_{11}+h_2^{(1)}]} + e^{[Z_1^{(2)}+g_{21}+h_2^{(1)}]})}\\ Z_2^{(2)}=\log{(e^{[Z_1^{(1)}+g_{12}]} + e^{[Z_1^{(2)}+g_{22}]})}+h_2^{(2)}=\log{(e^{[Z_1^{(1)}+g_{12}+h_2^{(2)}]} + e^{[Z_1^{(2)}+g_{22}+h_2^{(2)}]})} Z2(1)=log(e[Z1(1)+g11]+e[Z1(2)+g21])+h2(1)=log(e[Z1(1)+g11+h2(1)]+e[Z1(2)+g21+h2(1)])Z2(2)=log(e[Z1(1)+g12]+e[Z1(2)+g22])+h2(2)=log(e[Z1(1)+g12+h2(2)]+e[Z1(2)+g22+h2(2)])

位置3

Z 3 ( 1 ) = log ⁡ ( e [ Z 2 ( 1 ) + g 11 + h 3 ( 1 ) ] + e [ Z 3 ( 2 ) + g 21 + h 3 ( 1 ) ] ) Z 3 ( 2 ) = log ⁡ ( e [ Z 2 ( 1 ) + g 12 + h 3 ( 2 ) ] + e [ Z 3 ( 2 ) + g 22 + h 3 ( 2 ) ] ) Z_3^{(1)}=\log{(e^{[Z_2^{(1)}+g_{11}+h_3^{(1)}]} + e^{[Z_3^{(2)}+g_{21}+h_3^{(1)}]})}\\ Z_3^{(2)}=\log{(e^{[Z_2^{(1)}+g_{12}+h_3^{(2)}]} + e^{[Z_3^{(2)}+g_{22}+h_3^{(2)}]})} Z3(1)=log(e[Z2(1)+g11+h3(1)]+e[Z3(2)+g21+h3(1)])Z3(2)=log(e[Z2(1)+g12+h3(2)]+e[Z3(2)+g22+h3(2)])
然后将 Z 2 ( 1 ) , Z 2 ( 2 ) Z_2^{(1)}, Z_2^{(2)} Z2(1),Z2(2)带入上式
Z 3 ( 1 ) = log ⁡ ( e [ Z 1 ( 1 ) + g 11 + h 2 ( 1 ) + g 11 + h 3 ( 1 ) ] + e [ Z 1 ( 2 ) + g 21 + h 2 ( 1 ) + g 11 + h 3 ( 1 ) ] ) + e [ Z 1 ( 1 ) + g 12 + h 2 ( 2 ) + g 21 + h 3 ( 1 ) ] ) + e [ Z 1 ( 2 ) + g 22 + h 2 ( 2 ) + g 21 + h 3 ( 1 ) ] ) Z_3^{(1)}=\log{(e^{[Z_1^{(1)}+g_{11}+h_2^{(1)}+g_{11}+h_3^{(1)}]} + e^{[Z_1^{(2)}+g_{21}+h_2^{(1)}+g_{11}+h_3^{(1)}]})+ e^{[Z_1^{(1)}+g_{12}+h_2^{(2)}+g_{21}+h_3^{(1)}]})} + e^{[Z_1^{(2)}+g_{22}+h_2^{(2)}+g_{21}+h_3^{(1)}]}) Z3(1)=log(e[Z1(1)+g11+h2(1)+g11+h3(1)]+e[Z1(2)+g21+h2(1)+g11+h3(1)])+e[Z1(1)+g12+h2(2)+g21+h3(1)])+e[Z1(2)+g22+h2(2)+g21+h3(1)])
同理可以计算 Z 3 ( 2 ) Z_3^{(2)} Z3(2),这里就不重复写了。

总结
  • 每一步实际通过 logsumexp \text{logsumexp} logsumexp 来累加到一个节点 Z t ( k ) Z_t^{(k)} Zt(k)的所有路径指数和。
  • 编码模型分 h t ( k ) h_t^{(k)} ht(k)也可以提前指数相加进来。

CRF实现分词

分享一个CNN+CRF实现的中文分词的例子:CNN+CRF实现分词,采用的Bakeoff 2005语料,包含keras和torch两种实现方式。

简明条件随机场CRF介绍(附带纯Keras实现)
Advanced NLP: Conditional Random Fields
CRF主体参考 Introduction to Conditional Random Fields
知乎点赞排前2的回答 如何用简单易懂的例子解释条件随机场(CRF)模型?它和HMM有什么区别?

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值