从HMM到CRF到LSTM+CRF

本文深入探讨了从马尔科夫模型到隐马尔科夫模型(HMM),再到条件随机场(CRF)的理论,特别聚焦于LSTM+CRF模型。文章介绍了HMM的基本概念,包括前向算法和维特比算法,并详细阐述了CRF的矩阵表示和线性链CRF。接着,文章讨论了LSTM+CRF模型,解释了如何结合LSTM的上下文信息和CRF的序列约束进行序列标注。此外,还提供了LSTM+CRF在命名实体识别(NER)中的应用实例和TensorFlow的CRF层实现解析。
摘要由CSDN通过智能技术生成

  在实习的时候有用到LSTM+CRF,但以前对HMM、CRF理论了解的不多,导致自己在理论方面有所欠缺。因此特此写一篇从HMM到CRF再到LSTM+CRF中的非纯理论性质的文章,算是一个阶段性笔记和总结。
  本文的侧重点还是以LSTM+CRF为主,对于LSTM+CRF中依赖到的HMM、CRF中的概念会做详细说明,主要包含几个部分:

  1. 马尔科夫模型
  2. 隐马尔科夫模型(HMM)
    1. HMM中的前向算法
    2. 维特比算法(viterbe)
  3. 条件随机场(CRF)
    1. CRF中的矩阵表示
    2. CRF中的前向算法
  4. LSTM+CRF模型
    1. LSTM+CRF中CRF层
    2. 源码解析

本文长而杂,阅读须谨慎。

0. Markov Model

  之前也看过隐马尔科夫模型,也知道它有转移矩阵A、观测矩阵B。但是看完没多久又忘了,又说不出。所以还是概念不清楚。这里再巩固下。

在隐马尔科夫模型前,先忘掉HMM中的状态或观测的概念,先引入马尔科夫模型的概念。

  假设我们有一个随机变量序列 X=(X1,X2,...,XT) X = ( X 1 , X 2 , . . . , X T ) , 它们的取值都来自一个状态集合 S={ s1,s2,...,s|S|} S = { s 1 , s 2 , . . . , s | S | } ,将状态值带入到随机变量序列中我们就得到了一个长度为 T T 的状态序列。以天气系统为例, S = { s u n , c l o u d , r a i n } |S|=3 | S | = 3 ,当观测长度为 T=3 T = 3 时,可能的一个状态序列为 { X1=ssun,X2=scloud,X3=srain} { X 1 = s s u n , X 2 = s c l o u d , X 3 = s r a i n }

上面的状态序列,在马尔科夫模型中做了两个假设:

  1. Limited Horizon:

    P(St+1=skX1,X2,...,Xt)=P(St+1=skXt) P ( S t + 1 = s k ∣ X 1 , X 2 , . . . , X t ) = P ( S t + 1 = s k ∣ X t )

    即下一个状态的输出概率只与上一个状态有关

  2. Time Invariant

    P(St+1=skXt)=P(X2=skX1) P ( S t + 1 = s k ∣ X t ) = P ( X 2 = s k ∣ X 1 )

    即状态 St+1 S t + 1 St S t 输出概率之间的关系与时刻t无关,不会应为时刻不同而改变。

  在马尔科夫模型中,为了确定状态到状态的转移概率,因此我们需要定义状态转移矩阵 A A ,而在状态到达初始时刻则需要定义初始状态概率向量 π

下面以一个例子说明马尔科夫模型:

(1) 记状态序列为

S={ 0,1} S = { 0 , 1 }

(2) 初始状态概率为

π={ π1,π2}={ 0.2,0.8} π = { π 1 , π 2 } = { 0.2 , 0.8 }

(3) 转移矩阵为

A=XtXt+10100.30.610.70.4 A = X t ∖ X t + 1 0 1 0 0.3 0.7 1 0.6 0.4

对应的转移状态图为

这里写图片描述

则状态序列为1011的概率为:

