"> "> 机器学习 - 条件随机场 | Yufei Luo's Blog

机器学习 - 条件随机场

概述

条件随机场(Conditional Random Field,CRF)是给定一组输入随机变量条件下,另一组输出随机变量的条件概率分布模型,其特点是假设输出随机变量构成马尔科夫随机场。本文主要讨论线性链条件随机场,这一方法在标注问题中被广泛使用,例如自然语言处理中的词性标注等。

备注:马尔科夫随机场

马尔科夫随机场是随机场中的一个特例,它假设随机场中某一个位置的赋值仅仅与和它相邻位置的复制有关,而和与其不相邻位置的赋值无关。

线性链条件随机场

定义

X Y 是随机变量,P(Y|X) 是在给定 X 的条件下 Y 的概率分布。如果随机变量 Y 构成一个无向图 G=(V,E) 表示的马尔科夫随机场,即 P(Yv|X,Yw,wv)=P(Yv|X,Yw,wv) 对于任意结点 v 成立,那么条件概率分布 P(Y|X) 为条件随机场。式中 wv 表示在图 G=(V,E) 中与结点 v 有边连接的所有结点 wwv 表示结点 v 以外的所有结点。YvYw 为结点 vw 对应的随机变量。

如果考虑线性链的情况,即 G=(V={1,2,,n},E={(i,i+1)}),i=1,2,,n1。在此情况下,X=(X1,X2,,Xn)Y=(Y1,Y2,,Yn)。此时 P(Y|X) 为线性链条件随机场,如下图所示:

在标注问题中,X 表示输入观测序列,Y 表示对应的输出标记序列或者状态序列。

在线性链条件随机场中,如果随机变量 X 取值为 x={x1,x2,,xn},那么随机变量 Y 取值为 y={y1,y2,,yn} 的条件概率具有如下形式: P(y|x)=1Z(x)exp(i,kλktk(yi1,yi,x,i)+i,lμlsl(yi,x,i)) 其中 Z(x)=yexp(i,kλktk(yi1,yi,x,i)+i,lμlsl(yi,x,i)) 为归一化因子;tksl 代表特征函数;λk μl 为对应的权值。tk 是定义在边上的特征函数,被称为转移特征,依赖于当前和前一个位置;sl 是定义在结 l 点上的特征函数,称为状态特征,它依赖于当前位置。通常,两个特征函数的取值为 0 或 1,当满足特征条件时取值为 1,否则为 0。因此,一个条件随机场完全由其特征函数 tksl 及其对应的权值 λkμl 确定。

以词性标注问题为例,特征方程 tk(yi1,yi,x,i) 可以被定义为如果 yi1 是形容词而 yi 是名词时等于 1,否则等于 0。为了构建一个用于词性标注的 CRF 模型,通常需要定义很多个类似于这样的特征方程,每一个特征方程对应于一个语法规则。

简化形式

条件随机场还可以由简化形式表示。在条件随机场的表达式中,同一特征在每个位置都有定义,因此可以对同一个特征在各个位置求和,将局部特征函数转化为一个全局特征函数。这样,就可以将条件随机场写成权值向量和特征向量的内积形式,从而得到简化的形式。

