1. 什么是条件随机场
NLP中CRF模型可以简单看作是线性链条件随机场,是一种判别模型,是无向概率图模型,有下图形式:
有向图中每条有向边$A->B$表示随机变量$B$依赖于随机变量$A$,有向边表示$P(B|A)$,所以有$P(A,B)=P(A)P(B|A)$。但在无向图中,我们不知道哪个随机变量依赖于哪个随机变量,只知道这几个随机变量是相关的。如果我们对每条无向边$A-B$定义一个联合概率$P(A,B)$是不合理的,比如现在有一个团,团内部随机变量两两相连,假设有10个随机变量,则这10个随机变量的联合概率可能依赖于这10个随机变量而无法分解成2个2个随机变量的联合概率的乘积。基于这个事实,可以对每个最大团定义一个势函数,这个势函数直接求得这个最大团的联合概率。然后整个无向图所有随机变量的联合概率等于所有最大团的联合概率的乘积。无向图所有最大团,一些最大团之间是有重合,注意所有最大团是指无向图的每条边都至少属于一个最大团,需要覆盖所有的边。
2. 线性链条件随机场求解
CRF模型在用于处理序列问题时,一般是使用线性链条件随机场模型。从上面的图可以看到,这个无向图每个三角形构成了一个最大团,所以可以对图上所有的三角形定义势函数,我们可以将势函数看作特征函数:
一般而言,特征函数不止一个。现在我们有一个堆数据样本$(X,Y)$,希望从这堆样本中学习到$P(Y|X)$,使得下式成立:
同时使得下式达到最大值:
其中$\hat{p}(x)$和$\hat{p}(x,y)$是从样本统计得到的,我们要求的是$p(y|x)$,可以看出这就是最大熵模型,本质上CRF是可以通过最大熵原理求得的。根据最大熵模型的求解,可以得到:
现在需要求$w_i$。上面的式子是从拉格朗日乘子法得到的,将$p(y|x)$代回拉格朗日式子,求得$w_i$的极大值点就是$w_i$的解。我们还可以换一个角度,使用$p(y|x)$在样本上通过求最大似然得到$w_i$,可以证明这两种做法本质是一样的。最大熵模型一般使用GIS或IIS求$w_i$,所以CRF也可以使用这两种方法。现在我们知道怎么使用数据样本得到CRF的模型参数,如果我们有一个输入$x$,怎么利用模型参数求最大的$p(y|x)$对应的$y$呢。我们可以借鉴HMM模型的解码问题,使用维比特算法的动态规划思想求出最大的$p(y|x)$和对应的$y$,这样就解决了CRF的解码问题了。
3. 杂谈
CRF模型与HMM模型比较,有这么几个优势:
(1) CRF是判别模型,HMM是生成模型,HMM有观测独立性假设,要求输入序列内部是互相独立的,而CRF因为是对条件概率建模,所以对输入序列内部没有任何约束,输入序列内部的任何约束也与条件概率无关。
(2) CRF使用无向概率图,变量之间的联系更复杂,更能应付更一般的情况。而HMM模型因为是有向概率图,要求变量之间的联系有迹可循,且联系是单向简单的。
(3) CRF可以按照需求定义各种特征函数,使得模型更灵活,能处理更多问题,而且可解释性更强。而HMM模型是已经定死了,规则就那些。实际上,可以利用CRF构造出任何一个HMM模型,但无法反向操作。