CRF条件随机场

softmax与条件随机场

逐帧softmax

CRF主要用于序列标注问题,可以简单理解为是给序列中的每一帧都进行分类,既然是分类,很自然想到将这个序列用CNN或者RNN进行编码后,接一个全连接层用softmax激活,如下图所示
CRF条件随机场_第1张图片

条件随机场

然而,当我们设计标签时,比如用s、b、m、e的4个标签来做字标注法的分词,目标输出序列本身会带有一些上下文关联,比如s后面就不能接m和e,等等。逐标签softmax并没有考虑这种输出层面的上下文关联,所以它意味着把这些关联放到了编码层面,希望模型能自己学到这些内容,但有时候会“强模型所难”。

而CRF则更直接一点,它将输出层面的关联分离了出来,这使得模型在学习上更为“从容”:
CRF条件随机场_第2张图片
当然,如果仅仅是引入输出的关联,还不仅仅是CRF的全部,CRF的真正精巧的地方,是它以路径为单位,考虑的是路径的概率。

模型概要

假如一个输入有 n n n帧,每一帧的标签有 k k k种可能性,那么理论上就有 k n k^n kn中不同的输出。我们可以将它用如下的网络图进行简单的可视化。在下图中,每个点代表一个标签的可能性,点之间的连线表示标签之间的关联,而每一种标注结果,都对应着图上的一条完整的路径。
CRF条件随机场_第3张图片
而在序列标注任务中,我们的正确答案是一般是唯一的。比如“今天天气不错”,如果对应的分词结果是“今天/天气/不/错”,那么目标输出序列就是bebess,除此之外别的路径都不符合要求。换言之,在序列标注任务中,我们的研究的基本单位应该是路径,我们要做的事情,是从 k n k^n kn条路径选出正确的一条,那就意味着,如果将它视为一个分类问题,那么将是 k n k^n kn类中选一类的分类问题!
这就是逐帧softmax和CRF的根本不同了:前者将序列标注看成是 n n n k k k分类问题,后者将序列标注看成是 1 1 1 k n k^n kn分类问题。
具体来讲,在CRF的序列标注问题中,我们要计算的是条件概率
(1) P ( y 1 , … , y n ∣ x 1 , … , x n ) = P ( y 1 , … , y n ∣ x ) , x = ( x 1 , … , x n ) P(y_1,\dots,y_n|x_1,\dots,x_n)=P(y_1,\dots,y_n|\boldsymbol{x}),\quad \boldsymbol{x}=(x_1,\dots,x_n)\tag{1} P(y1,,ynx1,,xn)=P(y1,,ynx),x=(x1,,xn)(1)
为了得到这个概率的估计,CRF做了两个假设:

假设一 该分布是指数族分布。

这个假设意味着存在函数 f ( y 1 , … , y n ; x ) f(y_1,\dots,y_n;\boldsymbol{x}) f(y1,,yn;x),使得
(2) P ( y 1 , … , y n ∣ x ) = 1 Z ( x ) exp ⁡ ( f ( y 1 , … , y n ; x ) ) P(y_1,\dots,y_n|\boldsymbol{x})=\frac{1}{Z(\boldsymbol{x})}\exp\Big(f(y_1,\dots,y_n;\boldsymbol{x})\Big)\tag{2} P(y1,,ynx)=Z(x)1exp(f(y1,,yn;x))(2)
其中 Z ( x ) Z(x) Z(x)是归一化因子,因为这个是条件分布,所以归一化因子跟 x x x有关。这个 f f f函数可以视为一个打分函数,打分函数取指数并归一化后就得到概率分布。

假设二 输出之间的关联仅发生在相邻位置,并且关联是指数加性的。

