CRF

上图显示CRF模型解决了标注偏置问题,去除了HMM中两个不合理的假设。当然,模型相应得也变复杂了

1 CRF模型具有以下特点:

(1)CRF在给定了观察序列的情况下,对整个的序列的联合概率有一个统一的指数模型,它具备一个比较吸引人的特性就是其损失函数的凸面性;

(2)CRF具有很强的推理能力,并且能够使用复杂、有重叠性和非独立的特征进行训练和推理,能够充分地利用上下文信息作为 特征,还可以任意地添加其他外部特征,使得模型能够获取的信息非常丰富;

(3)CRF解决了MEMM中的标记偏置问题,这也正是CRF与MEMM的本质区别所在—-最大熵模型在每个状态都有一个概率模型,在每个状态转移时都要进行归一化。如果某个状态只有一个后续 状态,那么该状态到后续状态的跳转概率即为1。这样,不管输入为任何内容,它都向该后续状态跳转。而CRFs是在所有的状态上建立一个统一的概率模型,这 样在进行归一化时,即使某个状态只有一个后续状态,它到该后续状态的跳转概率也不会为1。

2 具体计算过程:

  • step1. 先预定义特征函数 f_{a}(o,i) ,
  • step2. 在给定的数据上,训练模型,确定参数 \lambda_{k}
  • step3. 用确定的模型做序列标注问题或者序列求概率问题

了解CRF的同学肯定都知道CRF是判别模型,给定一个句子s,要求出句子的标记,就是找出一个标记序列l,使得P(l|s)概率最大。

这里n是所有可能的标记序列数量,以中文切词为例,假设切分标记为B、E、M、S,待切分的句子长度为m,那标记序列的数量就是4的m次方。

那么只要我们能求出是每个标记序列l的概率 P(l|s),然后取概率最大的l,也就求出了最终的标记序列。

假设我们在训练阶段已经得到了每个特征对应的权重值,那么对于待标记的句子s,我们可以通过以下公式计算出每个标记序列l的得分:

(公式上第一个求和对应特征数,第二个求和对应句子长度)

最终,我们可以通过指数函数和归一化,将分数转换成概率,公式如下

  上述算法的很容易理解,但是通过枚举所有可能的标记序列,计算时间长,所以我们在几乎所有介绍CRF的资料上,都是用维特比算法求解。

3 CRF特征说明

对于CRF,可以为他定义两款特征函数:转移特征(对于隐藏层)&状态特征(对于观测层)。 我们将建模总公式展开:

P(I | O)=\frac{1}{Z(O)} e^{\sum_{i}^{T}\sum_{k}^{M}\lambda_{k}f_{k}(O,I_{i-1},I_{i},i)}=\frac{1}{Z(O)} e^{ [ \sum_{i}^{T}\sum_{j}^{J}\lambda_{j}t_{j}(O,I_{i-1},I_{i},i) + \sum_{i}^{T}\sum_{l}^{L}\mu_{l}s_{l}(O,I_{i},i) ] }

其中:

  • t_{j} 为i处的转移特征,对应权重 \lambda_{j} ,每个 token_{i} 都有J个特征,转移特征针对的是前后token之间的限定。
    • 举个例子:

\begin{equation} t_{k=1}(o,i) = \begin{cases} 1& \text{满足特定转移条件,比如前一个token是‘I’},\\ 0& \text{other} \end{cases} \end{equation}

  • sl为i处的状态特征,对应权重μl,每个tokeni都有L个特征
    • 举个例子:

\begin{equation} s_{l=1}(o,i) = \begin{cases} 1& \text{满足特定状态条件,比如当前token的POS是‘V’},\\ 0& \text{other} \end{cases} \end{equation}

4 学习训练过程

一套CRF由一套参数λ唯一确定(先定义好各种特征函数)。

同样,CRF用极大似然估计方法、梯度下降、牛顿迭代、拟牛顿下降、IIS、BFGS、L-BFGS等等。各位应该对各种优化方法有所了解的。其实能用在log-linear models上的求参方法都可以用过来。

嗯,具体详细求解过程貌似问题不大。

5 序列标注过程

还是跟HMM一样的,用学习好的CRF模型,在新的sample(观测序列 o_{1}, \cdots, o_{i} )上找出一条概率最大最可能的隐状态序列 i_{1}, \cdots, i_{i} 。

只是现在的图中的每个隐状态节点的概率求法有一些差异而已,正确将每个节点的概率表示清楚,路径求解过程还是一样,采用viterbi算法。

啰嗦一下,我们就定义i处的局部状态为 \delta_{i}(I) ,表示在位置i处的隐状态的各种取值可能为I,然后递推位置i+1处的隐状态,写出来的DP转移公式为:

\delta_{i+1} = max_{1 \le j \le m}\lbrace \delta_{i}(I) + \sum_{i}^{T}\sum_{k}^{M}\lambda_{k}f_{k}(O,I_{i-1},I_{i},i) \rbrace

这里没写规范因子 Z(O) 是因为不规范化不会影响取最大值后的比较。

具体还是不展开为好。

6 序列求概率过程

跟HMM举的例子一样的,也是分别去为每一批数据训练构建特定的CRF,然后根据序列在每个MEMM模型的不同得分概率,选择最高分数的模型为wanted类别。只是貌似很少看到拿CRF或者MEMM来做分类的,直接用网络模型不就完了不……

7 CRF和hmm的区别是:

(1)CRF没有那两个假设

(2)hmm生成式模型,crf判别式模型

为了建一个条件随机场,我们首先要定义一个特征函数集,每个特征函数都以整个句子s,当前位置i,位置i和i-1的标签为输入。然后为每一个特征函数赋予一个权重,然后针对每一个标注序列l,对所有的特征函数加权求和,必要的话,可以把求和的值转化为一个概率值

8 CRF与逻辑回归的比较

观察公式:

是不是有点逻辑回归的味道?
事实上,条件随机场是逻辑回归的序列化版本。逻辑回归是用于分类的对数线性模型,条件随机场是用于序列化标注的对数线性模型。

https://www.jianshu.com/p/55755fc649b1

https://blog.csdn.net/QFire/article/details/81065256

猜你喜欢

转载自blog.csdn.net/fkyyly/article/details/83150347
CRF