条件随机场(CRF)和隐马尔科夫模型(HMM)最大区别在哪里?CRF的全局最优体现在哪里?

作者:尔总的马甲
链接:https://www.zhihu.com/question/53458773/answer/554436625
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
https://www.zhihu.com/question/53458773

可以按照这个顺序理解:

1. 简单了解一下概率图模型

2. 简单了解一下朴素贝叶斯分类器和隐马尔可夫模型, 朴素贝叶斯模型扩展到序列问题,就是一个隐马

3. 其实还有个最大熵马尔可夫模型MEMM,就是结合了logistics regression地马尔科夫网络

4. CRF论文其实是拿MEMM来作比较的

5. 隐马尔可夫可以推导出线性链CRF

其他辅助理解的扩展

6. CRF与Logistic Regression

7. 生成式和判别式模型

8. 简单的代码实现


概率图模型

Graphical Models, 用图的形式表示随机变量之间条件依赖关系的概率模型,是概率论与图论的结合。图中的节点表示随机变量,缺少边表示条件独立假设。
G = (V, E). 其中 V: vertex, 顶点/节点, 表示随机变量. E: edge, 边/弧. 如果两个节点不存在边, 则二者条件独立.

image from: Probabilistic Graphical Models Principles and Techniques

从图上可以看到, 贝叶斯网络(Bayesian Networks, BNs)是有向图, 每个节点的条件概率分布表示为P(当前节点 | 父节点).

而马尔可夫网络则是无向图. 无向图形模型是指一整个家族的概率分布,每个概率分布都根据给定的因子集合进行因式分解。一般用random field来指代无向图中定义的特定分布. 数学上表达无向图, 指给定子集 [公式] , 对于所有 [公式] 和任何因子选项 [公式] , [公式] , 无向图定义的各个分布可以写成:

[公式]

Z是正则项用于保证分布 [公式] 和为 [公式]
[公式]

Markov Net 包含了一组具有马尔可夫性质的随机变量. 马尔可夫随机场(Markov Random Fields, MRF)是由参数 [公式] 表示, 其中 [公式] 是状态的集合, [公式] 是初始状态的概率, [公式] 是状态间的转移概率。一阶马尔可夫链就是假设 [公式] 时刻的状态只依赖于前一时刻的状态,与其他时刻的状态和观测无关。这个性质可以用于简化概率链的计算。使用类似性质作为假设的模型还有Bi-gram语言模型等.

从 朴素贝叶斯 到 隐马尔可夫模型

朴素贝叶斯分类器(NBs)假设条件独立性(朴素贝叶斯假设, Hand and Yu, 2001):

[公式]

在给定目标值 y 时,x的属性值之间相互条件独立。这样, 计算可以简化为

[公式]

朴素贝叶斯模型只考虑了单个输出变量y。如果要为一个观察序列 [公式] 预测对应的分类序列[公式] ,一个简单的序列模型可以表示为多个NBs的乘积。此时不考虑序列单个位置之间的相互依赖。

[公式]
此时每个观察值 [公式] 仅取决于对应序列位置的类变量 [公式] 。由于这种独立性假设,从一个步骤到另一个步骤的转换概率不包括在该模型中。然而这种假设在实践中几乎不会符合,这导致这种模型的性能很有限。

因此,比较合理的假设是观测序列在连续相邻位置间的状态存在依赖。要模拟这种依赖关系, 就要引入状态转移概率 [公式] , 由此引出著名的隐马尔可夫模型 Hidden Markov model, HMM, Rabiner (1989)。

HMM的参数 [公式] ,其中 [公式] 是隐状态(输出变量)的集合, [公式] 是观察值(输入)集合, [公式] 是初始状态的概率, [公式] 是状态转移概率矩阵 [公式][公式] 是输出观察值概率矩阵 [公式] 。在POS任务中, [公式] 就是观察到的句子, [公式] 就是待推导的标注序列, 因为词性待求的, 所以人们称之为隐含状态.

概括一下HMM设定的假设:
1. 假设每个状态仅依赖于其前一个状态, [公式]
2. 假设每一个观察值 [公式] 仅依赖于当前状态值 [公式] , [公式]

那么状态序列 [公式] 和观察序列 [公式] 的联合概率可以分解为
[公式]

从朴素贝叶斯, 到HMM有如下转换关系:

