条件随机场(二)

前面介绍隐马尔可夫模型时,讲到其可以作为自然语言处理的一种方法,但是隐马尔可夫做了很强的假设:齐次马尔可夫性假设和观测独立性假设,这两个假设却也影响了分类的准确性。而本篇介绍的条件随机场能弥补这一不足,因为去掉了观测独立性假设。参考文献1,我们简单介绍四个概率模型,并分析其之间的关系,最后再引出条件随机场,这样会显然自然些,也比较容易理解。

概率模型

朴素贝叶斯模型是给定一个特征向量从而决定单个分类变量值。设输入为特征向量$x in cal X = f R^n$,输出为类标记$y in cal Y$,X是定义在输入空间$cal X$上的随机变量,Y是定义在输出空间上的$cal Y$上的随机变量,联合概率分布为P(X,Y),当输入为x时,预测其分类y。隐马尔可夫则是朴素贝叶斯模型的扩展,处理分类的序列而非单个分类,比如(x1,x2,...,xt),对应分类为(y1,y2,...,yt)。朴素贝叶斯模型和隐马尔可夫模型都是生成模型(Generative,即 X和Y的联合概率分布)。

联合概率分布的缺点是计算的复杂度很高。而相反地,最大熵模型基于条件概率p(y|x),与朴素贝叶斯模型类似,最大熵模型也是处理对应单个特征向量的单个分类值。隐马尔可夫模型对朴素贝叶斯模型扩展到输入序列上来,条件随机场可以理解为对最大熵模型扩展到输入序列上来,最大熵模型和条件随机场模型都是判别模型(Discriminative,即Y关于X的条件概率分布)。

它们的关系如下图

如上图所示,左边两个模型考虑联合概率分布,右边两个模型考虑条件概率分布,上面两个模型考虑单个分类判断,而下面两个模型考虑分类序列判断。

朴素贝叶斯模型

我们使用条件概率分布来预测,条件概率为,

egin{equation} p(y|vec{x}) = frac {p(y)p(vec {x} |y)} {p(vec x)} end{equation}

给定一个输入向量$vec x$后,计算(1)的条件概率,值最大时对应的那个分类y 就是最终预测的分类,那么,既然给定了$vec x$,计算不同的y所对应的条件概率,那么(1)式的分母就不重要了,因为都一样,可看作常数(这里变量是y),而(1)式分子就是联合概率$p(y)p(vec {x} |y) = p(y, vec x)$,而这个联合概率计算有些复杂,尤其在输入向量$vec x$的分量很多时更加复杂。假设向量$vec {x} = (x_1, x_2, ..., x_m)$,那么

egin{equation} egin{aligned} p(x_1,x_2,...x_m) & = p(x_m|x_{m-1},...,x_1)p(x_{m-1},...x_1) \ & = p(x_m|x_{m-1},...,x_1)p(x_{m-1}|x_{m-2},...x_1)p(x_{m-2},...,x_1) \ & = p(x_m|x_{m-1},...,x_1)p(x_{m-1}|x_{m-2},...x_1) ... p(x_2|x_1)p(x_1) \ & = p(x_1) prod_{i=2}^m p(x_i|x_{i-1},...x_1) end{aligned} end{equation}

结合(1)和(2),有

egin{equation} p(y,vec{x})=p(y)p(x_1|y) prod_{i=2}^m p(x_i|x_{i-1},...x_1,y) end{equation}

实际中通常假设分量 $x_i$ 关于y 的条件独立于$vec x$其他分量,这就是朴素贝叶斯假设。那么$p(x_i|y,x_j)=p(x_i|y)$,其中 $i eq j$。于是朴素贝叶斯模型为

egin{equation} p(y|vec x) propto p(y, vec x) = p(y) prod_{i=1}^m p(x_i|y) end{equation}

显然,上式简单多了,但是朴素贝叶斯的条件独立性假设会使得实际上分类没那么准确。

隐马尔可夫模型

朴素贝叶斯模型中,我们仅考虑单个分类预测。如果要考虑分类序列的预测,假设观测序列为$vec x = (x_1,x_2,...,x_n)$,要预测的分类序列为$vec y = (y_1, y_2,...,y_n)$,注意这里的下标对应序列中的下标,那么自然而然地,可以将序列看到一个个朴素贝叶斯模型,然后将它们连乘,就表示这个序列中各项同时发生。不考虑序列中各项的依赖性,并且与朴素贝叶斯稍有不同的是,序列中每一项仅对应一个输入特征,即观测实体,那么根据(4)式有

