CRF

条件随机场(Conditional Random Fields)是给定一组输入序列条件下另一组输出序列的概率分布模型,在NLP中应用很广泛。

场景

假设我们有Bob一天从早到晚的一系列照片,Bob想考考我们,要我们猜这一系列的每张照片对应的活动,比如: 工作的照片,吃饭的照片,唱歌的照片等等。一个比较直观的办法就是,我们找到Bob之前的日常生活的一系列照片,然后找Bob问清楚这些照片代表的活动标记,这样我们就可以用监督学习的方法来训练一个分类模型,比如逻辑回归,接着用模型去预测这一天的每张照片最可能的活动标记。

这种办法虽然是可行的,但是却忽略了一个重要的问题,就是这些照片之间的顺序其实是有很大的时间顺序关系的,而用上面的方法则会忽略这种关系。比如我们现在看到了一张Bob闭着嘴的照片,那么这张照片我们怎么标记Bob的活动呢?比较难去打标记。但是如果我们有Bob在这一张照片前一点点时间的照片的话,那么这张照片就好标记了。如果在时间序列上前一张的照片里Bob在吃饭,那么这张闭嘴的照片很有可能是在吃饭咀嚼。而如果在时间序列上前一张的照片里Bob在唱歌,那么这张闭嘴的照片很有可能是在唱歌。

为了让我们的分类器表现的更好,在标记数据的时候,可以考虑相邻数据的标记信息。这一点,是普通的分类器难以做到的。而这一块,也是CRF比较擅长的地方。

在实际应用中,自然语言处理中的词性标注(POS Tagging)就是非常适合CRF使用的地方。词性标注的目标是给出一个句子中每个词的词性(名词,动词,形容词等)。而这些词的词性往往和上下文的词的词性有关,因此,使用CRF来处理是很适合的。

MRF

随机场是由若干个位置组成的整体,当给每一个位置中按照某种分布随机赋予一个值之后,其全体就叫做随机场。举个词性标注的例子:假如我们有一个十个词形成的句子需要做词性标注。这十个词每个词的词性可以在我们已知的词性集合(名词,动词…)中去选择。当我们为每个词选择完词性后,这就形成了一个随机场。

马尔可夫随机场是随机场的特例,它假设随机场中某一个位置的赋值仅与它相邻的位置的赋值有关。就拿上面的例子来说,我们假设所有词的词性只和它相邻的词的词性有关,这个随机场就特化成MRF。比如第三个词的词性除了与自己本身的位置有关外,只与第二个词和第四个词的词性相关。

CRF

CRF是MRF的特例,它假设MRF中只有 X X X Y Y Y 两种变量。 X X X 一般是给定的,而 Y Y Y 是在给定 X X X 的条件下的输出。这样MRF就特化成了CRF。在十个词的句子词性标注中, X X X 是词, Y Y Y 是词性。因此,如果我们假设它是一个MRF,那么它也是CRF。

我们用准确的数学语言来描述:

X X X Y Y Y 是随机变量, P ( Y ∣ X ) P(Y|X) P(YX) 是给定 X X X Y Y Y 的条件概率分布。若 Y Y Y 构成MRF,则称条件概率分布 P ( Y ∣ X ) P(Y|X) P(YX) 是CRF。

Linear CRF

X = ( X 1 , X 2 , … , X n ) , Y = ( Y 1 , Y 2 , … , Y n ) X = (X_1, X_2, \dots , X_n), Y = (Y_1, Y_2, \dots, Y_n) X=(X1,X2,,Xn),Y=(Y1,Y2,,Yn) 均为线性链的随机变量序列。在给定随机变量序列 X X X 的情况下,随机变量 Y Y Y 的条件概率分布 P ( Y ∣ X ) P(Y|X) P(YX) 满足马尔可夫性:
P ( Y i ∣ X , Y 1 , Y 2 , … , Y n ) = P ( Y i ∣ X , Y i − 1 , Y i + 1 ) P(Y_i | X, Y_1, Y_2, \dots , Y_n) = P(Y_i | X, Y_{i-1}, Y_{i+1}) P(YiX,Y1,Y2,,Yn)=P(YiX,Yi1,Yi+1)
则称 P ( Y ∣ X ) P(Y|X) P(YX) 为线性链条件随机场。

参数化形式

我们通过特征函数及其权重系数来将Linear CRF转化为机器学习模型。