Diagram of the relationship between naive Bayes, logistic regression, HMMs, linear-chain CRFs, generative models, and general CRFs. image from: An Introduction to Conditional Random Fields, by Charles Sutton and Andrew McCallum

HMM的缺陷是其基于观察序列中的每个元素都相互条件独立的假设。即在任何时刻观察值仅仅与状态(即要标注的标签)有关。对于简单的数据集,这个假设倒是合理。但大多数现实世界中的真实观察序列是由多个相互作用的特征和观察序列中较长范围内的元素之间的依赖而形成的。而条件随机场(conditional random fiel, CRF)恰恰就弥补了这个缺陷.

从上图可以看到当HMM有了条件分布后,就变成了线性条件随机场 。

隐马尔可夫模型与最大熵马尔可夫模型

最大熵马尔可夫模型(Maximum Entropy Markov Models, MEMM)跟HMM的生成式概率图不同,MEMM对当前状态的判断依赖于前一时间步的状态和当前观察值的状态。

image from McCallum, A. (1909)

所谓"熵"就是信息论中的概念:
> Entropy: the uncertainty of a distribution.

量化Entropy: surprise.
Entropy = expected surprise

Event [公式] ,
Probability [公式] ,
"Surprise" [公式] ,
Entropy:

[公式]


熵最大的分布就是均匀分布,也就是每一个选项都一样,等于什么信息都没给。如果给了额外的信息,如约束,特征之后,熵就可以降低。

“最大熵”是指遵循最大熵原则:
> model all that is known and assume nothing about that which is unknown.

也就说, 如果给定了一组事实,我们最好选择一个符合这些事实的模型,剩余情况则尽可能地一视同仁不做任何区别对待。最佳的模型是符合训练数据衍生的约束条件的模型,同时尽可能少地做假设,也就是少做承诺,也就避免过拟合。

MEMM 把HMM中的转移概率和发射概率替换为一个概率:当前状态s依赖于前一个状态[公式] 和当前观察值o, [公式]

MEMM的训练思路是这样: 对每个状态 [公式] , 将训练数据分为<观察-目标状态>对 [公式] , 也就是把 [公式] 分成 [公式] 个分别训练的exponential model [公式] , 再通过最大化熵来训练exponential models, 换种说法叫logistic regression classifier.

用的约束条件是学习分布中每个特征 a 的期望值与训练数据的观测序列上每个特征的期望值相同. 满足这些约束的最大熵分布(Della Pietra,Della Pietra和Lafferty,1997)是唯一的,与最大似然分布一致,对每一个位置的状态 [公式] , 具有指数形式:
[公式]
其中 [公式] 是待估计的参数, [公式] 是归一化因子
[公式]
S是状态集.

如果把问题简化为线性的相邻依赖, 那么每一个状态 [公式] 仅依赖于前一个状态 [公式] . 用Y表达标签序列, 用X表达观察序列, 那么
[公式]
其中
[公式]

[公式]
MEMM将整体的概率分布分解为每一个时间步的分布之积,所以算loss只需要把每一步的交叉熵求和。只需要每一步单独执行softmax,所以MEMM是完全可以并行的,速度跟直接逐步Softmax基本一样。

虽然MEMM能克服HMM的很多弱点, 但是MEMM自身也有一个 **label bias** 问题, 就是标签偏差, 离开给定状态的转移仅相互对比,而不是与全局所有其他转移对比。转移分数是分别对每个状态的归一化, 这意味到达一个状态的所有质量必须在可能的后续状态之间分配。观察值可以影响哪个目标状态获得质量,但无法影响多少质量可以被传递。这会导致模型偏向输出选择较少的状态, 比如极端情况下, 在训练集中某个状态 [公式] 只发现了有一种可能的转移 [公式] , 那么状态 [公式] 别无选择,只能将所有质量传递给它的唯一的 transition output [公式]

MEMM和CRF

CRF再拥有MEMM的优点的同时, 克服了MEMM的缺点. CRF和MEMM的关键区别在于,MEMM使用每个状态的指数模型来确定给定当前状态的下一状态的条件概率,而CRF则使用一个指数模型来表示整个标签序列的联合概率, 这个概率条件依赖于给定的完整观察序列。因此,在不同状态下,不同特征的权重可以相互抵消。也就是说CRF是一个以观测序列X为全局条件的随机场.