egin{equation} p(vec {y},vec {x}) = prod_{i=1}^n p(y_i) p(x_i|y_i) end{equation}

在对应位置上,每个观测$x_i$只依赖于分类值$y_i$,由于这个独立性假设,此模型并未包含转移概率。然而实际中很难满足这个独立性假设,这也导致此模型的实用性受限。因此,可以假设在序列的连续位置上分类之间有一定的相关性,于是模型变为,

egin{equation} p(vec y, vec x) = prod_{i=1}^n p(y_i|y_{i-1})p(x_i|y_i) end{equation}

其中由于没有第0位置观测,所以我们为了上式书写的一致性,令$p(y_1|y_0)=p(y_1)$,于是可以得到观测序列出现的概率可以通过对所有分类序列求和,为

egin{equation} P(vec x) = sum_{y in mathcal{Y} } prod_{i=1}^n p(y_i|y_{i-1}) p(x_i|y_i) end{equation}

其中,$mathcal {Y}$表示所有的分类序列$vec y$。

此模型考虑了分类序列$vec y$中的各连续分类之间的依赖性,但是缺点是观测序列之间的条件独立性的假设,这使得模型不能很好的表征实际情况。后面我们将看到,CRF可以解决这一问题。

最大熵模型

前两个模型是学习联合概率分布,而这里最大熵模型则是条件概率模型,由于其与我们要讨论的CRF比较接近,CRF是最大熵模型从单个分类扩展到分类序列上的,所以可以着重讨论一下最大熵模型,然而也可以与前面几篇专门讲最大熵模型对比一下,加深最大熵模型的印象。

最大熵模型基于最大熵原理,表述如下:给定一个概率分布的不完全信息,那么除了这个已知信息之外对于那些未知部分的概率分布,总是认为是均匀分布的。基于这个设定,从训练数据集中找到约束条件后,在这些约束条件下,使得熵达到最大的那个概率分布正是我们所要的。

我们知道对于随机变量X,其熵定义为

egin{equation} H(P)=-sumlimits_{x}P(x)logP(x)end{equation}

那么,对于条件概率P(Y|X),其中Y表示输出随机变量,X表示输入随机变量,那么条件熵定义为,

egin{equation} H(y|x) = - sum_{(x,y) in mathcal{Z}} p(y,x) log p(y|x) end{equation}

其中,$mathcal{Z}= X imes Y$表示所有可能的输入X与所有可能的输出Y的组合,注意这是指所有输入空间X的值和输出空间的Y的值的组合,而不仅仅是存在于训练数据集中的样本点(x,y)。如果对上式还不那么容易看透的话,可以这么理解,

$$ H(P) = - sum_{x}p(x)H(Y|X=x) = -sum_{x}p(x) sum_{y} p(y|x) log p(y|x) = - sum_{x} sum_{y} p(x)p(y|x) log p(y|x) = - sum_{x,y} p(x,y) log p(y|x) $$

最大熵模型就是要找到概率分布$p^{*}(y|x)$,使得条件熵值最大,于是目标函数为

egin{equation} p^{*}(y|x) = arg max_{p(y|x) in P} H(y|x) end{equation}

其中P是所有可能的概率模型,但是这些概率模型必须要与训练数据集一致没有冲突,比如说训练数据集有 m 个特征函数,为了简单,我们假设特征函数为二值函数$f_{i}(x,y) in lbrace 0,1 brace (1 leq i leq m)$,当输入x 和输出y 满足某一条件时,特征函数值为1,否则为0,需要注意的是对任意一个特征函数$f_{i}(x,y)$,都是针对所有输入x和所有输出y,而非某一个输入输出(x,y),这个要特别注意。

egin{equation} f_{i}(x,y) = egin{cases} 1 &  ext {x与y满足某一事实} \ 0 & ext {否则} end{cases} end{equation}

其中 ${(x,y)| (x,y) in mathcal{Z}}$

特征函数$f_i$的期望根据经验概率分布$ ilde{p}(x,y)$来估计,于是