特征函数分为两类,一类是定义在 Y Y Y 节点上的状态特征函数,这类特征函数只与当前节点有关,记为:
s l ( y i , x , i ) , l = 1 , 2 , … , L s_l(y_i, x, i), \quad l=1, 2, \dots, L sl(yi,x,i),l=1,2,,L
i i i 是当前节点在序列的位置, L L L 表示当前节点的状态特征函数的个数。

另一类是定义在 Y Y Y 上下文的转移特征函数,这类特征函数只和当前节点和上一个节点有关,记为:
t k ( y i − 1 , y i , x , i ) , k = 1 , 2 , … , K t_k(y_{i-1}, y_i, x, i), \quad k = 1, 2, \dots, K tk(yi1,yi,x,i),k=1,2,,K
i i i 是当前节点在序列的位置, K K K 表示当前节点的转移特征函数的个数。

无论是状态特征函数还是转移特征函数,它们的取值只能是0或1。即满足特征条件或不满足特征条件。同时,我们可以为每个特征函数赋予一个权值,用以表达我们对这个特征函数的信任度。假设 t k t_k tk 的权重系数是 λ k \lambda_k λk s l s_l sl 权重系数是 μ l \mu_l μl , 由此得到Linear CRF的参数化形式:
P ( y ∣ x ) = 1 Z ( x ) e ∑ i , k λ k t k ( y i − 1 , y i , x , i ) + ∑ i , l μ l s l ( y i , x , i ) P(y|x) = \frac {1} {Z(x)} e^{\sum_{i, k} \lambda_k t_k(y_{i-1}, y_i, x, i) + \sum_{i, l} \mu_l s_l (y_i, x, i)} P(yx)=Z(x)1ei,kλktk(yi1,yi,x,i)+i,lμlsl(yi,x,i)
其中, Z ( x ) Z(x) Z(x) 为规范化因子:
Z ( x ) = ∑ y e ∑ i , k λ k t k ( y i − 1 , y i , x , i ) + ∑ i , l μ l s l ( y i , x , i ) Z(x) = \sum_y e^{\sum_{i, k} \lambda_k t_k(y_{i-1}, y_i, x, i) + \sum_{i, l} \mu_l s_l (y_i, x, i)} Z(x)=yei,kλktk(yi1,yi,x,i)+i,lμlsl(yi,x,i)
每个特征函数定义了一个Linear CRF的规则,其系数定义了这个规则的可信度。两者一起构成了Linear CRF的条件概率分布。

实例

这里举一个词性标注的例子。假设输入的都是三个词的句子,即 X = ( X 1 , X 2 , X 3 ) X = (X_1, X_2, X_3) X=(X1,X2,X3),输出的词性标记为 Y = ( Y 1 , Y 2 , Y 3 ) Y = (Y_1, Y_2, Y_3) Y=(Y1,Y2,Y3),其中 Y ∈ { 1 ( 名 词 ) , 2 ( 动 词 ) } Y \in {\lbrace 1(名词), 2(动词) \rbrace} Y{1(),2()}。这里只标记出取值为1的特征函数:
t 1 = t 1 ( y i − 1 = 1 , y i = 2 , x , i ) , i = 2 , 3 , λ 1 = 1 t 2 = t 2 ( y 1 = 1 , y 2 = 1 , x , 2 ) , λ 2 = 0.5 t 3 = t 3 ( y 2 = 2 , y 3 = 1 , x , 3 ) , λ 3 = 1 t 4 = t 4 ( y 1 = 2 , y 2 = 1 , x , 2 ) , λ 4 = 1 t 5 = t 5 ( y 2 = 2 , y 3 = 2 , x , 3 ) , λ 5 = 0.2 s 1 = s 1 ( y 1 = 1 , x , 1 ) , μ 1 = 1 s 2 = s 2 ( y i = 2 , x , i ) , i = 1 , 2 , μ 2 = 0.5 s 3 = s 3 ( y i = 1 , x , i ) , i = 2 , 3 μ 3 = 0.8 s 4 = s 4 ( y 3 = 2 , x , 3 ) μ 4 = 0.5 t_1 = t_1(y_{i-1}=1, y_i=2, x, i), \quad i = 2, 3, \quad \lambda_1=1 \\ t_2 = t_2(y_1=1, y_2=1, x, 2), \quad \lambda_2 = 0.5 \\ t_3 = t_3(y_2=2, y_3=1, x, 3), \quad \lambda_3 = 1 \\ t_4 = t_4(y_1=2, y_2=1, x, 2), \quad \lambda_4 = 1 \\ t_5 = t_5(y_2=2, y_3=2, x, 3), \quad \lambda_5 = 0.2 \\ s_1 = s_1(y_1=1, x, 1), \quad \mu_1=1 \\ s_2 = s_2(y_i=2, x, i), \quad i=1, 2, \quad \mu_2 = 0.5 \\ s_3 = s_3(y_i=1, x, i), \quad i=2, 3 \quad \mu_3 = 0.8 \\ s_4 = s_4(y_3=2, x, 3) \quad \mu_4 = 0.5 t1=t1(yi1=1,yi=2,x,i),i=2,3,λ1=1t2=t2(y1=1,y2=1,x,2),λ2=0.5t3=t3(y2=2,y3=1,x,3),λ3=1t4=t4(y1=2,y2=1,x,2),λ4=1t5=t5(y2=2,y3=2,x,3),λ5=0.2s1=s1(y1=1,x,1),μ1=1s2=s2(yi=2,x,i),i=1,2,μ2=0.5s3=s3(yi=1,x,i),i=2,3μ3=0.8s4=s4(y3=2,x,3)μ4=0.5
求标记(1, 2, 2)的概率。

