第五篇:HMM 隐马尔可夫模型

目录

概览

训练

预测(维特比算法)


概览

HMM本身也是用于序列标注,为什么需要HMM?

POS 标记,我们按照一句话为一个类别,也就是将该句子中的每个词的对应的类别,连起来作为一个类别,比如NN_V_NN。

这会有什么问题?

  • 组合太多,句子长度为m,tags总共有n种,则组合方式有n的m次方

解决:

标记是一个句子级任务,但作为人类,我们将其分解为小的单词级任务。

这是序列标记的思想,更宽泛来说,是结构化预测。

概率模型:
首先,目标:从句子 w 中获得最佳标签序列 t

\hat{t} = argmax_{t} P\left ( t|w \right )

\hat{t} = argmax_{t} P\left ( t|w \right ) = argmax_{t}\frac{P\left ( w|t \right )P(t)}{P(w)} = argmax_{t}P\left ( w|t \right )P(t)

上面通过贝叶斯定律可以得到,让我们分解一下:

P\left ( w|t \right ) = \prod_{i=1}^{n}P(w_{i}|t_{i})

上面的表示,一个wi单词只依赖于对应的一个tagi

P\left ( t \right ) = \prod_{i=1}^{n}P\left ( t_{i}|t_{i-1} \right )

上面的公式表示,当前tag只依赖于前一个tag。

这就是独立性假设,也就是HMM,隐马尔可夫模型。

接下来,思考两个问题:

  1. 为什么是马尔可夫?因为它假设序列遵循马尔可夫链:事件(标签)的概率仅取决于前一个事件(最后一个标签)
  2. 为什么是‘隐’?因为看不到事件(标签):目标是找到最佳序列。

训练

参数就是概率值P(w_{i}|t_{i}) 和 P(t_{i}|t_{i-1}),分别是发射概率 O 和 转移概率 A,也比较好理解,从tag->word 是发射概率,从tag->tag 是转移概率。

训练使用最大似然估计。概率通过频率来计算,比如:

P\left ( like | VB \right ) = \frac{count(like,VB))}{count(VB)}

P\left ( NN | DT \right ) = \frac{count(DT,NN))}{count(DT)}

以上是中间部分的概率计算,那么第一个tag呢?我们假设<s>代表句子开头

P\left ( NN | <s> \right ) = \frac{count(<s>,NN))}{count(<s>)}

最后一个tag呢?我们假设</s>表示句子的结尾,和上面一样,就不赘述了。

训练的过程就是为了获得我们刚刚说的,发射矩阵和转移矩阵。

预测(维特比算法)

\hat{t} = argmax_{t} P\left ( t|w \right ) = argmax_{t}P\left ( w|t \right )P(t) = argmax_{t} \prod_{i=1}^{n} P(w_{i}|t_{i})P(t_{i}|t_{i-1})

正确的估计是,采取所有的标签组合方式,评估并取最大值。

但是这个问题在于,如果所有的值都遍历的话,这个时间复杂度太高了是指数级别,假设tag种类是N种,句子长度是M,则这种方法的时间复杂度是,O(MN^{M}),因为组合方式有N^{M},每种组合计算概率的计算量为M,所以得到了这个结果。

因此为了减少复杂度,需要一种新的算法,于是维特比算法横空出世,它是一种动态规划算法,利用空间换时间的想法,将时间复杂度从指数级降到了平方级别。O(MN^{2}),简单讲解一下:

  1. 比如,我要赚钱。 在计算要这个字对应的tag的时候,我需要P(要|tag(要))发射概率,P(tag(要)|tag(我))转移概率,和s(tag(我)|我)上一轮算的每个我的tag对应我这个字,所计算处理的概率值
  2. 这里面,tag有N种,当计算当前这种tag的概率时,假设当前tag是动词,最终概率就是P(要|动词)*P(动词|tag(我))*s(tag(我)|我),这里面,发现变量就是tag(我),而tag(我)有N种情况,因为tag有N种情况,分别带入,计算获得的最大值,就是当前的s(动词|要)的值了
  3. 因为tag有N种,第二步只是计算了,要对应tag为动词的情况,还有其他N-1种情况,采取和步骤2同样的过程,每个算出来的概率值,这里面叫s也就是score,会记录在表格里面,这也就是空间换时间的思想。
  4. 每一个s都表示当前的概率最大值,并且有路径指向前面的状态,当算到句子末尾时,就可以追溯回去,获得tag序列。

NB:因为分解问题的独立性假设(特别是马尔可夫性质)。 没有这些,我们就不能应用动态规划。

我们看到了基于二元组的 HMM 标记器。 最先进的使用tag三元组。

P\left ( t \right ) = \prod_{i=1}^{n}P\left ( t_{i}|t_{i-1},t_{i-2} \right )

因此大家可以想想,维特比算法的时间复杂度是O(MN^{3}).

通过上面的了解,发现HMM 是生成式的。
允许无监督的 HMM:学习没有任何标记数据的模型!

因为提到了生成式,另外一种类别就是判别式,

判别模型直接描述 P(t | w)
‣ 支持更丰富的特征集,在大型监督数据集上训练时通常具有更好的准确性
‣ 例如,最大熵马尔可夫模型 (MEMM),条件随机场(CRF),联结主义时间分类(CTC)
‣ 大多数序列的深度学习模型都是判别式的(例如,用于翻译的编码器-解码器),类似于 MEMM

最后,HMM除了应用于POS词性标注任务,还有其他领域:

‣ 命名实体识别、浅层解析、对齐……
‣ 其他领域:DNA、蛋白质序列、图像点阵……

好了,今天关于HMM的讲解就到这里了,老规矩,有问题欢迎随时评论交流,辛苦拉~

 

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值