hmm 求隐藏序列_机器学习中的概率图模型(HMM&MEMM&&CRF)

概率图模型

概率图模型中,样本由公式G=(V,E)建模表示:

其中V表示节点,即随机变量,E表示边,即概率依赖关系。

概率图模型可以分为两种:有向图和无向图。

有向图

有向图联合概率为:

b30b93370f7ba826176ca8860b97232b.png

94506a30e0cf5153caf807b880e76993.png

无向图

无向图求联合概率需要用到因式分解,即有若干个最大团(最大团中的结点相互联通)的乘积组成。

ec62e3ef6b7cd54a1e03a99d2fd599ac.png

c表示最大团的个数,对每个最大团求其势函数,并累乘。Z(x)是规范化因子,这个怎么计算的呀?

生成模型与判别模型区别

判别模型直接对P(Y|X)建模,就是根据X所提供的特征找到一个复杂的映射关系,与y进行映射。

  1. 对 P(Y|X) 建模
  2. 对所有的样本只构建一个模型,确认总体判别边界
  3. 观测到输入什么特征,就预测最可能的label
  4. 另外,判别式的优点是:对数据量要求没生成式的严格,速度也会快,小数据量下准确率也会好些。

生成模型学习到的是X与Y的联合模型P(X, Y), 在训练过程中只对P(X, Y)建模

1.对 P(X, Y) 建模
2.学习的是整体的分布,没有什么判别边界。
3.生成式模型的优点在于,所包含的信息非常齐全,整个数据集的分布都可以学到。

4、特点:生成式模型需要非常充足的数据量以保证采样到了数据本来的面目,所以速度相比之下,

代表:Naive Bayes(朴素贝叶斯):P(X|Y) = P(X1) P(X2) ... P(Xn)

朴素贝叶斯概率图模型

6ff4bf98a9541882c7914757471a9f99.png
朴素贝叶斯概率图模型

b9d33cd613b44ca40d9e0cf6ca60f113.png
判别模型与生成模型图

隐马尔可夫模型

定义

隐马尔可夫是关于时序的概率模型。描述有一个隐藏的马尔可夫链随机生成不可观测的状态随机序列(状态序列),再由各个状态生成一个观测从而产生观测随机序列(观测序列)。

隐马尔可夫模型由初始概率分布状态转移概率分布以及观测概率分布确定。

020184abc17aa3067b227572e8d0c262.png

隐马尔可夫模型满足:

1、齐次一阶马尔可夫假设:一阶马科夫指在t时刻的状态只依赖于前一时刻的状态,与其他时刻的状态和 观测无关,齐次是说任意相邻两个相邻时刻之间转移的概率分布是一致的。

2、观测独立假设:即任意时刻的观测值依赖于该时刻的状态,给定某时刻状态后,该时刻的观测值与其他时刻的观测值是相互独立的。

模型运行过程

1、学习训练过程:HMM训练过程,就是找出数据的分布情况,也就是模型参数的确定。主要就是根据观测结果,估计参数,使得观测序列概率最大。

方式:

监督学习方法:数据中既包含状态序列也包含观测序列,可以使用极大似然估计。

其本质就是基于统计的方式统计每种状态转移以及发射概率,还有初始概率。

非监督方式:采用EM方式,先求期望,在期望函数确定下求最大值下的参数,用这个参数更新。

2、序列解码(标注):学习完参数后,也就确定了一个HMM模型,这个模型是对这一批全部数据进行训练得到的参数。

解码问题就是根据观测序列找到一条隐状态序列,条件是这个隐状态序列的概率最大。本质就是有向图求最大路径问题,用维特比算法,基于动态规划方式跟新每个时刻下的所有状态的最大概率。

3、序列概率过程 :给定模型参数,也就是确定完模型,输出每个观测序列的概率,P(O| r)。方法有前向算法、后向算法。

最大熵马尔可夫模型(MEMM)

MEMM是判别模型。

MEMM打破了HMM的观测独立假设【其实我也不太懂,这个需要看一看】,在MEMM中,标注状态 Ii 、 ,不仅和当前状态(观测)Oi相关,还跟前面的标注 Ij 相关。

MEMM允许“定义特征”,直接学习条件概率

4bde0b043ed057baf2db4dab21e8b87a.png

这部分是归一化, 且是局部归一化,只对当前状态和输入如何选择下一个状态归一化