根据上述参数化公式我们有:
P ( y ∣ x ) ∝ e ∑ i , k λ k t k ( y i − 1 , y i , x , i ) + ∑ i , l μ l s l ( y i , x , i ) P(y|x) \propto e^{\sum_{i, k} \lambda_k t_k(y_{i-1}, y_i, x, i) + \sum_{i, l} \mu_l s_l (y_i, x, i)} P(yx)ei,kλktk(yi1,yi,x,i)+i,lμlsl(yi,x,i)
代入(1, 2, 2)得到:
P ( y 1 = 1 , y 2 = 2 , y 3 = 2 ∣ x ) ∝ e 3.2 P(y_1=1, y_2=2, y_3=2|x) \propto e^{3.2} P(y1=1,y2=2,y3=2x)e3.2

简化形式

我们用 s l s_l sl 表示状态特征函数,用 t k t_k tk 表示转移特征函数,同时也使用了不同的符号表示权重系数,导致表示起来非常麻烦。这里我们简化一下表示形式。

假设在某节点有 K 1 K_1 K1 个状态特征函数和 K 2 K_2 K2 个转移特征函数。我们用一个特征函数 f k ( y i − 1 , y i , x , i ) f_k(y_{i-1}, y_i, x, i) fk(yi1,yi,x,i) 来统一表示:
f k ( y i − 1 , y i , x , i ) = { t k ( y i − 1 , y i , x , i ) k = 1 , 2 , … , K 1 s l ( y i , x , i ) k = K 1 + l , l = 1 , 2 , … , K 2 f_k(y_{i-1}, y_i, x, i) = \begin{cases} t_k(y_{i-1}, y_i, x, i) \quad k=1, 2, \dots, K_1 \\ s_l(y_i, x, i) \quad k = K_1+l, \quad l=1, 2, \dots, K2 \end{cases} fk(yi1,yi,x,i)={tk(yi1,yi,x,i)k=1,2,,K1sl(yi,x,i)k=K1+l,l=1,2,,K2
同时我们也统一 f k ( y i − 1 , y i , x , i ) f_k(y_{i-1}, y_i, x, i) fk(yi1,yi,x,i) 对应的权重系数 w k w_k wk 如下:

w k = { λ k k = 1 , 2 , … , K 1 μ l k = K 1 + l , l = 1 , 2 , … , K 2 w_k = \begin{cases} \lambda_k \quad k = 1, 2, \dots, K_1 \\ \mu_l \quad k = K_1 + l, \quad l = 1, 2, \dots, K_2 \end{cases} wk={λkk=1,2,,K1μlk=K1+l,l=1,2,,K2
最终Linear CRF的参数化形式简化如下:
P w ( y ∣ x ) = e ∑ k = 1 K w k f k ( y i − 1 , y i , x , i ) ∑ y e ∑ k = 1 K w k f k ( y i − 1 , y i , x , i ) y 表 示 一 条 输 出 序 列 , 如 上 例 的 ( 1 , 2 , 2 ) P_w(y|x) = \frac {e^{\sum_{k=1}^K w_k f_k(y_{i-1}, y_i, x, i)}} {\sum_y e^{\sum_{k=1}^K w_k f_k(y_{i-1}, y_i, x, i)}} \quad y 表示一条输出序列,如上例的(1, 2, 2) Pw(yx)=yek=1Kwkfk(yi1,yi,x,i)ek=1Kwkfk(yi1,yi,x,i)y(1,2,2)


参考自:

  • https://www.cnblogs.com/pinard/p/7048333.html
  • https://www.zhihu.com/question/53458773/answer/554436625
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值