如果把问题简化为线性链, CRF把Y看成一个整体,截至每一个时间步n, 通过统计所有特征可以得一个总分
[公式]
其中 [公式] 是转移矩阵

可以得到对应得概率是
[公式]
CRF的计算困难之处在于上式的分母项包含了所有可能路径 [公式] 的求和,搜索空间非常庞大.

线性链CRF和线性链MEMM比较, 区别仅在于分母(也就是归一化因子)的计算方式不同,CRF的是全局归一化的,而MEMM的是局部归一化的.

隐马尔可夫模型 到 Linear-Chain 条件随机场

HMM和CRF的对应关系类似于Naive-Bayes和Logistics regression, 都是生成式和判别式的对比. HMM则采用生成式方法进行标签生成, CRF将各种特征组合在一起判断标签. HMM可以推演出特定形式的CRF. 把上式的HMM改写成如下形式:

[公式]


HMM是生成式的, 借鉴Naive Bayes 到 logistics regression的方式, 通过引入特征函数这个概念, [公式] , 对于每一个 [公式] 跳转, 加入特征函数 [公式] , 对于每一个(状态-观察值)对 [公式] , 加入特征函数 [公式] . 以上特征函数统一表示为 [公式] , 那么可以进一步把HMM写成:

[公式]

可以得出条件概率 [公式]

[公式]

所以当联合概率 [公式] 以HMM的形式因式分解, 则关联的条件分布 [公式] 就是一种特定形式的 Linear-chain CRF.

Graphical model of the HMM-like linear-chain CRF. by Sutton, C. 2010

Linear Chain CRF

随机场, 可以看成是一组随机变量的集合(这组随机变量对应同一个样本空间)。当给每一个位置按照某种分布随机赋予一个值之后,其全体就叫做随机场。这些随机变量之间可能有依赖关系,一般来说,也只有当这些变量之间有依赖关系的时候,我们将其单独拿出来看成一个随机场才有实际意义。

如果给定的马尔科夫随机场(MRF)中每个随机变量下面还有观察值,我们要确定的是给定观察集合下,这个MRF的分布,也就是条件分布,那么这个MRF就称为 Conditional Random Fields (CRF)。它的条件分布形式完全类似于MRF的分布形式,只不过多了一个观察集合X。所以, CRF本质上是给定了条件(观察值observations)集合的MRF

1.特征函数的选择: 特征函数的选取直接关系模型的性能。
2.参数估计: 从已经标注好的训练数据集学习条件随机场模型的参数,即各特征函数的权重向量λ。
3.模型推断: 在给定条件随机场模型参数λ下,预测出最可能的状态序列。

HMM的生成式概率模型是 [公式] , 它的条件概率 [公式] 本质上就是选取了特定特征函数的CRF. 直接引用(Sutton, C. 2010)的定义:

An Introduction to Conditional Random Fields, by Charles Sutton and Andrew McCallum

CRF特征函数

在CRF中,首先需要定义特征函数.

然后为每个特征函数 [公式] 分配权重 [公式] , 权重是从数据中学习而来. 对 [公式] 个特征方程求和, 对序列每个位置 [公式] 求和: [公式]

CRF的每个特征函数都是一个输入的函数, 对应的输出是一个实数值(只是0或1)。例如, 选择特征函数 [公式] , 当且仅当 [公式] , 且第i个单词以“-ly”结尾; 否则为0. 如果与此特征相关的权重 [公式] 很大且为正,那么这个特征等同于说模型倾向于把以-ly结尾的单词标记为ADVERB。

通过指数化和归一化把这些得分转换为概率值: [公式]

通过恰当地设置特征函数, 就可以从CRF中构建出一个HMM. 在CRF的对数线性形式中, 设置权重为对应HMM(取对数后)的二元转换和发射概率: [公式][公式]

  • 对于每个状态 [公式] , 对应HMM的每个状态转换概率 [公式] , CRF定义一组特征函数为 [公式] 如果 [公式][公式] , 为这些特征赋予权重 [公式]
  • 对于每个状态-观察值pair, 对应HMM的每个发射概率 [公式] , CRF定义一组特征函数为 [公式] 如果 [公式][公式] , 赋予权重 [公式] .

如此, CRF计算的似然 [公式] 就精确地正比于对应的HMM, 也就是说, 任意的HMM都可以由CRF表达出来.

