hmm 求隐藏序列_一文说懂HMM到CRF的内在关系

7faa4c3334f1b09c9e52be201cdd16ec.png

这篇文章都讲些啥?

关于HMM和CRF的文章很多,但是大多数都是一上来就直接讲概率学习问题、预测问题。而没有交代这两个算法适用于解决哪些问题,有什么内在的关系,算法又是依据什么思路想出来的。这篇文章就试图回答这些问题。文章会讲解模型训练的一些计算细节和训练思路,但更多的是想通过理清这些过程,来实现从具象到抽象的理解过程。如果直接上来就讲抽象的认识,记忆和理解都会不够深刻。

一、HMM的适用场景和模型训练

在NLP任务中,词性识别是很早期的一个经典任务,HMM就是为了解决这个问题而诞生的,当然它也适用于所有具有隐状态的序列事件,通过观测序列来找出序列中各个事件背后的隐状态。

HMM和CRF都是概率模型和图模型的结合。HMM由贝叶斯模型发展而来,其精华在于能对具有隐状态的事物的变化过程建模,它的局限性在于当利用当前事物的状态来预测隐状态时,假设太多,一是假设事件的观测值只和当前的隐状态有关,二是假设事件的隐状态只和前一个事件隐状态有关。但是事实上并不是这样。比如就文本而言,一个词的生成可能和前面的好几个隐状态都有关系,像介词后面会加名词,那么介词这个隐状态就影响到了文本到底会生成哪一个名词。

下面简单交代一下使用HMM主要需要解决的三大问题。它们分别是训练模型时的参数学习问题,然后运用模型时的概率计算问题和预测状态问题。每个问题中具体参数代表的含义,以及计算过程大家可以参考别的帖子,毕竟这方面已经有很多很好的帖子,重新把已有的东西再说一遍也没有意义。

1.1 模型学习问题

已知观测序列

,估计模型λ=(A,B,π)的参数,使得在该模型下观测序列概率P(O|λ)最大。这里有两种方法,有监督和无监督方法。有监督就是通过人工将文本序列背后的隐状态,比如每个词是哪种词性都标识出来,只需要统计个数,就能够得到(A,B,π)这三个参数。而无监督方法则是EM算法求解得到参数,具体过程可以参考:
一只懒羊:一文说懂EM算法及其在HMM和GMM中的应用​zhuanlan.zhihu.com

1.2 模型概率计算问题

给定了模型λ=(A,B,π)和观测序列

,计算该观测序列任意长度出现的概率。我们可以使用直接计算法,列举所有可能的长度为T的状态序列
,然后求各个状态序列
和观测序列
的联合概率P(O,I|λ),但是这样的计算复杂度会很高。既然不想列举所有的状态,但是又不知道每个文本对应的隐状态是什么,那么就在每一步都考虑所有的状态。这就是前向和后向算法。他们的区别只在于计算概率的方向不同,前者是从序列的头开始计算概率,后者从序列的尾部开始计算。

305b20e812c93bbee2862e0a72f5b83f.png

为了简单说明,我们假设事件只有2种隐状态A和B,从时刻t到时刻t+1,假设时刻t+1隐状态为

,那么从观测序列得到状态A的概率为
,考虑到时刻t也有两种隐状态
,都可能导致
,所以把他们分别相乘然后相加得到
,那么再对
做相同的操作,得到
,最后两者相加就是目前长度下文本的概率,即P(O|λ)。

1.3 预测问题

所谓预测问题,就是已知模型和观测序列

,求对给定观测序列条件概率P(I|O)最大的状态序列
在这里我们先来想一下动态规划的精髓,什么情况下能用动态规划。那就是全局最优路径一定包含局部最优路径。这是什么意思呢?依然假设事件有2种隐状态A和B,时刻t的两种隐状态
,都可能到达
,即文本序列中,当前时刻的任意隐状态都可以到达下一时刻的任意隐状态,这时候路径是连通的,也就意味着算法可以找到局部最优路径,也就意味着可以用动态规划,而用于预测问题中(inference)的动态规划就是维特比算法!

一个反例是这样:

a26486cbae02d3e31bc638d56c83f402.png

如果路径如上图所示,第二层的节点和第三层的一部分节点之间没有连通(节点间的转移概率未知),那就无法使用动态规划了。而现在的情况如下图所示,每一层节点之间状态转移的概率都已知。

f229af97ccae8102ba4e5878d9de9d78.png

比如在考虑t+1时刻的状态A时,会计算t时刻的各个状态,在我们例子中是

