本文是台湾AI届最强YouTuber李宏毅老师的Strutured Learning课程中关于CRF讲解的笔记。HMM很容易理解,但是在看CRF的时候一脸懵逼,看了李航老师的《统计学习》和周志华老师的西瓜书也是一知半解,不得要领,直到看了李宏毅老师的CRF课程视频才恍然大悟,哈哈哈。
线性连条件随机场是判别式模型,目的是求给定 $X$ 的情况下 $Y$ 的条件概率分布,模型公式为:

CRF看起来跟HMM很不一样,但其实原理是相通的。
HMM为生成式模型,计算的是 $x, y$ 的联合概率分布(计算方法如下图),将公式两边分别取log,这样公式由原来的相乘都变成了相加。

我们先关注相加的最后一项,这一项是对于长度为L的句子,给定状态y的情况下出现观测x的概率的对数和。

将该项稍微做下转化:

举个栗子,假设整个数据集中一共有10个不同的词,5种不同词性,对于句子“The dog ate the homework”,对应的词性为:“D/N/V/D/N”,要求这个句子在给定状态y的情况下出现观测x的概率的对数和,在HMM模型中,我们只统计句子中出现的(词,词性)对,比如 $P(the|D)$,而没有出现在该句子中(词,词性)对就不统计了,但CRF会把没有出现在该句子中的(词,词性)对也考虑进来,只不过对应的次数为0,所以下面公式中倒数第二个等式做了简化,其实是有 $5x10 - 1 =49$ 项,有一项重复,其他未出现的项次数为0(所以CRF才会有这么多无用的特征..)。

同理,我们可以对公式(1)中的每一项都照葫芦画瓢,将其调整为对数条件概率乘以相应次数的形式,这样就可以把 $log P(x,y)$ 写成一大推两项相乘的形式,将其描述成两个向量的内积,$w \cdot \phi(x,y)$ ,这里的 $\phi(x,y)$ 其实就是CRF里面的特征向量。

跟HMM的发射概率、状态转移概率、初始概率直接从训练数据中统计不同的是,这里的参数w是从训练数据中不断迭代学习得到的,既然是训练得到的,不加限制的话,参数w里面的每个元素是可正可负的,如果参数w是负数的话,计算 $P(x, y) = exp(w \cdot \phi(x,y))$ 得到的结果小于1,将其解析成概率好像没什么毛病,但是如果参数 $w$ 是正数的话,得到的 $P(x, y)$ 大于1,这时候将其解析成概率就很奇怪了,另外,在训练中,也没办法保证给定某个状态 $s_i$,对于所有的观测 $t$ ,其概率和为1(从理论上统计的话,和肯定是1的),所以,严格意义上,式子 $P(x, y) = exp(w \cdot \phi(x,y))$ 两边是不相等的,所以稍微做了下修改,认为 $P(x,y)$ 是跟 $exp(w \cdot \phi(x,y))$ 成正比的,写成:
$$P(x,y) \varpropto exp(w \cdot \phi(x,y)) (2)$$
我们知道,公式(2),中的参数 $w$ 其实是特征权重,是从训练中学习得到的,而 $\phi(x,y)$ 是特征向量,这个特征向量长什么样子的呢,继续以下图的例子进行解析。

这里的特征主要包含两部分:
part1: 标签与词之间的关系
前面解析过,CRF的特征是将所有可能的组合都考虑进来,不管这个组合在实际数据中有没有出现,其特征其实就是出现的次数。如果数据中有 $|S|$ 种可能的标签,非重复词的个数为 $|L|$,对应的特征维度大小为 $|S| x |L|$

标签与标签之间的关系
跟part1 同理,这里计算的是标签与标签之间的所有组合的特征,另外将start 和 end 这两个位置也考虑进来,如果有 $|S|$ 种标签,那么对应的特征维度大小为 $|S| x |S| + 2|S|$。

这样在训练CRF模型的时候,就可以将part1 和part2两个部分的特征接起来,当做CRF里面拿来算概率的vector,这里其实是跟HMM一样的,但是不一样的地方在于,CRF将其概率描述成一个 $w$ 和 特征向量的内积,可以自己定义特征,比如对于词性标注,可以尝试增加,该字是否句子首尾字,或者首字母是否大写(英文语料)等特征,CRF真正强大的地方也正在于此。
CRF的原理到这里就结束了,在训练的时候,目标是找到恰当的参数 $w$ ,使得 $P(y|x)$ 最大。