Linear-Chain CRF 特征函数的定义非常灵活, 不同的形式用于不同的功能. 比如对于HMM而言, 不管输入怎么变, 状态转换 [公式] 的分值是一样的 [公式] ; 那么在CRF中, 我们通过增加这样一个特征 [公式] , 使 [公式] 分值依赖于当前的观察序列:

from: An Introduction to Conditional Random Fields, by Charles Sutton and Andrew McCallum

这种特征常常用于文本处理中, 比如:

  1. 一个句子提供观察值 [公式]
  2. 对应的标签 [公式]

需要指出的是在线性链CRF的定义中每个feature的依赖值并不仅限于当前和上一时间步的观察值. 事实上, 因为CRF并不表达变量之间的依赖关系, 我们可以让因子 [公式] 依赖于整个观察向量 [公式] 并保持线性图结构, 这时候的特征函数就是 [公式] , 可以自由检视所有输入变量 [公式] ,

from: An Introduction to Conditional Random Fields, by Charles Sutton and Andrew McCallum

这个特性可以拓展到所有CRFs而不仅限于线性链CRF.

CRF比HMM更强大, 更泛用

  1. CRF可以定义更广泛的特征函数:HMM受限于相邻位置的状态转换(二元转换)和发射概率函数,迫使每个单词仅依赖于当前标签,并且每个标签仅依赖于前一个标签。而CRF可以使用更多样的全局特征。例如,如果句子的结尾包含问号,则可以给给CRF模型增加一个特征函数,记录此时将句子的第一个单词标记为VERB的概率。这使得CRF可以使用长距离依赖的特征
  2. CRF可以有任意的权重值:HMM的概率值必须满足特定的约束, [公式][公式] , 而CRF的权重值是不受限制的。

CRF既具有判别式模型的优点,又考虑到长距离上下文标记间的转移概率,以序列化形式进行全局参数优化和解码的特点,解决了其他判别式模型(如MEMM)难以避免的标记偏见问题。

 

CRF与Logistic Regression

CRF的概率计算与Logistic Regression (LR)的形式类似,
[公式]

[公式]
在LR中, [公式] 是一个特征, [公式] 是与该特征相关的权重。提取的特征是二元特征,取值0或1,通常称为指示函数(indicator func)。这些特征中的每一个都由与输入x和分类y相关联的函数计算。

实际上,CRF基本上就是逻辑回归的序列化:与逻辑回归是用于分类的对数线性模型不同,CRF是标签序列的对数线性模型。

谈谈生成式模型和判别式模型

Diagram of the relationship between naive Bayes, logistic regression, HMMs, linear-chain CRFs, generative models, and general CRFs. image from: An Introduction to Conditional Random Fields, by Charles Sutton and Andrew McCallum

再祭上这张图, 第一排都是生成式的, 第二排都是判别式的.

在朴素贝叶斯与Logistic Regression, 以及HMM和CRF之间, 又有生成式和判别式的区别.

  • 生成式模型描述标签向量y如何有概率地生成特征向量x, 即尝试构建x和y的联合分布 [公式] , 典型的模型有HMM,贝叶斯模型,MRF。生成式模型
  • 而判别模型直接描述如何根据特征向量x判断其标签y, 即尝试构建 [公式] 的条件概率分布, 典型模型如如LR, SVM,CRF,MEMM等.

原则上,任何类型的模型都可以使用贝叶斯规则转换为另一种类型,但实际上这些方法是不同的. 生成模型和判别模型都描述了 [公式] 的概率分布,但努力的方向不同。生成模型,例如朴素贝叶斯分类器和HMM,是一类可以因式分解为 [公式] 的联合分布, 也就是说,它们描述了如何为给定标签的特征采样或“生成”值。生成式模型从统计的角度表示数据的分布情况,能够反映同类数据本身的相似度,不关心判别边界。生成式模型的优点是:

  • 实际上带的信息要比判别模型丰富, 研究单类问题比判别模型灵活性强
  • 能更充分的利用先验知识
  • 模型可以通过增量学习得到

缺点也很明显:

  • 学习过程比较复杂;
  • 在目标分类问题中准确度不高