egin{equation} ilde{E}(f_i) = sum_{(x,y) in mathcal{Z}} ilde{p}(x,y)f_{i}(x,y) end{equation}

这里(x,y)属于整个输入空间和输出空间所有值的组合,然而如果某个(x,y)在训练数据集中并不存在对应的样本点,那么其经验概率$ ilde{p}(x,y) = 0$,所以可以去掉那些在训练数据集中不存在的(x,y),于是上式可以改写为

egin{equation} ilde{E}(f_i) = frac 1 N sum_{(x,y) in mathcal{T}} f_{i}(x,y) end{equation}

其中 $N = |mathcal T|$,$mathcal T$表示训练数据集,$mathcal T$可能存在重复的(x,y),于是上式可以理解为:训练数据集中满足某一特征函数值为1的样本点(x,y)的个数除以训练数据集的大小,就是这一个特征函数的经验期望。

而特征函数的期望为

egin{equation} E(f_i) = sum_{(x,y) in mathcal{Z}} p(x,y) f_{i}(x,y) end{equation}

由于联合概率分布p(x,y)无法计算,因为输入空间和输出空间的值的组合(x,y)数量巨大,可以转为计算条件概率,于是上式可以写为

egin{equation} E(f_i) = sum_{(x,y) in mathcal{Z}} p(x) p(y|x) f_{i}(x,y) end{equation}

上式中,可以使用$ ilde{p}(x)$代替$p(x)$,于是有

egin{equation} E(f_i) = sum_{(x,y) in mathcal{Z}} ilde{p}(x) p(y|x) f_{i}(x,y) end{equation}

 类比上面(13)式,由于只有$ ilde{p}(x)$是经验概率,且$ ilde{p}(x) = frac {N(x)} N$,N(x)表示输入x 在训练数据集中出现的次数,所以将x和y拆分两个独立的维度进行求和,y还是对输出空间$mathcal Y$的所有可能值求和,而x对训练数据集中出现的每一个输入求和(包括重复出现的输入),于是上式变换为,

egin{equation} E(f_i) = sum_{(x,y) in mathcal{Z}} frac {N(x)} N p(y|x) f_{i}(x,y) = frac 1 N sum_{x in mathcal{T}} sum_{y in mathcal{Y}} p(y|x) f_{i}(x,y) end{equation}

其中N表示训练数据集$mathcal T$的大小,两重求和,内层求和是对所有输出空间的可能值y求和,而外层求和是对训练数据集中所有出现的输入x(x可以出现重复)求和,理解上式的变换需要注意求和符号Sigma下标的变化。

实际问题中,输出空间$cal Y$往往可能的取值数量比较小,可以保证上式的计算量不会很大。

我们要求$p^{*}(y|x)$与训练数据集中数据某些特征相一致,也就是说假设求得$p^{*}(x,y)$,那么代入(17)式计算得到特征函数的期望,应该与这个特征函数的经验期望((12)式)相等,于是有,

egin{equation} E(f_i) = ilde{E}(f_i) end{equation}

另外还有一个限制,既然是求条件概率p(y|x),那么必须满足概率的基本性质,即

egin{equation} p(y|x) geq 0 quad for forall(x,y) quad quad sum_{y in mathcal{Y}} p(y|x) = 1 quad for forall x end{equation}

假设特征函数有m个,那么限制条件总共为m+1个,目标函数由(11)式给出,这是一个带约束条件的优化问题,于是采用拉格朗日乘子法,为每个约束条件引入一个乘子$lambda_i$,拉格朗日函数为

egin{equation} L(p,vec {lambda}) = H(y|x) + sum_{i=1}^m lambda_{i} left( E(f_i) - ilde{E}(f_i) ight) + lambda_{m+1} left( sum_{y in mathcal{Y}} p(y|x) - 1 ight) end{equation}

下面做简单的推导,

 根据(9)式,类似地近似计算条件熵为

egin{equation} H(y|x) = - sum_{(x,y) in mathcal{Z}} ilde{p}(x)p(y|x) log p(y|x) end{equation}

对p(y|x)求偏导,这里需要注意的是,其实是对$p(x_i,y_i)$求偏导,此时其他所有$p(x_j,y_j), (j eq i)$可以看作常数(另外,$ ilde{p}(x)$也是常数),也就是说,求得的偏导不只一个式子,而是一系列的偏导式子,理论上共有$|mathcal Z|$个,

