条件随机场(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(Y∣X) 是给定 X X X 时 Y Y Y 的条件概率分布。若 Y Y Y 构成MRF,则称条件概率分布 P ( Y ∣ X ) P(Y|X) P(Y∣X) 是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(Y∣X) 满足马尔可夫性:
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(Yi∣X,Y1,Y2,…,Yn)=P(Yi∣X,Yi−1,Yi+1)
则称
P
(
Y
∣
X
)
P(Y|X)
P(Y∣X) 为线性链条件随机场。
参数化形式
我们通过特征函数及其权重系数来将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(yi−1,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(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
)
=
∑
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)=y∑e∑i,kλktk(yi−1,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(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
λ
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(y∣x)∝e∑i,kλktk(yi−1,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=2∣x)∝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(yi−1,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(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
)
f_k(y_{i-1}, y_i, x, i)
fk(yi−1,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(y∣x)=∑ye∑k=1Kwkfk(yi−1,yi,x,i)e∑k=1Kwkfk(yi−1,yi,x,i)y表示一条输出序列,如上例的(1,2,2)
参考自:
- https://www.cnblogs.com/pinard/p/7048333.html
- https://www.zhihu.com/question/53458773/answer/554436625