,到状态
的概率,找出最大概率是由t时刻的哪个状态得到的,从而确定这两个时刻之间的路径
。这样沿着序列不断的计算每个状态的概率,我们可以得到整个序列前后两个时刻之间的路径,通过找到序列结尾的最大概率的状态,我们可以溯源前一个时刻的状态,因为之前在计算每个状态的概率时就已经保存了得到最大概率的路径,从而溯源得到整个序列的状态。
维特比算法大大改善了算法的时间复杂度,原来的穷举法时间复杂度为O(2^N),N是文本序列的长度,而维特比的时间复杂度为O(N*(m^2)),其中m表示隐状态的数量,之所以是m^2,是因为维比特每次只需要考虑两个观测变量之间的隐变量的转移概率

具体计算过程可以参考以下的链接:

隐马尔科夫模型HMM(四)维特比算法解码隐藏状态序列 - 刘建平Pinard - 博客园​www.cnblogs.com

二、从HMM到MEMM,再到CRF

2.1 CRF是怎么来的?

我们知道HMM的缺陷在于它假设某个观测结果只受当前隐状态的影响,那么我们能否改变模型,让某个观测结果能受到多个隐状态的影响呢?于是我们尝试将模型变成下面的模型:

0986aaf3aaefaabf3dd3efaac9ae43fb.png

这样一来,我们原来的表达式

将变成下面下面的式子:

对于式子中的每一项

,如果使用有监督方法去统计的话,很有可能无法出现概率为0的情况,而如果使用EM算法的话,即便计算出
,它也无法计算出
。因此我们想是否能将模型转变一下。

19bd6e6a10ac2e44d48ad53221470778.png

也就是MEMM模型,它改变了依赖关系,认为隐状态取决于前一个时刻的隐状态和整个观测序列,那么模型表达式将变成

。假设我们统计了给定当前隐状态和观测序列,转移到下一时刻每个隐状态的概率,如下图所示,那么我们通过连乘就能找到观测序列的最大概率。这里不同于HMM,并没有发射概率,因为观测序列和隐状态一起用于统计状态转移的概率值了。

4b0d7429281df94456c251fa38e9c738.png

这样的计算方法会有什么问题呢?我们可以看到隐状态1只有两种转移可能,而隐状态2却有5种转移可能,而各种转移概率之和需要等于1,这使得在计算连乘时,隐状态2天然就没有优势,无法准确的反映出真实的转移概率。这就是所谓的标签偏置问题。所以我们希望用分数,而不是概率来衡量隐状态之间转移的可能性。因此我们将模型改变成

e9c04e39367085e2a26b45a2ee4fd4da.png

这就是我们的CRF模型!CRF考虑的是节点之间双向联系的紧密程度,而HMM和MEMM考虑的则是单向的依赖关系。

2.2 CRF的参数学习问题和隐状态预测

那么节点间的联系怎么衡量呢,在这里我们使用无向图的对数线性模型(log-linear model)来衡量节点间的联系。具体表达式如下:

aa34ca88ea21a4537eca2f6762037e9a.png

当我们不考虑序列时,我们在上图中衡量节点关系的对数线性函数

,其实就是逻辑回归函数,在逻辑回归函数场景中,可以认为这是在判断一个样本比如
,是否和另一个类比如
有关系,有关系则属于这个类,标记为1,没关系则不属于这个类标记为0,每一个样本由J个特征。之所以叫对数线性函数,是因为取了log以后,函数就会变成线性的形式。

当我们考虑时序时,由于将无向图中的节点分成了几个子团,在CRF模型中,我们将整个观测序列

作为一个子团,比如下图红色虚线的三个子团。因此对数线性函数有两个维度,一个是子团的数量T,一个是每个子团特征的数量J。我们现在有了计算子团之间紧密程度的函数,但我们最终要计算得到的是概率值,因此我们需要除以分母
进行归一化。

89e306c196c0669746a26683f99a5eed.png

再仔细看特征函数

,它衡量的是子团中两个隐状态之间以及隐状态和观测序列之间的联系紧密程度,因此我们需要分别定义转移特征和状态特征去表示。建模的具体公式为:

  • 为i处的转移特征,对应权重
    ,每个
    都有J个特征,转移特征针对的是前后token之间的限定。比如:

  • 为i处的状态特征,对应权重
    ,每个tokeni都有L个特征,比如:

2.2.1 参数学习问题

得到了模型的表达式,我们就需要求解参数,类似于HMM使用EM算法求解参数,只不过CRF是使用求导的方法求转移特征和状态特征的权重。

8cdc8a67d0021e5d01081ee66ac61cf3.png

通过计算可知,要求出对