P(Ii | li-1, oi)是特征函数,特征函数是需要去定义的;

lambda 是特征函数的权重,这是个未知参数,需要从训练阶段学习而得。

总体上,MEMM建模公式如下:

ade5ad0391f3090c04a46c74a07ba4a4.png

MEMM概率图:

4b8efe77f0e38175290e35234427217a.png

注意:

1、不满足观测独立假设

2、MEMM是判别式

3、MEMM流程:

step1. 先预定义特征函数
step2. 在给定的数据上,训练模型,确定参数,即确定了MEMM模型
step3. 用确定的模型做序列标注问题或者序列求概率问题。

缺点:产生标注偏置

原因:局部归一化

现象就是:假设状态A到B只有一条路径,也就是A到B状态转移100%,此时不论B的观测是什么,总是会得到一样的结果,也就是忽略观测输入,只考虑状态转移。用下面的话说就是,MEMM倾向于选择拥有更少状态的转移。

1. 现象
是从街货上烤过来的……

40f5d956336354f62f6c730b750abc17.png

!img](https://pic4.zhimg.com/80/v2-40f9945cdffb12cfec84bebc7b7e3be5_hd.jpg)

用Viterbi算法解码MEMM,状态1倾向于转换到状态2,同时状态2倾向于保留在状态2。 解码过程细节(需要会viterbi算法这个前提):
P(1-> 1-> 1-> 1)= 0.4 x 0.45 x 0.5 = 0.09 , P(2->2->2->2)= 0.2 X 0.3 X 0.3 = 0.018, P(1->2->1->2)= 0.6 X 0.2 X 0.5 = 0.06, P(1->1->2->2)= 0.4 X 0.55 X 0.3 = 0.066
但是得到的最优的状态转换路径是1->1->1->1,为什么呢?因为状态2可以转换的状态比状态1要多,从而使转移概率降低,即MEMM倾向于选择拥有更少转移的状态。 2. 解释原因
直接看MEMM公式:
求和的作用在概率中是归一化,但是这里归一化放在了指数内部,管这叫local归一化。 viterbi求解过程,是用dp的状态转移公式(MEMM的没展开,请参考CRF下面的公式),因为是局部归一化,所以MEMM的viterbi的转移公式的第二部分出现了问题,导致dp无法正确的递归到全局的最优。

条件随机场

CRF是在给定随机变量X的条件下,Y的马尔可夫随机场。条件说明这是一个判别式模型,随机场是指无向图

马尔可夫随机场

广义的CRF的定义是: 满足

4701eff34363b4a28d31327a44f08a22.png

的马尔科夫随机场叫做条件随机场(CRF)。

线性链随机场

满足马尔可夫性

8bbb9e814f32a82210076a922d468e10.png

无向图联合概率分布因式分解:

ca410b625ed6a8438d65e60d29d75f5a.png

在线性链CRF示意图中,每一个对相邻的 i 状态为一个最大团,c是最大团的个数,总数是T序列长度,每个团的势函数自己定义,我们用的是状态转移函数和状态函数。

CRF建模公式如下:

5b7141e5fd8d0c2b6ab20fa8e88d81ef.png

特征函数

特征函数详细解释见这里

724d504630cdeddea8670c1bceba4ebb.png
合并状态转移函数和状态函数

3c240e0f96794aa1f369cda4d84cc9a8.png
特征函数

63548a96f55a2ff9a24e037bc5a0821f.png
这里是值对单独一个x,不是O,去了一个T的累加

模型的工作流程,跟MEMM是一样的:

  • step1. 先预定义特征函数
  • step2. 在给定的数据上,训练模型,确定参数
  • step3. 用确定的模型做序列标注问题或者序列求概率问题

模型流程

1、学习训练过程

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

CRF用极大似然估计方法、梯度下降、牛顿迭代、拟牛顿下降、IIS、BFGS、L-BFGS等等优化方法优化

2、序列标注过程

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

3、序列求概率过程

LSTM+CRF

1、perspectively

大家都知道,LSTM已经可以胜任序列标注问题了,为每个token预测一个label(LSTM后面接:分类器);而CRF也是一样的,为每个token预测一个label。

但是,他们的预测机理是不同的。CRF是全局范围内统计归一化的条件状态转移概率矩阵,再预测出一条指定的sample的每个token的label;LSTM(RNNs,不区分here)是依靠神经网络的超强非线性拟合能力,在训练时将samples通过复杂到让你窒息的高阶高纬度异度空间的非线性变换,学习出一个模型,然后再预测出一条指定的sample的每个token的label。

2、LSTM+CRF

既然LSTM都OK了,为啥researchers搞一个LSTM+CRF的hybrid model?

哈哈,因为a single LSTM预测出来的标注有问题啊!举个segmentation例子(BES; char level),plain LSTM 会搞出这样的结果:

input: "学习出一个模型,然后再预测出一条指定" expected output: 学/B 习/E 出/S 一/B 个/E 模/B 型/E ,/S 然/B 后/E 再/E 预/B 测/E …… real output: 学/B 习/E 出/S 一/B 个/B 模/B 型/E ,/S 然/B 后/B 再/E 预/B 测/E ……

看到不,用LSTM,整体的预测accuracy是不错indeed, 但是会出现上述的错误:在B之后再来一个B。这个错误在CRF中是不存在的,因为CRF的特征函数的存在就是为了对given序列观察学习各种特征(n-gram,窗口),这些特征就是在限定窗口size下的各种词之间的关系。然后一般都会学到这样的一条规律(特征):B后面接E,不会出现E。这个限定特征会使得CRF的预测结果不出现上述例子的错误。当然了,CRF还能学到更多的限定特征,那越多越好啊!

好了,那就把CRF接到LSTM上面,把LSTM在timestep上把每一个hiddenstate的tensor输入给CRF,让LSTM负责在CRF的特征限定下,依照新的loss function,学习出一套新的非线性变换空间。

最后,不用说,结果还真是好多了呢。

BiLSTM+CRF codes, here. Go just take it.

这个代码比较早,CRF层中的transition matrix以及score的计算都是python from scratch. 目前tf 1.4早已将crf加入contrib中,4行代码即可实现LSTM拼接CRF的效果。

3. CRF in TensorFlow V.S. CRF in discrete toolkit

发现有的同学还是对general 实现的CRF工具包代码,与CRF拼接在LSTM网络之后的代码具体实现(如在TensorFlow),理解的稀里糊涂的,所以还得要再次稍作澄清。

在CRF相关的工具包里,CRF的具体实现是采用上述理论提到的为特征打分的方式统计出来的。统计的特征分数作为每个token对应的tag的类别的分数,输入给CRF解码即可。

而在TensorFlow中,LSTM每个节点的隐含表征vector:Hi的值作为CRF层对应的每个节点的统计分数,再计算每个序列(句子)的整体得分score,作为损失目标,最后inference阶段让viterbi对每个序列的transition matrix去解码,搜出一条最优路径。

关键区别在于,在LSTM+CRF中,CRF的特征分数直接来源于LSTM传上来的Hi的值;而在general CRF中,分数是统计来的。所有导致有的同学认为LSTM+CRF中其实并没有实际意义的CRF。其实按刚才说的,Hi本身当做特征分数形成transition matrix再让viterbi进行路径搜索,这整个其实就是CRF的意义了。所以LSTM+CRF中的CRF没毛病。

2. HMM vs. MEMM vs. CRF

将三者放在一块做一个总结:

  1. HMM -> MEMM: HMM模型中存在两个假设:一是输出观察值之间严格独立,二是状态的转移过程中当前状态只与前一状态有关。但实际上序列标注问题不仅和单个词相关,而且和观察序列的长度,单词的上下文,等等相关。MEMM解决了HMM输出独立性假设的问题。因为HMM只限定在了观测与状态之间的依赖,而MEMM引入自定义特征函数,不仅可以表达观测之间的依赖,还可表示当前观测与前后多个状态之间的复杂依赖。
  2. MEMM -> CRF:
  • CRF不仅解决了HMM输出独立性假设的问题,还解决了MEMM的标注偏置问题,MEMM容易陷入局部最优是因为只在局部做归一化,而CRF统计了全局概率,在做归一化时考虑了数据在全局的分布,而不是仅仅在局部归一化,这样就解决了MEMM中的标记偏置的问题。使得序列标注的解码变得最优解。
  • HMM、MEMM属于有向图,所以考虑了x与y的影响,但没讲x当做整体考虑进去(这点问题应该只有HMM)。CRF属于无向图,没有这种依赖性,克服此问题。

取至

[1] 如何用简单易懂的例子解释条件随机场(CRF)模型?它和HMM有什么区别?

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值