egin{equation} frac {partial H(y|x)} {partial p(y|x)} = - ilde{p}(x) left(log p(y|x) + frac {p(y|x)}{p(y|x)} ight) = - ilde{p}(x)(logp(y|x)+1) end{equation}

对拉格朗日函数中关于m个特征函数的那一项求p(y|x)的偏导,因为$E(f_i)$中的变量包括p(y|x),所以可以对其求偏导,如下

egin{equation} egin{aligned} frac {partial} {partial p(y|x)} sum_{i=1}^m lambda_i left( E(f_i) - ilde{E}(f_i) ight) & = frac {partial} {partial p(y|x)} sum_{i=1}^m lambda_i left(sum_{(x,y) in mathcal{Z}} ilde{p}(x) p(y|x) f_{i}(x,y) - sum_{(x,y) in mathcal{Z}} ilde{p}(x,y)f_{i}(x,y) ight) \ & = sum_{i=1}^m lambda_i ilde{p}(x) f_i (x,y) end{aligned} end{equation}

上式中,$ ilde{p}(x), f_i(x,y), ilde{p}(x,y)$均为常数,此外,与H(y|x)的偏导类似,这里同样是得到一系列的偏导式子。

于是拉格朗日函数对p(y|x)的偏导为,

egin{equation} frac { partial L(p, vec lambda)} {partial p(y|x)} = - ilde{p}(x)(logp(y|x)+1)+sum_{i=1}^m lambda_i ilde{p}(x) f_i (x,y)+ lambda_{m+1} end{equation}

令其等于0,即

egin{equation} - ilde{p}(x)(logp(y|x)+1)+sum_{i=1}^m lambda_i ilde{p}(x) f_i (x,y)+ lambda_{m+1} = 0 end{equation}

求解上式,得

egin{equation} p(y|x) = exp left( sum_{i=1}^m lambda_i f_i (x,y) ight) exp(frac {lambda_{m+1}}{ ilde{p}(x)} - 1) end{equation}

由上面(19)式的第二个限制条件,概率分布的求和为1,所以对上式求和

$$ sum_{y in mathcal{Y}} exp left( sum_{i=1}^m lambda_i f_i (x,y) ight) exp(frac {lambda_{m+1}}{ ilde{p}(x)} - 1) = 1 $$

注意到上式第二个指数项与y无关,可以提到求和符号的左边,即

$$ exp(frac {lambda_{m+1}}{ ilde{p}(x)} - 1) sum_{y in mathcal{Y}} exp left( sum_{i=1}^m lambda_i f_i (x,y) ight) = 1$$

将上式代入(26)式,解得

$$ p(y|x) = exp left( sum_{i=1}^m lambda_i f_i (x,y) ight) frac 1 {sum_{y in mathcal{Y}} exp left( sum_{i=1}^m lambda_i f_i (x,y) ight)} $$

注意上式适用任何(x,y)。于是,满足限制条件的最大熵模型求解出来了,即(10)式的解,整理如下

egin{equation} p_{vec {lambda}}^* (y|x) = frac 1 {Z_{vec x}(x)} exp(sum_{i=1}^m lambda_i f_i (x,y)) end{equation}

其中

egin{equation} Z_{vec {lambda}}(x) = sum_{y in mathcal Y} exp(sum_{i=1}^m lambda_i f_i (x,y)) end{equation}

上面这个条件概率分布是一个对数线性模型。当然了上面式子中还存在参数$lambda_i$,要计算最终的条件概率分布,需要将上式代入拉格朗日函数,然后对$lambda_i$求极大值,具体是求偏导并令其等于0,求得$lambda_i$再代入上式解得最终的条件概率分布,具体可参考前面专门讲的最大熵模型

虽然说本篇标题是条件随机场,但是为了引出条件随机场,又复习了一遍其他三个概率模型,这也是没办法,一切都是为了更好的理解透彻条件随机场,下一篇将讲述两种概率模型(生成模型和判别模型)的图表示。

ref

Classical Probabilistic Models and Conditional Random Fields

原文地址:https://www.cnblogs.com/sjjsxl/p/7009982.html