而判别式模型, 比如 LR, 是一系列条件分布 [公式] . 也就是说,分类规则是直接建模的。原则上,判别模型也可通过为输入提供边际分布 [公式] 来获得联合分布 [公式] ,但很少需要这样。条件分布 [公式] 不包括 [公式] 的信息,在分类任务中无论如何也用不到。其次,对 [公式] 建模的困难之处在于它通常包含很多建模难度较高的有高度依赖性的特征。判别式模型寻找不同类别之间的最优分类面,反映的是异类数据之间的差异。优点是:

  • 分类边界更灵活,比使用纯概率方法或生产模型得到的更高级。
  • 能清晰的分辨出多类或某一类与其他类之间的差异特征
  • 在聚类、viewpoint changes, partial occlusion and scale variations中的效果较好
  • 适用于较多类别的识别

缺点是:

  • 不能反映训练数据本身的特性。
  • 能力有限,可以分类, 但无法把整个场景描述出来。

用 TensorFlow 实现 Bi-LSTM + CRF

很多序列标注问题, 如命名实体识别, 如果预先使用 Bi-LSTM 解码序列, 经过 Bi-LSTM 解码后的每一步隐含状态, 包含了很多信息, 包括中长距离依赖和语法解析等, 把这些隐含状态作为 CRF 的特征输入 CRF 层来解码, 可以得到一条最大概率的序列标注路径.

比如序列经过某个模块(如CNN, BERT, 或者单纯是Embedding层) 解码后的 output 输入给Bi-LSTM 层lstm_layer , 再把双向LSTM层的每一步隐含层作为特征输入给CRF层. TensorFlow中要使用CRF 需要用到的函数是tf.contrib.crf.crf_log_likelihood 和 tf.contrib.crf.crf_decode :

output_layer = lstm_layer(output, _true_length, is_training)
with tf.variable_scope("loss"):
    output_layer = tf.reshape(output_layer, [-1, hidden_size])
    logits = tf.matmul(output_layer, output_weights, transpose_b=True)
    logits = tf.nn.bias_add(logits, output_bias)
    logits = tf.reshape(logits, [-1, FLAGS.max_seq_length, num_labels])

    if FLAGS.use_crf:
      transition_params = tf.get_variable(
          "transition_params",
          shape=[num_labels, num_labels],
          initializer=tf.zeros_initializer())
      log_likelihood, transition_params = tf.contrib.crf.crf_log_likelihood(
          inputs=logits,
          tag_indices=labels,
          transition_params=transition_params,
          sequence_lengths=_true_length)      
      # NOTE CRF decode, decode_tags [batch_size, max_seq_len] 最大概率标注路径
      decode_tags, best_score = tf.contrib.crf.crf_decode(potentials=logits, 
          transition_params=transition_params, 
          # NOTE sequence_length: [batch_size] vector of true sequence lengths.
          sequence_length=_true_length)
      # A [batch_size] Tensor containing the -log_likelihood of each example
      per_example_loss = -log_likelihood
      predictions = decode_tags

CRF++

CRF++利用特征模板来批量自动化生成 CRF 特征, 参考 CRF++模型格式说明-码农场

比如

# Unigram
U00:%x[-2,0]
U01:%x[-1,0]
U02:%x[0,0]
U03:%x[1,0]
U04:%x[2,0]
U05:%x[-2,0]/%x[-1,0]/%x[0,0]
U06:%x[-1,0]/%x[0,0]/%x[1,0]
U07:%x[0,0]/%x[1,0]/%x[2,0]
U08:%x[-1,0]/%x[0,0]
U09:%x[0,0]/%x[1,0]
 
# Bigram
B

T**: %x[#, #]中的T表示模板类型(UB), 两个#分别表示相对的行偏移与列偏移。

Unigram template: 用于生成 unigram features. %x[#, #]生成一个 CRF 中的点(state)函数: f(s, o), 其中s为t时刻的标签(output),ot时刻的上下文.

  • 比如 [公式] 是由U02: %x[0, 0]在输入文件的第一行生成的点函数. 大致意思是, 如果第一个输入是'今', 而且其对应的label是'B-TIME', 那么返回1 , 也就是

Bigram template: 用于生成 bigram features, %x[#, #] 生成一个 CRF 中的边(Edge)函数 [公式] , 与 Unigram 类似, 只是还要考虑到t – 1时刻的标签,

  • 模板B默认生成 bigram 特征 [公式]

 

参考资料

  • 1
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值