条件随机场(二)
前面介绍隐马尔可夫模型时,讲到其可以作为自然语言处理的一种方法,但是隐马尔可夫做了很强的假设:齐次马尔可夫性假设和观测独立性假设,这两个假设却也影响了分类的准确性。而本篇介绍的条件随机场能弥补这一不足,因为去掉了观测独立性假设。参考文献1,我们简单介绍四个概率模型,并分析其之间的关系,最后再引出条件随机场,这样会显然自然些,也比较容易理解。
概率模型
朴素贝叶斯模型是给定一个特征向量从而决定单个分类变量值。设输入为特征向量$x \in \cal X = \bf 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的条件概率分布)。
它们的关系如下图
如上图所示,左边两个模型考虑联合概率分布,右边两个模型考虑条件概率分布,上面两个模型考虑单个分类判断,而下面两个模型考虑分类序列判断。
朴素贝叶斯模型
我们使用条件概率分布来预测,条件概率为,
\begin{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)$,那么
\begin{equation} \begin{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),有
\begin{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 \neq j$。于是朴素贝叶斯模型为
\begin{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)式有
\begin{equation} p(\vec {y},\vec {x}) = \prod_{i=1}^n p(y_i) p(x_i|y_i) \end{equation}
在对应位置上,每个观测$x_i$只依赖于分类值$y_i$,由于这个独立性假设,此模型并未包含转移概率。然而实际中很难满足这个独立性假设,这也导致此模型的实用性受限。因此,可以假设在序列的连续位置上分类之间有一定的相关性,于是模型变为,
\begin{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)$,于是可以得到观测序列出现的概率可以通过对所有分类序列求和,为
\begin{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,其熵定义为
\begin{equation} H(P)=-\sum\limits_{x}P(x)logP(x)\end{equation}
那么,对于条件概率P(Y|X),其中Y表示输出随机变量,X表示输入随机变量,那么条件熵定义为,
\begin{equation} H(y|x) = - \sum_{(x,y) \in \mathcal{Z}} p(y,x) \log p(y|x) \end{equation}
其中,$\mathcal{Z}= X \times 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)$,使得条件熵值最大,于是目标函数为
\begin{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 \rbrace (1 \leq i \leq m)$,当输入x 和输出y 满足某一条件时,特征函数值为1,否则为0,需要注意的是对任意一个特征函数$f_{i}(x,y)$,都是针对所有输入x和所有输出y,而非某一个输入输出(x,y),这个要特别注意。
\begin{equation} f_{i}(x,y) = \begin{cases} 1 & \text {x与y满足某一事实} \\ 0 & \text {否则} \end{cases} \end{equation}
其中 ${(x,y)| (x,y) \in \mathcal{Z}}$
特征函数$f_i$的期望根据经验概率分布$\tilde{p}(x,y)$来估计,于是
\begin{equation} \tilde{E}(f_i) = \sum_{(x,y) \in \mathcal{Z}} \tilde{p}(x,y)f_{i}(x,y) \end{equation}
这里(x,y)属于整个输入空间和输出空间所有值的组合,然而如果某个(x,y)在训练数据集中并不存在对应的样本点,那么其经验概率$\tilde{p}(x,y) = 0$,所以可以去掉那些在训练数据集中不存在的(x,y),于是上式可以改写为
\begin{equation} \tilde{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)的个数除以训练数据集的大小,就是这一个特征函数的经验期望。
而特征函数的期望为
\begin{equation} E(f_i) = \sum_{(x,y) \in \mathcal{Z}} p(x,y) f_{i}(x,y) \end{equation}
由于联合概率分布p(x,y)无法计算,因为输入空间和输出空间的值的组合(x,y)数量巨大,可以转为计算条件概率,于是上式可以写为
\begin{equation} E(f_i) = \sum_{(x,y) \in \mathcal{Z}} p(x) p(y|x) f_{i}(x,y) \end{equation}
上式中,可以使用$\tilde{p}(x)$代替$p(x)$,于是有
\begin{equation} E(f_i) = \sum_{(x,y) \in \mathcal{Z}} \tilde{p}(x) p(y|x) f_{i}(x,y) \end{equation}
类比上面(13)式,由于只有$\tilde{p}(x)$是经验概率,且$\tilde{p}(x) = \frac {N(x)} N$,N(x)表示输入x 在训练数据集中出现的次数,所以将x和y拆分两个独立的维度进行求和,y还是对输出空间$\mathcal Y$的所有可能值求和,而x对训练数据集中出现的每一个输入求和(包括重复出现的输入),于是上式变换为,
\begin{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)式)相等,于是有,
\begin{equation} E(f_i) = \tilde{E}(f_i) \end{equation}
另外还有一个限制,既然是求条件概率p(y|x),那么必须满足概率的基本性质,即
\begin{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$,拉格朗日函数为
\begin{equation} L(p,\vec {\lambda}) = H(y|x) + \sum_{i=1}^m \lambda_{i} \left( E(f_i) - \tilde{E}(f_i) \right) + \lambda_{m+1} \left( \sum_{y \in \mathcal{Y}} p(y|x) - 1 \right) \end{equation}
下面做简单的推导,
根据(9)式,类似地近似计算条件熵为
\begin{equation} H(y|x) = - \sum_{(x,y) \in \mathcal{Z}} \tilde{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 \neq i)$可以看作常数(另外,$\tilde{p}(x)$也是常数),也就是说,求得的偏导不只一个式子,而是一系列的偏导式子,理论上共有$|\mathcal Z|$个,
\begin{equation} \frac {\partial H(y|x)} {\partial p(y|x)} = -\tilde{p}(x) \left(\log p(y|x) + \frac {p(y|x)}{p(y|x)} \right) = -\tilde{p}(x)(logp(y|x)+1) \end{equation}
对拉格朗日函数中关于m个特征函数的那一项求p(y|x)的偏导,因为$E(f_i)$中的变量包括p(y|x),所以可以对其求偏导,如下
\begin{equation} \begin{aligned} \frac {\partial} {\partial p(y|x)} \sum_{i=1}^m \lambda_i \left( E(f_i) - \tilde{E}(f_i) \right) & = \frac {\partial} {\partial p(y|x)} \sum_{i=1}^m \lambda_i \left(\sum_{(x,y) \in \mathcal{Z}} \tilde{p}(x) p(y|x) f_{i}(x,y) - \sum_{(x,y) \in \mathcal{Z}} \tilde{p}(x,y)f_{i}(x,y)\right) \\ & = \sum_{i=1}^m \lambda_i \tilde{p}(x) f_i (x,y) \end{aligned} \end{equation}
上式中,$\tilde{p}(x), f_i(x,y), \tilde{p}(x,y)$均为常数,此外,与H(y|x)的偏导类似,这里同样是得到一系列的偏导式子。
于是拉格朗日函数对p(y|x)的偏导为,
\begin{equation} \frac { \partial L(p, \vec \lambda)} {\partial p(y|x)} = -\tilde{p}(x)(logp(y|x)+1)+\sum_{i=1}^m \lambda_i \tilde{p}(x) f_i (x,y)+ \lambda_{m+1} \end{equation}
令其等于0,即
\begin{equation} -\tilde{p}(x)(logp(y|x)+1)+\sum_{i=1}^m \lambda_i \tilde{p}(x) f_i (x,y)+ \lambda_{m+1} = 0 \end{equation}
求解上式,得
\begin{equation} p(y|x) = \exp \left( \sum_{i=1}^m \lambda_i f_i (x,y) \right) exp(\frac {\lambda_{m+1}}{\tilde{p}(x)} - 1) \end{equation}
由上面(19)式的第二个限制条件,概率分布的求和为1,所以对上式求和
$$ \sum_{y \in \mathcal{Y}} \exp \left( \sum_{i=1}^m \lambda_i f_i (x,y) \right) exp(\frac {\lambda_{m+1}}{\tilde{p}(x)} - 1) = 1 $$
注意到上式第二个指数项与y无关,可以提到求和符号的左边,即
$$ exp(\frac {\lambda_{m+1}}{\tilde{p}(x)} - 1) \sum_{y \in \mathcal{Y}} \exp \left( \sum_{i=1}^m \lambda_i f_i (x,y) \right) = 1$$
将上式代入(26)式,解得
$$ p(y|x) = \exp \left( \sum_{i=1}^m \lambda_i f_i (x,y) \right) \frac 1 {\sum_{y \in \mathcal{Y}} \exp \left( \sum_{i=1}^m \lambda_i f_i (x,y) \right)} $$
注意上式适用任何(x,y)。于是,满足限制条件的最大熵模型求解出来了,即(10)式的解,整理如下
\begin{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}
其中
\begin{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