的导数,需要先求出
的期望E,那么就需要求出式子3,关键就在于求分子和分母,我们先看分母的i怎么求
,也就是所有可能的隐状态序列的求和。那么这里就可以用前向算法来计算,类似于HMM中的概率计算,求t时刻所有特征到t+1时刻的某一特征的状态转移分数,并对t+1时刻的其他隐状态做相同的操作,直到计算到最后的时刻,然后将最后时刻所有隐状态的分数相加,就得到了

那么分子怎么求呢?我们求导的是某个子团内部两个隐状态之间的特征权重,因此分子计算只涉及到两个相邻隐状态,这也是下图中从(2)到(3)转换的依据。

876633fb933f5d78e6d3fe8f1bdb2396.png

而第(3)到第(4)步中两个求和符号

的出现,表示在这两个隐状态确定时,序列中别的状态可能的任何值,需要对所有的取值情况求和。对这两个隐状态之前的概率需要用前向算法计算,它们之后的概率则需要用后向算法计算,而它们之间的概率则使用打分函数即
计算,最后三者相乘除以上面求得的
,才是概率值。

2.2.2 隐状态预测问题

这里和HMM的预测问题类似,都是使用维特比算法来寻找前一个最佳隐状态,通过计算出最大概率来回溯隐状态。

三、HMM与CRF在各方面的对比

3.1 计算上的区别

在HMM单向依赖关系下,使用的是不同隐状态之间的转移概率,以及发射概率来分别表示观测节点和隐状态之间、隐状态和隐状态之间的依赖程度,所以这是我们要求的参数。而在CRF把整个观测序列当做一个节点,考虑这个节点和两个隐状态以及隐状态之间双向的联系程度,这个联系程度使用一个打分函数来衡量,而这个打分函数则需要用多个维度的特征,所以每个特征的权重w是CRF要求的参数。

3.2 适用场景上的区别

HMM模型是一个有向图,有向图即节点之间有明确关系的图,而CRF是无向图,无向图即节点间并没有明确的关系,只知道相互有关联,并且整个图中的节点根据一些内在的性质能被划分为不同的子团。此外,无向图更有利于优化模型,比如上面的MEMM由于不同的隐状态转移的状态数量会不同,概率需要归一化,造成了计算上的不合理,而使用CRF因为约束更宽泛,可以使用更为一般的函数来表示两个隐状态之间的关系。

讲到这里,我们下次在面对问题做模型选择的时候,就应该考虑这个场景的事件间关系是否明确,比如是否单向依赖,某个事件的出现是否只和前一个事件相关,还是和别的所有事件都相关,整个场景属于无向还是有向图。从而决定使用什么模型来解决问题。

3.3 两个模型之间的联系

HMM其实是CRF的特殊形式,CRF的一般性体现在两点,一是CRF考虑了多个特征值,并且用分数来衡量特征值,而非像HMM使用概率衡量。二是CRF考虑了整个观测序列(子团的构成部分)来决定当前的隐状态,而非像HMM只使用当前的观测状态。

如果CRF模型中的

取对应HMM中的概率值,且f特征只考虑相邻两个观测值是否相连,而不考虑别的特征,即f函数的结果只取0或1,那么CRF就退化成了HMM模型。

四、关于生成式和判别式模型

讲完了HMM和CRF,我们回过头来看一下文章的头图,HMM是生成式模型,CRF是判别式模型,那么这两个模型的定义是什么,又有什么区别呢?我们用HMM和CRF做例子来详细说明

4.1 生成式模型和判别式模型的区别

生成式模型的表达式为

,y表示标签,在HMM模型中的
就是
就是
,事实上这里只用到了
中的参数B和π,也就是初始矩阵和发射矩阵),而
,这部分使用了
中的参数A,也就是转移矩阵。在计算概率之前,我们需要先学习参数,从而计算出
这个离散的概率分布。有了概率分布,我们就可以从中生成数据,这就是生成式模型“生成”二字的含义。再比如高斯混合模型中,我们通过学习得到分模型,即男女生的正态分布模型,这里的模型时连续的模型,通过这两个模型采样生成男生和女生的数据。

而判别式模型的表达式是

,顾名思义,即给定一些事物的特征,模型来判定这个事物属于什么事物。比如根据给定的文本,我们可以获得其特征,然后输入CRF模型中,获得文本的隐状态序列。判别式模型适用于拥有大量数据的场景,并且只做判定,所以准确率更高,而生成式模型由于可以生成数据,可以用于数据量不大的场景,当然生成式模型也可以做预测,但是准确率没那么高。

4.2 生成式模型和判别式模型的联系

生成式模型可以表示成

,也可以表示成
,后者的
就是判别式模型,所以说生成式模型可以转换成判别式模型,用于做分类(判别)任务。
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值