条件随机场(Conditional Random Fields)是给定一组输入序列条件下另一组输出序列的概率分布模型,在NLP中应用很广泛。
场景
假设我们有Bob一天从早到晚的一系列照片,Bob想考考我们,要我们猜这一系列的每张照片对应的活动,比如: 工作的照片,吃饭的照片,唱歌的照片等等。一个比较直观的办法就是,我们找到Bob之前的日常生活的一系列照片,然后找Bob问清楚这些照片代表的活动标记,这样我们就可以用监督学习的方法来训练一个分类模型,比如逻辑回归,接着用模型去预测这一天的每张照片最可能的活动标记。
这种办法虽然是可行的,但是却忽略了一个重要的问题,就是这些照片之间的顺序其实是有很大的时间顺序关系的,而用上面的方法则会忽略这种关系。比如我们现在看到了一张Bob闭着嘴的照片,那么这张照片我们怎么标记Bob的活动呢?比较难去打标记。但是如果我们有Bob在这一张照片前一点点时间的照片的话,那么这张照片就好标记了。如果在时间序列上前一张的照片里Bob在吃饭,那么这张闭嘴的照片很有可能是在吃饭咀嚼。而如果在时间序列上前一张的照片里Bob在唱歌,那么这张闭嘴的照片很有可能是在唱歌。
为了让我们的分类器表现的更好,在标记数据的时候,可以考虑相邻数据的标记信息。这一点,是普通的分类器难以做到的。而这一块,也是CRF比较擅长的地方。
在实际应用中,自然语言处理中的词性标注(POS Tagging)就是非常适合CRF使用的地方。词性标注的目标是给出一个句子中每个词的词性(名词,动词,形容词等)。而这些词的词性往往和上下文的词的词性有关,因此,使用CRF来处理是很适合的。
MRF
随机场是由若干个位置组成的整体,当给每一个位置中按照某种分布随机赋予一个值之后,其全体就叫做随机场。举个词性标注的例子:假如我们有一个十个词形成的句子需要做词性标注。这十个词每个词的词性可以在我们已知的词性集合(名词,动词…)中去选择。当我们为每个词选择完词性后,这就形成了一个随机场。
马尔可夫随机场是随机场的特例,它假设随机场中某一个位置的赋值仅与它相邻的位置的赋值有关。就拿上面的例子来说,我们假设所有词的词性只和它相邻的词的词性有关,这个随机场就特化成MRF。比如第三个词的词性除了与自己本身的位置有关外,只与第二个词和第四个词的词性相关。
CRF
CRF是MRF的特例,它假设MRF中只有 XXX 和 YYY 两种变量。XXX 一般是给定的,而 YYY 是在给定 XXX 的条件下的输出。这样MRF就特化成了CRF。在十个词的句子词性标注中,XXX 是词,YYY 是词性。因此,如果我们假设它是一个MRF,那么它也是CRF。
我们用准确的数学语言来描述:
设 XXX 和 YYY 是随机变量,P(Y∣X)P(Y|X)P(Y∣X) 是给定 XXX 时 YYY 的条件概率分布。若 YYY 构成MRF,则称条件概率分布 P(Y∣X)P(Y|X)P(Y∣X) 是CRF。
Linear CRF
设 X=(X1,X2,…,Xn),Y=(Y1,Y2,…,Yn)X = (X_1, X_2, \dots , X_n), Y = (Y_1, Y_2, \dots, Y_n)X=(X1,X2,…,Xn),Y=(Y1,Y2,…,Yn) 均为线性链的随机变量序列。在给定随机变量序列 XXX 的情况下,随机变量 YYY 的条件概率分布 P(Y∣X)P(Y|X)P(Y∣X) 满足马尔可夫性:
P(Yi∣X,Y1,Y2,…,Yn)=P(Yi∣X,Yi−1,Yi+1)
P(Y_i | X, Y_1, Y_2, \dots , Y_n) = P(Y_i | X, Y_{i-1}, Y_{i+1})
P(Yi∣X,Y1,Y2,…,Yn)=P(Yi∣X,Yi−1,Yi+1)
则称 P(Y∣X)P(Y|X)P(Y∣X) 为线性链条件随机场。
参数化形式
我们通过特征函数及其权重系数来将Linear CRF转化为机器学习模型。
特征函数分为两类,一类是定义在 YYY 节点上的状态特征函数,这类特征函数只与当前节点有关,记为:
sl(yi,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
iii 是当前节点在序列的位置,LLL 表示当前节点的状态特征函数的个数。
另一类是定义在 YYY 上下文的转移特征函数,这类特征函数只和当前节点和上一个节点有关,记为:
tk(yi−1,yi,x,i),k=1,2,…,K
t_k(y_{i-1}, y_i, x, i), \quad k = 1, 2, \dots, K
tk(yi−1,yi,x,i),k=1,2,…,K
iii 是当前节点在序列的位置,KKK 表示当前节点的转移特征函数的个数。
无论是状态特征函数还是转移特征函数,它们的取值只能是0或1。即满足特征条件或不满足特征条件。同时,我们可以为每个特征函数赋予一个权值,用以表达我们对这个特征函数的信任度。假设 tkt_ktk 的权重系数是 λk\lambda_kλk ,sls_lsl 权重系数是 μl\mu_lμl , 由此得到Linear CRF的参数化形式:
P(y∣x)=1Z(x)e∑i,kλktk(yi−1,yi,x,i)+∑i,lμlsl(yi,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(y∣x)=Z(x)1e∑i,kλktk(yi−1,yi,x,i)+∑i,lμlsl(yi,x,i)
其中,Z(x)Z(x)Z(x) 为规范化因子:
Z(x)=∑ye∑i,kλktk(yi−1,yi,x,i)+∑i,lμlsl(yi,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)=y∑e∑i,kλktk(yi−1,yi,x,i)+∑i,lμlsl(yi,x,i)
每个特征函数定义了一个Linear CRF的规则,其系数定义了这个规则的可信度。两者一起构成了Linear CRF的条件概率分布。
实例
这里举一个词性标注的例子。假设输入的都是三个词的句子,即 X=(X1,X2,X3)X = (X_1, X_2, X_3)X=(X1,X2,X3),输出的词性标记为 Y=(Y1,Y2,Y3)Y = (Y_1, Y_2, Y_3)Y=(Y1,Y2,Y3),其中 Y∈{1(名词),2(动词)}Y \in {\lbrace 1(名词), 2(动词) \rbrace}Y∈{1(名词),2(动词)}。这里只标记出取值为1的特征函数:
t1=t1(yi−1=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
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(yi−1=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λktk(yi−1,yi,x,i)+∑i,lμlsl(yi,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(y∣x)∝e∑i,kλktk(yi−1,yi,x,i)+∑i,lμlsl(yi,x,i)
代入(1, 2, 2)得到:
P(y1=1,y2=2,y3=2∣x)∝e3.2
P(y_1=1, y_2=2, y_3=2|x) \propto e^{3.2}
P(y1=1,y2=2,y3=2∣x)∝e3.2
简化形式
我们用 sls_lsl 表示状态特征函数,用 tkt_ktk 表示转移特征函数,同时也使用了不同的符号表示权重系数,导致表示起来非常麻烦。这里我们简化一下表示形式。
假设在某节点有 K1K_1K1 个状态特征函数和 K2K_2K2 个转移特征函数。我们用一个特征函数 fk(yi−1,yi,x,i)f_k(y_{i-1}, y_i, x, i)fk(yi−1,yi,x,i) 来统一表示:
fk(yi−1,yi,x,i)={tk(yi−1,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) = \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(yi−1,yi,x,i)={tk(yi−1,yi,x,i)k=1,2,…,K1sl(yi,x,i)k=K1+l,l=1,2,…,K2
同时我们也统一 fk(yi−1,yi,x,i)f_k(y_{i-1}, y_i, x, i)fk(yi−1,yi,x,i) 对应的权重系数 wkw_kwk 如下:
wk={λkk=1,2,…,K1μlk=K1+l,l=1,2,…,K2
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的参数化形式简化如下:
Pw(y∣x)=e∑k=1Kwkfk(yi−1,yi,x,i)∑ye∑k=1Kwkfk(yi−1,yi,x,i)
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)}}
Pw(y∣x)=∑ye∑k=1Kwkfk(yi−1,yi,x,i)e∑k=1Kwkfk(yi−1,yi,x,i)
其中,yyy 表示一条输出序列,如上例的(1, 2, 2)
参考自:
- https://www.cnblogs.com/pinard/p/7048333.html
- https://www.zhihu.com/question/53458773/answer/554436625
本文介绍了条件随机场(CRF),它是给定输入序列条件下输出序列的概率分布模型,在NLP中应用广泛。还阐述了随机场、马尔可夫随机场(MRF)与CRF的关系,以及线性链条件随机场(Linear CRF)的参数化形式、实例和简化形式,以词性标注为例进行说明。
2418

被折叠的 条评论
为什么被折叠?