这个假设意味着 f ( y 1 , … , y n ; x ) f(y_1,\dots,y_n;\boldsymbol{x}) f(y1,,yn;x)可以更进一步简化为
P ( a 1 , a 2 , … , a n ∣ Q ) = P ( a 1 ∣ Q ) P ( a 2 ∣ Q ) … P ( a n ∣ Q ) P(a_1,a_2,\dots,a_n|Q)=P(a_1|Q)P(a_2|Q)\dots P(a_n|Q) P(a1,a2,,anQ)=P(a1Q)P(a2Q)P(anQ)
P ( a 1 ∣ Q ) = P ( a 1 ∣ q 1 , q 2 , … , q n ) = P ( a 1 ∣ q 1 ) P ( a 2 ∣ Q ) = P ( a 2 ∣ q 1 , q 2 , … , q n ) = P ( a 2 ∣ q 2 ) ⋮ P ( a n ∣ Q ) = P ( a n ∣ q 1 , q 2 , … , q n ) = P ( a n ∣ q n ) \begin{aligned}P(a_1|Q)=&P(a_1|q_1,q_2,\dots,q_n)=P(a_1|q_1)\\ P(a_2|Q)=&P(a_2|q_1,q_2,\dots,q_n)=P(a_2|q_2)\\ &\quad\vdots\\ P(a_n|Q)=&P(a_n|q_1,q_2,\dots,q_n)=P(a_n|q_n)\\ \end{aligned} P(a1Q)=P(a2Q)=P(anQ)=P(a1q1,q2,,qn)=P(a1q1)P(a2q1,q2,,qn)=P(a2q2)P(anq1,q2,,qn)=P(anqn)
P Q ( a 1 , a 2 , … , a n ) = P Q ( a 1 ) P Q ( a 2 ∣ a 1 ) P Q ( a 3 ∣ a 2 ) … P Q ( a n ∣ a n − 1 ) = P Q ( a 1 ) P Q ( a 1 , a 2 ) P Q ( a 1 ) P Q ( a 2 ) P Q ( a 2 ) P Q ( a 2 , a 3 ) P Q ( a 2 ) P Q ( a 3 ) P Q ( a 3 ) … P Q ( a n − 1 , a n ) P Q ( a n − 1 ) P Q ( a n ) P Q ( a n ) \begin{aligned}&P_Q(a_1,a_2,\dots,a_n)\\ =&P_Q(a_1) P_Q(a_2|a_1) P_Q(a_3|a_2)\dots P_Q(a_n|a_{n-1})\\ =&P_Q(a_1) \frac{P_Q(a_1, a_2)}{P_Q(a_1) P_Q(a_2)} P_Q(a_2) \frac{P_Q(a_2, a_3)}{P_Q(a_2) P_Q(a_3)}P_Q(a_3) \dots \frac{P_Q(a_{n-1}, a_n)}{P_Q(a_{n-1}) P_Q(a_n)} P_Q(a_n) \end{aligned} ==PQ(a1,a2,,an)PQ(a1)PQ(a2a1)PQ(a3a2)PQ(anan1)PQ(a1)PQ(a1)PQ(a2)PQ(a1,a2)PQ(a2)PQ(a2)PQ(a3)PQ(a2,a3)PQ(a3)PQ(an1)PQ(an)PQ(an1,an)PQ(an)
(3) f ( y 1 , … , y n ; x ) = h ( y 1 ; x ) + g ( y 1 , y 2 ; x ) + h ( y 2 ; x ) + g ( y 2 , y 3 ; x ) + h ( y 3 ; x ) + ⋯ + g ( y n − 1 , y n ; x ) + h ( y n ; x ) \begin{aligned}f(y_1,\dots,y_n;\boldsymbol{x})=&h(y_1;\boldsymbol{x})+g(y_1,y_2;\boldsymbol{x})+h(y_2;\boldsymbol{x})+g(y_2,y_3;\boldsymbol{x})+h(y_3;\boldsymbol{x})\\ &+\dots+g(y_{n-1},y_n;\boldsymbol{x})+h(y_n;\boldsymbol{x})\end{aligned}\tag{3} f(y1,,yn;x)=h(y1;x)+g(y1,y2;x)+h(y2;x)+g(y2,y3;x)+h(y3;x)++g(yn1,yn;x)+h(yn;x)(3)
这也就是说,现在我们只需要对每一个标签和每一个相邻标签对分别打分,然后将所有打分结果求和得到总分。

你可能感兴趣的:(CRF条件随机场)