CRF
Swift Lv6

条件随机场(Conditional Random Fields)是给定一组输入序列条件下另一组输出序列的概率分布模型,在NLP中应用很广泛。

场景

假设我们有Bob一天从早到晚的一系列照片,Bob想考考我们,要我们猜这一系列的每张照片对应的活动,比如: 工作的照片,吃饭的照片,唱歌的照片等等。一个比较直观的办法就是,我们找到Bob之前的日常生活的一系列照片,然后找Bob问清楚这些照片代表的活动标记,这样我们就可以用监督学习的方法来训练一个分类模型,比如逻辑回归,接着用模型去预测这一天的每张照片最可能的活动标记。

这种办法虽然是可行的,但是却忽略了一个重要的问题,就是这些照片之间的顺序其实是有很大的时间顺序关系的,而用上面的方法则会忽略这种关系。比如我们现在看到了一张Bob闭着嘴的照片,那么这张照片我们怎么标记Bob的活动呢?比较难去打标记。但是如果我们有Bob在这一张照片前一点点时间的照片的话,那么这张照片就好标记了。如果在时间序列上前一张的照片里Bob在吃饭,那么这张闭嘴的照片很有可能是在吃饭咀嚼。而如果在时间序列上前一张的照片里Bob在唱歌,那么这张闭嘴的照片很有可能是在唱歌。

为了让我们的分类器表现的更好,在标记数据的时候,可以考虑相邻数据的标记信息。这一点,是普通的分类器难以做到的。而这一块,也是CRF比较擅长的地方。

在实际应用中,自然语言处理中的词性标注(POS Tagging)就是非常适合CRF使用的地方。词性标注的目标是给出一个句子中每个词的词性(名词,动词,形容词等)。而这些词的词性往往和上下文的词的词性有关,因此,使用CRF来处理是很适合的。

MRF

随机场是由若干个位置组成的整体,当给每一个位置中按照某种分布随机赋予一个值之后,其全体就叫做随机场。举个词性标注的例子:假如我们有一个十个词形成的句子需要做词性标注。这十个词每个词的词性可以在我们已知的词性集合(名词,动词…)中去选择。当我们为每个词选择完词性后,这就形成了一个随机场。

马尔可夫随机场是随机场的特例,它假设随机场中某一个位置的赋值仅与它相邻的位置的赋值有关。就拿上面的例子来说,我们假设所有词的词性只和它相邻的词的词性有关,这个随机场就特化成MRF。比如第三个词的词性除了与自己本身的位置有关外,只与第二个词和第四个词的词性相关。

CRF

CRF是MRF的特例,它假设MRF中只有 $X$ 和 $Y$ 两种变量。$X$ 一般是给定的,而 $Y$ 是在给定 $X$ 的条件下的输出。这样MRF就特化成了CRF。在十个词的句子词性标注中,$X$ 是词,$Y$ 是词性。因此,如果我们假设它是一个MRF,那么它也是CRF。

我们用准确的数学语言来描述:

设 $X$ 和 $Y$ 是随机变量,$P(Y|X)$ 是给定 $X$ 时 $Y$ 的条件概率分布。若 $Y$ 构成MRF,则称条件概率分布 $P(Y|X)$ 是CRF。

Linear CRF

设 $X = (X_1, X_2, \dots , X_n), Y = (Y_1, Y_2, \dots, Y_n)$ 均为线性链的随机变量序列。在给定随机变量序列 $X$ 的情况下,随机变量 $Y$ 的条件概率分布 $P(Y|X)$ 满足马尔可夫性:

则称 $P(Y|X)$ 为线性链条件随机场。

参数化形式

我们通过特征函数及其权重系数来将Linear CRF转化为机器学习模型。

特征函数分为两类,一类是定义在 $Y$ 节点上的状态特征函数,这类特征函数只与当前节点有关,记为:

$i$ 是当前节点在序列的位置,$L$ 表示当前节点的状态特征函数的个数。

另一类是定义在 $Y$ 上下文的转移特征函数,这类特征函数只和当前节点和上一个节点有关,记为:

$i$ 是当前节点在序列的位置,$K$ 表示当前节点的转移特征函数的个数。

无论是状态特征函数还是转移特征函数,它们的取值只能是0或1。即满足特征条件或不满足特征条件。同时,我们可以为每个特征函数赋予一个权值,用以表达我们对这个特征函数的信任度。假设 $t_k$ 的权重系数是 $\lambda_k$ ,$s_l$ 权重系数是 $\mu_l$ , 由此得到Linear CRF的参数化形式:

其中,$Z(x)$ 为规范化因子:

每个特征函数定义了一个Linear CRF的规则,其系数定义了这个规则的可信度。两者一起构成了Linear CRF的条件概率分布。

实例

这里举一个词性标注的例子。假设输入的都是三个词的句子,即 $X = (X_1, X_2, X_3)$,输出的词性标记为 $Y = (Y_1, Y_2, Y_3)$,其中 $Y \in {\lbrace 1(名词), 2(动词) \rbrace}$。这里只标记出取值为1的特征函数:

求标记(1, 2, 2)的概率。

根据上述参数化公式我们有:

代入(1, 2, 2)得到:

简化形式

我们用 $s_l$ 表示状态特征函数,用 $t_k$ 表示转移特征函数,同时也使用了不同的符号表示权重系数,导致表示起来非常麻烦。这里我们简化一下表示形式。

假设在某节点有 $K_1$ 个状态特征函数和 $K_2$ 个转移特征函数。我们用一个特征函数 $f_k(y_{i-1}, y_i, x, i)$ 来统一表示:

同时我们也统一 $f_k(y_{i-1}, y_i, x, i)$ 对应的权重系数 $w_k$ 如下:

最终Linear CRF的参数化形式简化如下:


参考

Powered by Hexo & Theme Keep
Unique Visitor Page View