P(X1=1,X2=0,X3=1,X4=1)=π1×P(X2=0X1=1)×P(X3=1X2=0)×P(X4=1X3=1)=0.8×0.6×0.7×0.4=0.1344 P ( X 1 = 1 , X 2 = 0 , X 3 = 1 , X 4 = 1 ) = π 1 × P ( X 2 = 0 ∣ X 1 = 1 ) × P ( X 3 = 1 ∣ X 2 = 0 ) × P ( X 4 = 1 ∣ X 3 = 1 ) = 0.8 × 0.6 × 0.7 × 0.4 = 0.1344

  从上面这个例子可以看到,马尔科夫模型只能解决简单的状态转移问题。也即我观测到了一个状态序列,同时我知道状态间如何转移,那么我就知道整个状态产生的概率。但如果我们无法观测到这个状态序列,该怎么办?

  一个典型的例子就是Ice Cream Climatology问题,我想预测一段时间的气候是HOT还是COLD,但是我我无法观测到这段时间的气候是什么,我只能观测到我每天吃了多少个冰激凌。因此对我来说,气候就是个隐含序列,真正的观测序列是我这段时间吃的冰激凌数目序列。

  另一个例子就是NLP中词性标注(POS Tagging)问题,我有两个序列,一个是句子序列,一个是句子中每个词的词性构成的标记序列。但实际中我通常只有句子序列,在预测前词性无法得知,因此词性就是个隐含序列。

  当实际问题中即包含观测序列又包含隐含的状态序列时,就需要隐马尔科夫了。

1. Hidden Markov Model

  隐马尔科夫模型包含两个序列,一个状态序列 Q={ q1,q2,...,qn} Q = { q 1 , q 2 , . . . , q n } ,一个观测序列 O={ o1,o2,...,on} O = { o 1 , o 2 , . . . , o n } ,每个状态 qi q i 生成一个观测 oi o i 。在隐马尔科夫模型中,做了一个输出独立的假设:

P(otiT,oT,iT1,oT1,...,it+1,ot+1,it,it1,ot1,i1,o1)=P(ot|it) P ( o t ∣ i T , o T , i T − 1 , o T − 1 , . . . , i t + 1 , o t + 1 , i t , i t − 1 , o t − 1 , i 1 , o 1 ) = P ( o t | i t )

即t时刻的观测值只依赖于t时刻的状态,与其他时刻状态无关。符号系统我沿用了《统计学习方法》。

  隐马尔科夫模型同样需要初始向量 π π ,状态转移矩阵 A A 。由于我们多引入了一个观测序列,因此需要额外定义一个观测概率矩阵 B ,用于描述某个状态 qt q t 产生某个观测值 ot o t 的概率。 λ=(A,B,π) λ = ( A , B , π ) 即模型的参数。

在隐马尔科夫模型中,有3个基本问题,这里我主要描述其中的两个:

(1) 概率计算问题:给定模型 λ=(A,B,π) λ = ( A , B , π ) 和观测序列 O={ o1,o2,...,on} O = { o 1 , o 2 , . . . , o n } ,求观测 O O 出现的概率 P ( O | λ )

(2) 预测问题:给定模型 λ=(A,B,π) λ = ( A , B , π ) 和观测序列 O={ o1,o2,...,on} O = { o 1 , o 2 , . . . , o n } ,求条件概率 P(IO) P ( I ∣ O ) 最大的隐含状态序列 I={ ii,i2,...,iT} I = { i i , i 2 , . . . , i T }

1.1 前向算法

  求观测序列 O O 出现的概率的一种方式是求出所有状态序列 I 产生观测序列 O O 的概率。这里要求出所有可能的状态序列是不可行的。思路是对的,但是有种更高效的计算方式。记前向概率为:

α t ( i ) = P ( o 1 , o 2 , . . . , o t , i t = q i λ )

  表示到t时刻部分观测序列为 o

  • 16
    点赞
  • 97
    收藏
    觉得还不错? 一键收藏
  • 7
    评论
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值