条件随机场(Conditional Random Fields),是在给定一组输入随机变量条件下另外一组输出随机变量的条件概率分布模型,它是一种判别式的概率无向图模型,既然是判别式,拿就是对条件概率分布建模;
之前也在BiLSTM-CRF中聊过,判别式模型就是给定x计算y,生成式模型就是计算联合分布的参数;
设有线性链结构的随机变量序列 X = ( X 1 , X 2 , . . . , X n ) , Y = ( Y 1 , Y 2 , . . . , Y N ) X=(X_1,X_2,...,X_n),Y=(Y_1,Y_2,...,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(Yi|X,Y1,Y2...Yn)=P(Yi|X,Yi−1,Yi+1) P(Yi∣X,Y1,Y2...Yn)=P(Yi∣X,Yi−1,Yi+1)
这时 P ( Y ∣ X ) P(Y|X) P(Y∣X) 则为线性链条件随机场
条件随机场(ConditionalRandom Field,CRF)是经典 NER 的主流模型。
假设你有许多小明同学一天内不同时段的照片,从小明提裤子起床到脱裤子睡觉各个时间段都有(小明是照片控!)。现在的任务是对这些照片进行分类。比如有的照片是吃饭,那就给它打上吃饭的标签;有的照片是跑步时拍的,那就打上跑步的标签;有的照片是开会时拍的,那就打上开会的标签。问题来了,你准备怎么干?
一个简单直观的办法就是,不管这些照片之间的时间顺序,想办法训练出一个多元分类器。就是用一些打好标签的照片作为训练数据,训练出一个模型,直接根据照片的特征来分类。例如,如果照片是早上 6:00 拍的,且画面是黑暗的,那就给它打上睡觉的标签;如果照片上有车,那就给它打上开车的标签。这样可行吗?
乍一看可以!但实际上,由于我们忽略了这些照片之间的时间顺序这一重要信息,我们的分类器会有缺陷的。举个例子,假如有一张小明闭着嘴的照片,怎么分类?显然难以直接判断,需要参考闭嘴之前的照片,如果之前的照片显示小明在吃饭,那这个闭嘴的照片很可能是小明在咀嚼食物准备下咽,可以给它打上吃饭的标签;如果之前的照片显示小明在唱歌,那这个闭嘴的照片很可能是小明唱歌瞬间的抓拍,可以给它打上唱歌的标签。所以,为了让我们的分类器能够有更好的表现,在为一张照片分类时,我们必须将与它相邻的照片的标签信息考虑进来。这——就是条件随机场(CRF)大显身手的地方!
我们正式地定义一下什么是 CRF 中的特征函数,所谓特征函数,就是这样的函数,它接受四个参数:
注意
: 这里,我们的特征函数仅仅依靠当前单词的标签和它前面的单词的标签对标注序列进行评判,这样建立的 CRF 也叫作线性链 CRF,这是 CRF 中的一种简单情况。为简单起见,本文中我们仅考虑线性链 CRF
最终算法的预测值 y i ^ \hat{y_i} yi^受很多个特征函数的影响,写为数学表达式
P ( y ∣ x ) = P R e a l P a t h T o t a l P a t h = e S i Z ( x ) = 1 Z ( x ) exp ( ∑ i , k λ k ⋅ t k ( y i , y i − 1 , x , i ) + ∑ i , l μ k ⋅ e l ( y i , x , i ) ) \begin{aligned} P(y|x) &= \frac{P_{RealPath}}{TotalPath} = \frac{e^{S_i}}{Z(x)} \\ &= \frac{1}{Z(x)}\exp(\sum_{i,k} \lambda_k \cdot t_k (y_i,y_{i-1},x,i) + \sum_{i,l} \mu_k \cdot e_l (y_i,x,i)) \end{aligned} P(y∣x)=TotalPathPRealPath=Z(x)eSi=Z(x)1exp(i,k∑λk⋅tk(yi,yi−1,x,i)+i,l∑μk⋅el(yi,x,i))
其中 x x x与 s s s表达意思一致, λ k \lambda_k λk为transition scores矩阵的一个元素, t k t_k tk为特征函数,特征函数个数与 λ k \lambda_k λk都是 l a b e l 2 label^2 label2个; 既然前面是transition scores的一个表达,那么后面自然是Emission scores的表达, e l e_l el也理解为特征函数;exp中的是某一条路径中的表达式; Z ( x ) Z(x) Z(x)则是所有路径的加和…
f 1 ( s , i , l i , l i − 1 ) = 1 f_1(s,i,l_i,l_{i-1}) = 1 f1(s,i,li,li−1)=1
当 l i l_i li 是“副词”并且第 i i i 个单词以“ly”结尾时,我们就让 f 1 = 1 f_1 = 1 f1=1,其他情况 f1 为 0。不难想到, f 1 f_1 f1 特征函数的权重 λ 1 \lambda_1 λ1 应当是正的。而且 λ 1 \lambda_1 λ1 越大,表示我们越倾向于采用那些把以“ly”结尾的单词标注为“副词”的标注序列;
f 2 ( s , i , l i , l i − 1 ) = 1 f_2(s,i,l_i,l_{i-1}) = 1 f2(s,i,li,li−1)=1
如果 i = 1 i=1 i=1, l i = 动 词 l_i=动词 li=动词,并且句子 s s s 是以“?”结尾时, f 2 = 1 f_2=1 f2=1,其他情况 f 2 = 0 f_2=0 f2=0。同样, λ 2 \lambda_2 λ2 应当是正的,并且 λ 2 \lambda_2 λ2 越大,表示我们越倾向于采用那些把问句的第一个单词标注为“动词”的标注序列;
f 3 ( s , i , l i , l i − 1 ) = 1 f_3(s,i,l_i,l_{i-1}) = 1 f3(s,i,li,li−1)=1
当 l i − 1 l_{i-1} li−1 是介词, l i l_i li 是名词时, f 3 = 1 f_3 = 1 f3=1,其他情况 f 3 = 0 f_3=0 f3=0。 λ 3 \lambda_3 λ3 也应当是正的,并且 λ 3 \lambda_3 λ3 越大,说明我们越认为介词后面应当跟一个名词;
f 3 ( s , i , l i , l i − 1 ) = 1 f_3(s,i,l_i,l_{i-1}) = 1 f3(s,i,li,li−1)=1
如果 l i l_i li 和 l i − 1 l_{i-1} li−1 都是介词,那么 f 4 f_4 f4 等于 1,其他情况 f 4 = 0 f_4=0 f4=0。这里,我们应当可以想到 λ 4 \lambda_4 λ4 是负的,并且 λ 4 \lambda_4 λ4 的绝对值越大,表示我们越不认可介词后面还是介词的标注序列;
CRF的概率形式与softmax很像,softmax又是逻辑回归的推广
p ( l ∣ s ) = exp [ ∑ j = 1 m ∑ i = 1 n f j ( l i , l i − 1 , s , i ) ] ∑ exp [ ∑ j = 1 m ∑ i = 1 n f j ( l i , l i − 1 , s , i ) ] p(l|s) = \frac{\exp{[\sum_{j=1}^m \sum_{i=1}^n f_j (l_i,l_{i-1},s,i)}]}{\sum \exp{[\sum_{j=1}^m \sum_{i=1}^n f_j (l_i,l_{i-1},s,i)]}} p(l∣s)=∑exp[∑j=1m∑i=1nfj(li,li−1,s,i)]exp[∑j=1m∑i=1nfj(li,li−1,s,i)]
那是因为 CRF 确实基本上是逻辑回归的序列版本,鉴于逻辑回归是一个对数线性模型用于分类,CRF 是一个对数线性模型用于序列打标签
HMM 采用生成式方法去打标签,数学表达为
p ( l , s ) = p ( l 1 ) ∏ i p ( l i ∣ l i − 1 ) p ( w i ∣ l i ) p(l,s) = p(l_1)\prod_i p(l_i|l_{i-1})p(w_i|l_i) p(l,s)=p(l1)i∏p(li∣li−1)p(wi∣li)
CRF 更强大,它可以做 HMM 可以完成的一切,并且还能做 HMM 不能做的, 我们将HMM的表达式往CRF上靠
log p ( l , s ) = log p ( l 1 ) + ∑ i log p ( l i ∣ l i − 1 ) + ∑ i log p ( w i ∣ l i ) \log p(l,s) = \log p(l_1) + \sum_i\log p(l_i|l_{i-1}) + \sum_i\log p(w_i|l_i) logp(l,s)=logp(l1)+i∑logp(li∣li−1)+i∑logp(wi∣li)
如果我们考虑这些对数概率为相对应的二元的转化和发射指标特征的权重。即,我们可以构建一个 CRF 等同于任意 HMM, 对于每个HMM的转移概率 log p ( l i = y ∣ l i − 1 = x ) \log p(l_i=y|l_{i-1}=x) logp(li=y∣li−1=x),可以理解为只有两个输入的特征函数,每个特征函数的权重为 w x , y = log p ( l i = y ∣ l i − 1 = x ) w_{x,y} = \log p(l_i=y|l_{i-1}=x) wx,y=logp(li=y∣li−1=x)每个特征函数的输出都是1;
类似地,对于每个 HMM 的发射概率 log p ( w i ∣ l i ) \log p(w_i|l_i) logp(wi∣li),也可以视作特征函数,每个特征函数的权重为 w x , z = log p ( w i = z ∣ l i = x ) w_{x,z} = \log p(w_i=z|l_{i}=x) wx,z=logp(wi=z∣li=x);
因此,由 CRF 计算的分数 p(l|s)使用这些特征函数是精确地成比例的对应于 HMM 计算的分数,所以每一个 HMM 是等同于一些 CRF的特征函数;
CRFs 可以建模更丰富的标签分布,这里有两个原因:
HMM模型存在两个严格假设:
除此之外,HMM还会出现标注偏置问题: