书中最后一章----条件随机场(Conditional Random Field,CRF)是目前为止学习到的比较抽象的一个模型了。网络上许多关于书中的此部分内容的博客、学习资源等都是照本宣科,因此学习这部分内容耗费了不少的精力。接下来结合我个人的理解来谈谈条件随机场。
因为符号较多,务必清楚每个符号代表的确切含义。
目录
1 一个例子
2 条件随机场原理
2.1 概率无向图模型(马尔科夫随机场)
2.1.1 理解模型
2.1.2 模型的因子分解
2.2 条件随机场的定义
2.3 条件随机场的表示
2.3.1 参数化形示
2.3.2 简化形式
2.3.3 矩阵形式
3 条件随机场三个基本问题
3.1 概率计算问题
3.2 学习算法
3.3 预测算法
4 小结
5 总结
之前按照书中结构出发,直接从原理学习条件随机场,真是晦涩难懂。因此在这里为了接下来的方便叙述,结合一个例子来描述条件随机场。这篇博客:https://blog.csdn.net/dcx_abc/article/details/78319246的例子举得不错,下面举的例子参考该博客。
条件随机场与上一章的隐马尔科夫模型要解决的都是标注问题。标注问题与分类问题的一个不同之处在于,标注问题的数据是具备时序特征的:即输入的是数据一个序列,而输出的数据也是一个序列。
假设现在要做一个词性的标注工作:即根据一个句子,标注出这个句子每个单词的词性。如“Monkey like eat big banana”,那么输入数据为 X = {Monkey,like,eat,big,banana},希望得到输出的标注词性为 Y = {名词,动词,动词,形容词,名词}。前者输入序列称为观测序列,而后者输出序列称为状态序列。
在上一章提到过,隐马尔科夫模型是生成模型(直接对于P(X,Y)进行建模,相当于描述了模型的生成过程),而条件随机场则属于判别模型(直接对P(Y|X)建模),直接根据条件概率选择概率最大的作为结果(会多次涉及到其与隐马尔科夫的对比)。因此,条件随机场解决问题的思路为:当模型完成学习(参数确定)之后,对于给定的观测(输入)序列,根据设置的特征函数,计算其所有可能出现的状态(输出)序列的出现概率,选取概率最大的输出序列作为结果。特征函数可以看作是衡量结果出现概率高低的标准。
因此,条件随机场的核心便在于特征函数,确定了特征函数也就确定了一个条件随机场。观察上面的例子,其实不难归纳到两大类的特征:其一是单词本身具有的特征,如单词是Monkey,那么就认为该单词是名词的可能性很大;其二是单词序列间的特征,如 big 后面接 banana,即形容词后面出现名词的概率较大。同样,条件随机场也是从这两方面来考虑特征函数:其一从状态本身出发考虑,称为状态特征;其二从状态前后的相关关系进行考虑,称为转移特征,即描述相邻时刻的相关程度。通常利用 t 来代表转移特征(transfer),s 来代表状态特征(status)。
根据不同的情况,可以指定不同的特征函数。一般而言,特征函数的取值为 0 或者 1。例如制定以下特征函数:
表示在时刻3或4或5时,若前一个状态为形容词,当前状态为名词,那么该特征函数取值为1,否则为0。类似地,我们可以定义 、
、...、
个转移特征函数。
表示在时刻1或2或3或4或5时,若当前观测为 'monkey',且当前状态为名词,那么该特征函数取值为1,否则为0。类似地,我们可以定义 、
、...、
个状态特征函数。
特征函数根据实际情况来建立,可以发现特征函数建立的规则非常灵活,几乎是想如何设定就设定,这就为条件随机场提供了非常强大的可扩展性。这也是条件随机场能够得到广泛应用的一个重要原因。
需要明白的是,特征函数与特征函数是具备差异的。比如说认为特征函数 :单词 monkey对应着标注是名词,比 特征函数
:形容词后面接名词 的概率要大。因此不仅有一组特征函数,每个特征函数还应具备一个权值来衡量他们之间的差异。
因此,对于每一个可能出现的状态序列,假设为 y,那么根据特征函数集和输入数据集 x,可以写出一个关于特征函数的求和,来代表这个状态序列出现的非规范化概率:
上式注意两层求和:每个特征函数对于每个时刻求和,之后再对于所有特征函数进行求和。上面这个式子也可以理解为,该观测序列 y 的分数,分数越高代表其出现的可能性越大。我们明白,一个概率分布必须具备两个基本条件:其一非负;其二和为 1。上述式子只所以称为非规范化概率或者分数,就是因为其不满足这两个特征。因此我们将其规范化,从而得到概率。结合常用的技巧,解决非负问题加一个 e 作为底数即可,使和为 1,那么除以这个和即可。因此根据非规范化概率写出规范化概率如下:
即为:
归一化函数 表示对所有可能出现的状态序列 y 的非规范化概率求和结果。
可根据实际情况,选择使用非规范化概率或者是规范化概率。
因此,给定了特征函数也就给定了一个条件随机场,针对一个观测输入序列 x ,对所有可能出现的状态序列 y 都计算其出现的概率,选择概率最大的一个作为结果输出,从而完成标注。
因此可以将上面一句话写的仔细点:确定了一组特征函数以及其相应的权重也就确定了一个条件随机场模型。
以上这个例子可以帮助我们初探条件随机场。其实上述这个例子只是条件随机场的一个情况,称为线性链条件随机场(因为状态序列、观测序列都为线性关系)。线性链条件随机场其实也是实际中用的最多的模型,也是这章内容中讨论的模型。接下来的第二节,会从原理上面谈谈对于条件随机场的理解。
先参考书中,给出条件随机场的定义:条件随机场是给定一组输入随机变量条件下,另一组输出随机变量的条件概率分布模型,其特点是假设输出随机变量构成马尔科夫随机场。
看完定义可以有以下直观理解:其一,跟隐马尔科夫模型类似,数据为序列数据;其二,与隐马尔科夫不同,求解的条件概率分布模型,也就是说是一个判别模型算法。看完定义感觉不明白的便是马尔科夫随机场了,这也是条件随机场的核心之处。
其实看完第一节的例子,肯定会有很多的疑问,例如特征函数为什么这样建立等等。条件随机场的原理其实很晦涩难懂,但是如果绕开原理不谈,又很难理解其建模的合理性。因此,这里我还是采取书中的思路:从问题源头看起,来谈谈我的理解。
首先给出一个直观理解,然后再解释。
概率无向图模型,又称为马尔科夫随机场,是一个可以由无向图表示的联合概率分布。
首先介绍概率图模型。概率图模型是由图表示的概率分布。一个图G 由边集合与节点集合构成,可写作 ,其中 V 代表节点集合,E 代表边集合。假设存在着一组随机变量
,且这组随机变量能够得到一个联合分布
,如果能够存在着一张图 G,G中的每个节点分别代表着每个随机变量
,而边
代表着随机变量之间的概率依赖关系,那么称该模型为概率图模型。
最直观的理解便是,若一组随机变量有 n 个,那么其对应的概率图模型的节点也有 n 个;若两个随机变量之前存在概率依赖关系,那么在图中表示这两个随机变量的两个节点便会存在一条边(例如 与
共同发生,那么
与
便有一条边相邻)。即以图的方式来表示这组随机变量。
那么如果图是无向图,是不是就是概率无向图模型呢?还并不是这样。给出概率无向图的定义:设有联合分布 ,其可由一个无向图 G 进行表示。若此联合概率分布
满足成对或者局部或者全局马尔科夫性,则称此联合概率分布为概率无向图模型,或马尔科夫随机场。也就是说,不仅仅是无向图,而且重点在于表示该联合概率分布的无向图应满足成对或者局部或者全局马尔科夫性,此时才能构成马尔科夫性。
成对、局部、全局的马尔科夫性定义是等价的。因此,在这里只选取全局马尔科夫性进行叙述(其余有兴趣查阅原书):设有节点集合A,B是在无向图 G 中被节点集合 C 分开的任意节点集合,如下图所示。
节点集合A、B、C对应的随机变量分别是、
、
。全局马尔科夫性是指给定
条件下,
与
是条件独立的:即满足下式:
结合表示图与定义,不难得到马尔科夫性描述的是节点之间的这么一种关系:即节点只与其相邻的节点有关系,与不相邻的节点没关系;换句话说,一个随机变量只与其有概率依赖的随机变量有关,与其没有概率依赖的随机变量无关。写出这句话把我自己都逗乐了,因为这完全是一句废话嘛。其实在上面这句话中忽略了一个重要因素,那就是条件独立。也就是说,有关系与没关系的依据是在某一条件下进行判断。姑且先这样理解。
根据这一节内容最开始对于条件随机场的定义,我们知道输出的随机变量的联合概率分布应该是一个马尔科夫随机场。那么该如何求解其联合概率分布呢?马尔科夫场的一个最大特点便是易于分解,也就是可将该联合概率分解其若干个联合概率的乘积,化整为零,这样便利于我们进行计算。在叙述模型的分解时,先介绍团与最大团的概念。
若在无向图 G 中,若存在着一个节点子集 A,对于 A 中任意两个节点在 G 中均有边连接,那么这个节点子集 A 称为一个团(clique)。能够取得的最多节点个数的团则称为最大团。如下图所示:
图中的团有:、
、
、
、
、
、
。
其中最大团有:、
。
结合马尔科夫场的马尔科夫性以及图中最大团的定义,那么我们便可以利用最大团进行分解了:假设 C 为 G 中的最大团, 表示该最大团对于的随机变量的集合,用
表示该最大团 C 上的函数,那么就可将总的联合概率分布分解为所有最大团的连乘:
其中,为了保证其为一个概率分布,Z 为规范化因子,具体如下:
马尔科夫场的因子分解主要是要使我们明白,可以根据马尔科夫性,将总的待求的联合概率分解为若干个最大团对应着的函数的连乘形式。
先进行一般条件随机场的定义:设 X 与 Y 是随机变量,通常而言,X 对应着输入序列即观测序列,而 Y 对应着输出序列即状态序列。若随机变量 Y 构成一个由无向图 G 表示的马尔科夫随机场,即:
上式对于任意节点 v 都成立,则称条件概率分布 为条件随机场。其中,
表示非当前节点 v 的节点集;
表示图中与 v 有边相连接的节点集。
对于上式的一个直观理解即为:在给定输入数据 X 以及随机变量 Y 构成一个马尔科夫随机场的条件下,某个随机变量 发生的条件概率只和与其有概率依赖的随机变量有关,与其余随机变量无关。这样的话,在建模的时候,对于某个随机变量而言,就只考虑和其有关系的变量了。
其实这和隐马尔科夫模型有相似之处。在隐马尔科夫模型中,假设当前状态只与上一个状态有关,而一般形式的条件随机场相当于将其进行了扩展:当前状态可能不仅与上一个状态有关,可能会与多个有关状态有关系。
可能也发现了,当随机变量 ,也就是状态之间的关系很复杂时,那么一般形式的条件随机场其实也是很复杂的。因此,在实际中,使用线性链条件随机场的情况也很常见。顾名思义,线性链条件随机场即假设马尔科夫随机场符合线性链的结构。一个线性链的例子如下图所示:
观察上图可发现,原本的概率无向图现在简化为了一条线性的链,其中每个随机变量 只与它前后相邻的随机变量有关。而输入的序列 X 与每个
都有关系。
在定义中,并没有要求 X 和 Y 具备相同的结构。但是为了简化模型,常常认为 X 和 Y 具备相同的结构,如下所示:
看这个图好像有点熟悉,咋一看不是和隐马尔科夫模型一样吗?每个观测对应一个状态,当前状态由上一个状态决定且当前状态决定下一个状态,即当前状态与前后两个两个状态都有关系。其实不然,注意上图,这里的 Y 表示状态,而 X 表示的是观测序列,箭头由 X 指向 Y,可以理解在 X 的条件下 Y 的概率,即条件概率 P(Y|X) ,这是典型的判别模型思路;而隐马尔科夫模型是一个生成模型,生成模型并不直接针对 P(Y|X) 建模,记得在隐马尔科夫模型中,模型的三个核心要素其中之一便是由隐藏的状态 Y 推出观测 X 的观测概率分布矩阵,即条件概率 P(X|Y)。因此若画出隐马尔科夫模型的建模过程,那么箭头的方向应该由 Y 指向 X。
结合以上,给出线性链条件随机场的定义:若在给定观测随机变量序列 ,状态随机变量序列
满足下列马尔科夫性:
那么称条件概率分布 P(Y|X)为线性链条件随机场。
接下来讨论的内容都只针对于线性链条件随机场。其实看完上面还是很抽象,一个显然的问题便是如何具体的计算每个的概率值呢?接下来会叙述条件随机场的表现形式。即采用第一节提到的状态特征和转移特征来进行表示,至于如何从上述原理过渡到采用特征函数进行表达,书中并没有进行说明。可能比较复杂,也不用再深挖了。
此节内容符号较多,注意不同符号表示的确切含义。
设 P(Y|X) 为线性链条件随机场,当 X 取值为 x,Y取值为 y 时,条件概率 P(Y=y|X=x)有如下形式:
具体地(表示对所有可能出现的状态序列进行求和得到归一化参数):
与第一节例子中定义的类似。 表示自己定义的某个转移特征,该转移特征与上一个状态,当前状态,输入序列,当前时刻四个参数有关,且具备权重
,共定义了 k 个转移特征;
表示自己定义的某个状态特征,该状态特征与当前状态。输入序列、当前时刻三个参数有关,且具备权重
,共定义了 l 个状态特征。将这些特征进行求和可以得到类似于评价概率高低的一个“分数”,这个“分数”称为非规划化概率。将分数通过取 e 为底数,并除以归一化参数 Z(x),使其变为真正概率,此时称为规范化概率。常常为了简化计算,有时候计算到非规范化概率就可以了。
参数化表示是比较直观,也比较好理解与使用的一种形式。
其实在这里,我看到一篇博客说,他认为线性链条件随机场是有向图模型。因为就看其参数化表示方式而言,当前的转移特征只与当前状态和上一个状态有关,看上去的确像是一个有向图,按照链的顺序而传递。其实我觉得线性链条件随机场仍然是一个无向图模型。因为注意到在马尔科夫场中,描述的是当前节点只与与其有边相连的节点有关。就转移特征函数而言,当前状态和上一个状态影响当前的转移特征,而当前状态和下一个状态又影响着下一个时刻的转移特征,不就意味着当前状态和上一个以及下一个状态都有关吗?转移特征函数的计算方式是将这个关系分成上一个状态和当前状态、当前状态和下一个状态这两个部分来计算,因此其实质我认为还是一个无向图模型。
为了方便一些理论的推导和证明,也可以用简化形式来表达条件随机场。
注意在公式(2.1)中,有两个求和的计算,一是某个特征函数先对于所有状态进行求和,而是对于所有特征函数都进行求和。因此得到的一个简化思路便是:第一,重定义特征函数,使得这个特征函数对于各个时刻的状态都有定义,从局部状态转为全局状态,这样就省略了内层的那个求和;第二,将转移特征函数和状态特征函数及其权值用一个统计的符号进行描述。
下面进行简化。设有 个转移特征,
个状态特征,总特征个数
,引入以下记法:
然后将特征函数对于每个时刻的状态求和,记:
注意虽然上面两个记法都用的是 ,但是里面参数不一样代表的是不同函数。为了与书中符号保持一致,就不改写了,姑且理解为“多态”吧。这在下面的符号记法也会多次用到,注意区分。
引入 来表示特征
的权值:
于是,便可将公式(2.1)简化为如下形式:
若以 表示权值向量,即:
表示全局特征向量,即:
那么可将其改写为 与
内积的形式,即:
其中:
假设给出的条件随机场如上一节内积表示形式,即公式(2.2),可将条件随机场 利用矩阵的形式进行表示。利用矩阵来表示条件随机场,需要引入标记:起点标记
;终点标记
。那么此时我们考虑的时刻便是
,共计
个时刻。回头看转移特征的定义:转移特征考虑的是前一个状态和当前状态。因此对于时刻
开始,每一个时刻都按照如下所示定义一个 m*m 的矩阵(m为状态的取值个数),共计定义
个矩阵。
看以上定义,不难得到时刻 的
矩阵代表的是该时刻的所有可能的非规范化概率。具体地,对于第 i 个时刻的
矩阵,其中的第 j 行第 k 列元素代表着前一个时刻状态取值为 j,当前时刻状态取值为 k 的非规范化概率。(注意区分
矩阵与
。
为一个m*m矩阵,而
为矩阵的一个元素,可以就理解为一个值)
因此,可将内积形式的条件随机场 ,利用 n+1 个
的乘积表示:
注意这里,规范化因子 的求法。
是 n+1 个
矩阵相乘的(start,stop)元素:
也就是说若起始状态取值为 j,终止状态取值为 k,那么 即为这 n+1 个
相乘得到的结果矩阵里面的元素(j,k)。
看一个例子,来加深条件随机场的矩阵形式的理解。给定一个观测序列 x,状态序列 y,共有三个待求时刻 ,标记的取值集合
,假设
,
,各个位置的随机矩阵
、
、
、
如下所示:
试求状态序列 y 以 start 为起始状态,以 end 为终止状态的所有路径的非规范化概率及规范化因子。
注意这里,因此对于时刻
时的矩阵
而言,前一个时刻已经固定,所以第二行为0。同理对于
而言,其取值已经固定位状态 1,所以第一列为 1 (我觉得第一列为相等的常数即可,取值为 1 是为了方便计算)而第二列为0。
也就是说,给定了起始状态和终止状态,求中间时刻状态的所有路径的非规范化概率。可以将状态路径绘制如下图所示:
每个时刻状态有两个取值,共计三个时刻,那么共计 条路径,结合状态矩阵可以直接写出每个路径
的非规范化概率,如下所示:
那么规范化因子即为上面8条路径的非规范化概率之和,即为:
如果你将各个位置的随机矩阵 、
、
、
连乘一下,你会发现得到的结果矩阵的第1行第1列(因为这里起始状态与终止状态都为1)的元素的值恰好与规范化因子相等。
类似于隐马尔科夫模型,条件随机场也有3个基本问题:
(1)概率计算问题。当给定条件随机场 P(Y|X),输入序列 x 和输出序列 y,计算时刻 i 的状态取值概率 ,时刻 i-1与时刻 i 的状态取值概率
以及相应的数据期望等问题。
(2)学习问题。即估计条件随机场的参数问题。具体地,即为特征函数的权重和特征函数内包含的参数的估计。
(3)预测问题。给定条件随机场和输入序列 x,预测最有可能的状态序列 y。
因为其中有许多流程和思想与隐马尔科夫模型类似,所以以下内容就写得稍微简单一些。
其实从上一章的最后一个部分----条件随机场的矩阵表示,就大概知道了条件随机场与隐马尔科夫模型或多或少的相似性。这篇博客我也在一直做二者对比。接下来的概率计算也类似于隐马尔科夫的思路。采用前向-后向算法进行求解。具体前向算法、后向算法的思路不再赘述,有疑惑的话回头再看看隐马尔科夫模型中的前向算法、后向算法的推导。因为前向、后向向量的定义联系到条件随机场的矩阵表示,因此注意到总的时刻序列为 ,共计 n+2 个时刻。
首先,进行前向向量的定义。对于初始时刻 i = 0的 前向向量定义如下(注意,定义中的 1 表示的皆为向量):
对于接下来的时刻前向向量定义如下:
某个时刻 i 的前向向量表示的是:时刻 i 状态取值为 且到位置 i 的前面时刻的非规范化概率。注意到前向向量应该是一个 m 维向量(假设状态的取值为 m 个)。又可将前向向量简化为如下形式:
同样地,定义后向向量如下:
同样可简化写作如下形式:
由此,规范化因子也不难求了,即为 i = n 的前向向量或者是 i = 1 时刻后向向量(并不意味着起始时刻和终止时刻,注意到我们的时刻序列为 )。如下所示:
根据前向-后向算法,就可以得到以下的概率计算了:
这篇博客之中主要讨论的是线性链条件随机场,其实际上是定义在时序数据之上的对数线性模型。因此常用的极大似然法和正则化极大似然法都可以对其进行模型参数的求解。
根据训练数据集,可求得经验联合概率分布 ,写出训练数据的对数似然函数为:
这里注意 是指数而不是乘积。可以理解为总共发生了
次,因此为
个事件相乘,即为指数而不是乘积。上式中的
是待求参数的一个条件随机场,具体地:
求解上述的对数似然的函数的优化算法有改进的迭代尺度法(IIS)、梯度下降法以及拟牛顿法等等。由于推导的过程较为繁琐,以下不再叙述了,有兴趣参照原书。之后应该会单独就某个优化算法加深学习并记下学习笔记。
同样地,预测算法也采用 Viterbi算法思路进行求解。结合一个例子来阐述。
设有一组标注问题,输入观测序列为 ,输出标记序列为
,标记取值集合为
,假设特征
和相应的权值
的取值如下:
将其简写为:
参照转移特征 ,为了方便,以下都做了简写(状态的取值要么为 1,要么为 0):
在上述例子中,求解最有可能的标记序列(状态序列):
1. 第一个时刻各个状态非规范化概率求解:
(1)第一个状态为 1的非规范化概率:。
(2)第一个状态为 2的非规范化概率:。
第一个时刻的非规范化概率只涉及到状态特征。
2. 第二个时刻各个状态非规范化概率求解:
(1)由状态1转为状态1的非规范化概率:。
(2)由状态2转为状态1的非规范化概率:。
因此,在时刻2处,状态1的非规范化概率为2.3,由上一个时刻状态1转移而来。
(1)由状态1转为状态2的非规范化概率:。
(2)由状态2转为状态2的非规范化概率:。
因此,在时刻2处,状态2的非规范化概率为2.5,由上一个时刻状态1转移而来。
从第二个时刻开始,非规范化概率不仅涉及到状态特征,还涉及到转移特征。
3. 第三个时刻各个状态非规范化概率求解:
(1)由状态1转为状态1的非规范化概率:。
(2)由状态2转为状态1的非规范化概率:。
因此,在时刻3处,状态1的非规范化概率为4.3,由上一个时刻状态2转移而来。
(1)由状态1转为状态2的非规范化概率:。
(2)由状态2转为状态2的非规范化概率:。
因此,在时刻3处,状态2的非规范化概率为3.8,由上一个时刻状态1转移而来。
参照隐马尔科夫中例子一样,这里同样也绘制一个每个时刻的状态图,如下:
可以得到在时刻 时,最大的非规范化概率为4.3。因此进行回溯,得到的最优状态序列即为
,即为上图中的红线所示。
初探条件随机场感觉的确比较抽象。条件随机场的笔记前前后后也花费了不少时间。
条件随机场模型建模所做的一个核心假设便是假设输出变量(状态序列)构成一个马尔科夫随机场,针对于线性链条件随机场而言,通过具化的状态特征以及转移特征来实现对于状态序列之间相互的概率依赖关系的描述。因此线性链条件随机场实质上是针对于序列数据的一个对数线性模型。
线性链条件随机场与隐马尔科夫模型有着许多联系。但是条件随机场的状态函数的定义十分灵活,这就使其解决的问题更加的广泛,可以说是隐马尔科夫模型能解决的问题条件随机场都能解决,反之却不一定正确。而且,从二者解决问题的思路来比较,也可以比较出判别模型算法和生成模型算法的解决问题思路的异同。
写完条件随机场的笔记,<<统计学习方法>>一书也接近了尾声了,也算是一个小节点吧,前前后后利用了几个月来进行书中内容的学习(自学还是比较吃力),学完之后获益颇多、感受颇深,感叹李航老师所著的此书逻辑清晰、论证合理,虽然对于入门者而言并不是很友好,但是对于想要加深对于机器学习理解的初学者而言则是一本很不错的学习资料。
写完这八章的学习笔记,这时的感觉就像我喜欢听的一首歌一样:酣畅淋漓、<<不吐不快>>。