为了简便起见,我们将转移特征和状态特征及其权值用统一的符号表示。设有 K1 个转移特征,K2 个状态特征,K=K1+K2,记 fk(yi1,yi,x,i)={tk(yi1,yi,x,i),k=1,2,,K1sl(yi,x,i),k=K1+l;l=1,2,,K2 然后对转移和状态特征在各个位置 i 求和,记作: fk(y,x)=i=1nfk(yi1,yi,x,i),k=1,2,,K wk 表示特征 fk(y,x) 的权值,即 wk={λk,k=1,2,,K1μl,k=K1+l;l=1,2,,K2 于是条件随机场可以表示为如下形式: P(y|x)=1Z(x)expk=1Kwkfk(y,x)Z(x)=yexpk=1Kwkfk(y,x) 如果记 w=(w1,w2,,wK) 为权值向量,F(y,x)=(f1(y,x),f2(y,x),,fK(y,x))T 为全局特征向量,那么条件随机场可以写成向量 w F(y,x) 的内积形式: P(y|x)=exp(wF(y,x))Z(x)Z(x)=ywF(y,x))

矩阵形式

条件随机场还可以由矩阵表示。假设 P(y|x) 是一个线性链条件随机场,表示对给定观测序列 x,相应的标记序列 y 的条件概率。引入特殊的起点和终点状态标记 y0=startyn+1=stop,此时 P(y|x) 可以通过矩阵形式表示。

对观测序列 x 的每一个位置 i=1,2,,n+1,定义一个 m 阶矩阵(m 代表标记 yi 取值的个数): Mi(x)=[Mi(yi1,yi|x)] 其中,Mi(yi1,yi|x)=exp(Wi(yi1,yi|x))Wi(yi1,yi|x)=i=1Kwkfk(yi1,yi,x,i)。这样,给定观测序列 x,标记序列 y 的非规范化概率可以通过 n+1 个矩阵的乘积 i=1n+1Mi(yi1,yi|x) 表示,于是条件概率 P(y|x) 可以写为: P(y|x)=1Z(x)i=1n+1Mi(yi1,yi|x) 其中 Z(x) 为规范化因子,是 n+1 个矩阵乘积的 (start,stop) 元素,表示以 start 为起点 stop 为终点通过状态的所有路径 y1y2yn 的非规范化概率之和。

概率计算

前向 - 后向算法

条件随机场的概率计算问题是给定条件随机场 P(Y|X),输入序列 x 和输出序列 y,计算条件概率 P(Yi=yi|x)P(Yi1=yi1,Yi=yi|x) 以及相应的数学期望的问题。为了方便起见,通过引入像隐马尔科夫模型一样的前向 - 后向向量,递归地计算概率和期望值。这样的算法被称为前向 - 后向算法。

对于 i=0,1,,n+1,定义前向向量 αi(x)α0={1,y=start0,Otherwise 递推公式为: αiT(yi|x)=αi1T(yi|x)Mi(yi1,yi|x),i=1,2,,n+1 αi(yi|x) 表示在位置 i 的标记是 yi 并且到位置 i 的前部分标记序列的非规范化概率。由于 yi 可取的值有 m 个,因此 αi(x) m 维列向量。

同样地,对于 i=0,1,,n+1,定义后向向量 βi(x)βn+1(yn+1|x)={1,yn+1=stop0,Otherwise 递推公式为: βi(yi|x)=Mi(yi,yi+1|x)βi1(yi+1|x),i=1,2,,n+1 βi(yi|x) 表示在位置 i 的标记为 yi 并且从 i+1 n 的后部分标记序列的非规范化概率。

根据前向 - 后向向量的定义可以得到: Z(x)=αnT(yn|x)1=1β1(y1|x)

概率计算

按照前向 - 后向向量的定义,很容易计算标记序列在位置 i 是标记 yi 的条件概率,和在位置 i1 i 是标记 yi1 yi 的条件概率: P(Yi=yi|x)=αiT(yi|x)βi(yi|x)Z(x)P(Yi1=yi1,Yi=yi|x)=αi1T(yi1|x)Mi(yi1,yi|x)βi(yi|x)Z(x)

期望值的计算

利用前向 - 后向向量,可以计算特征函数关于联合分布 P(X,Y) 和条件分布 P(Y|X) 的数学期望。

特征函数 fk 关于条件分布 P(Y|X) 的数学期望是: EP(Y|X)[fk]=yP(y|x)fk(y,x)=i=1n+1yi1yifk(yi1,yi,x,i)αi1T(yi1|x)Mi(yi1,yi|x)βi(yi|x)Z(x),k=1,2,,K 假设经验分布为 P~(X),特征函数 fk 关于联合分布 P(X,Y) 的数学期望是 EP(X,Y)[fk]=x,yP(x,y)i=1n+1fk(yi1,yi,x,i)=xP~(x)yP(y|x)i=1n+1fk(yi1,yi,x,i)=xP~(x)i=1n+1yi1yifk(yi1,yi,x,i)αi1T(yi1|x)Mi(yi1,yi|x)βi(yi|x)Z(x) 上式为特征函数数学期望的一般计算公式,可以将其中的 fk 替换为转移特征或者状态特征。

根据上述这些表达式,对于给定的观测序列和标记序列,可以通过一次前向扫描计算 αi Z(x),通过一次后向扫描计算 βi,从而计算所有的概率和特征的期望。

学习算法

已知训练数据集,由此可知经验概率分布为 P~(X,Y),可以通过极大化训练数据的对数似然函数来求模型参数。训练数据的对数似然函数为: L(w)=logx,yP(y|x)P~(x,y)=x,yP~(x,y)logP(y|x) P(y|x) 是一个条件随机场模型时,对数似然函数为: L(w)=x,yP~(x,y)logP(y|x)=x,y[P~(x,y)k=1Kwkfk(y,x)P~(x,y)logZ(x)]=j=1Nk=1Kwkfk(yj,xj)j=1NlogZ(xj) 改进的迭代尺度法通过迭代的方法不断优化对数似然函数改变量的下界,达到极大化对数似然函数的目的。假设模型的当前参数向量为 w=(w1,w2,,wk)T,向量的增量为 δ=(δ1,δ2,,δK)T,那么更新的参数向量为 w+δ=(w1+δ1,w2+δ2,,wK+δK)T。在每步迭代过程中,改进的迭代尺度法通过依次求解下式得到 δEP~[tk]=x,yP~(x,y)i=1n+1tk(yi1,yi,x,i)=x,yP~(x)P(y|x)i=1n+1tk(yi1,yi,x,i)exp(δkT(x,y)),k=1,2,,K1

EP~[sl]=x,yP~(x,y)i=1n+1sl(yi,x,i)=x,yP~(x)P(y|x)i=1n+1sl(yi,x,i)exp(δK1+lT(x,y)),l=1,2,,K2

其中 T(x,y) 代表在数据 (x,y) 中出现所有特征数的总和: T(x,y)=kfk(y,x)=k=1Ki=1n+1fk(yi1,yi,x,i) 对于不同的数据 (x,y)T(x,y) 的取值可能不同,为了处理这个问题定义松弛特征: s(x,y)=Sk=1Ki=1n+1fk(yi1,yi,x,i) 其中 S 是个常数,选择足够大的常数 S 使得对训练数据集的所有数据 (x,y)s(x,y)0 成立。这时特征总数可以取 S

此时,对于转移特征 tkδk 的更新方程为: EP~[tk]=x,yP~(x)P(y|x)i=1n+1tk(yi1,yi,x,i)exp(δkS)δk=1SlogEP~[tk]EP[tk] 对于状态特征 slδk 的更新方程为: EP~[sl]=x,yP~(x)P(y|x)i=1n+1sl(yi,x,i)exp(δK1+lS)δK1+l=1SlogEP~[sl]EP[sl] S 取的足够大时,每步迭代的增量向量会变大,从而导致算法收敛变慢。

另一个改进方法是对每个观测序列 x 计算其特征总数的最大值 T(x)=maxyT(x,y)。利用前向 - 后向递推公式,可以计算得到 T(x)=t。此时,关于转移特征参数的更新方程可以写成: EP~[tk]=x,yP~(x)P(y|x)i=1n+1tk(yi1,yi,x,i)exp(δkT(x))=xP~(x)yP(y|x)i=1n+1tk(yi1,yi,x,i)exp(δkT(x))=xP~(x)ak,texp(δkt)=t=0Tmaxak,tβkt 其中 ak,t 为特征 tk 的期望值,δk=logβkβk 为多项式方程的唯一实根,可以用牛顿法求得,从而求得对应的 δk

同样,关于状态特征的参数更新方程可以写为: EP~[sl]=x,yP~(x)P(y|x)i=1n+1sl(yi,x,i)exp(δK1+lT(x,y))=xP~(x)yP(y|x)i=1nsl(yi,x,i)exp(δK1+lT(x))=xP~(x)bl,texp(δkt)=t=0Tmaxbl,tγlt 其中 bl,t 是特征 sl 的期望值,δl=logγlγl 为多项式方程的唯一实根,也可以用牛顿法求得。

备注:计算对数似然函数的极大值也可以使用梯度下降法、牛顿法等方法,不局限于迭代尺度法。

预测算法

条件随机场的预测问题是给定条件随机场 P(Y|X) 和输入序列(观测序列)x,求条件概率最大的输出序列(标记序列)y,即对观测序列进行标注。条件随机场的预测算法是维特比算法。

y=argmaxyP(y|x)=argmaxyexp(wF(y,x))Z(x)=argmaxyexp(wF(y,x))=argmaxy(wF(y,x)) 因此条件随机场的预测问题相当于是求非规范化概率最大的路径问题,此处的路径表示标记序列。由于只需要计算非规范化概率,因此可以大大提高效率。

维特比算法的步骤如下:

  1. 首先求出位置 1 的各个标记 j=1,2,,m 的非规范化概率: δ1(j)=w1F1(y0=start,y1=j,x),j=1,2,,m

  2. 由递推公式,可以计算得到位置 i 的各个标记 l=1,2,,m 的非规范化概率的最大值: δi(l)=max1jm{δi1(j)+wiFi(yi1=j,yi=l,x)},l=1,2,,m 同时记录非规范化概率最大值的路径: ψi(l)=argmax1jm{δi1(j)+wiFi(yi1=j,yi=l,x)},l=1,2,,m 直到 i=n 时终止。

  3. 最终求得非规范化概率的最大值为: maxy(wF(y,x))=max1jmδn(j) 以及最优路径的终点: yn=argmax1jmδn(j) 由此最优路径终点返回,yi=ψi+1(yi+1),求得最优路径 y=(y1,y2,,yn)T

参考

  1. 统计学习方法,李航
  2. 如何轻松愉快地理解条件随机场(CRF)? - 知乎 (zhihu.com)
  3. 条件随机场介绍(译)Introduction to Conditional Random Fields - 知乎 (zhihu.com)
  4. sklearn-crfsuite — sklearn-crfsuite 0.3 documentation

Gitalk 加载中 ...