HMM详解(NLP)全网少有的最清晰透彻全面解析

1. 什么是隐马尔可夫模型 H M M ? HMM? HMM?

HMM模型是概率图模型的一种, 属于生成模型
HMM模型描述的就是由这些 隐状态序列(实体标记) 生成 可观测状态(可读文本)的过程。
在这里插入图片描述
在这里插入图片描述
HMM模型有两个基本假设(非常重要):

  1. 马尔科夫假设。第 t t t个隐状态(实体标签)只跟前一时刻的 t − 1 t-1 t1隐状态(实体标签)有关, 与除此之外的其他隐状态(如 t − 2 ,   t + 3 t-2,\ t+3 t2, t+3)无关.
    例如上图中: 蓝色的部分指的是 i t i_t it只与 i t − 1 i_{t-1} it1有关, 而与蓝色区域之外的所有内容都无关, 而 P ( i t ∣ i t − 1 ) P(i_{t}|i_{t-1}) P(itit1)指的是隐状态 i i i t − 1 t-1 t1时刻转向 t t t时刻的概率, 具体转换方式下面会细讲.
  2. 观测独立性假设。我们上面说过, HMM模型中是由隐状态序列(实体标记)生成可观测状态(可读文本)的过程,
    观测独立假设是指在任意时刻观测 o t o_t ot只依赖于当前时刻的隐状态 i t i_t it, 与其他时刻的隐状态无关.
    例如上图中: 粉红色的部分指的是 i t + 1 i_{t+1} it+1只与 o t + 1 o_{t+1} ot+1有关, 跟粉红色区域之外的所有内容都无关。

2. HMM模型的参数:

  1. HMM的转移概率(transition probabilities):
    我们上面提到了 P ( i t ∣ i t − 1 ) P(i_{t}|i_{t-1}) P(itit1)指的是隐状态 i i i t − 1 t-1 t1时刻转向 t t t时刻的概率, 比如说我们现在实体标签一共有 7 7 7种, 也就是 N = 7 N=7 N=7(注意 N N N是所有可能的实体标签种类的集合), 也就是 Q h i d d e n = { q 0 , q 1 , . . . , q 6 } Q_{hidden} = \{ q_0, q_1, ... , q_6\} Qhidden={q0,q1,...,q6}(注意我们实体标签编号从 0 0 0算起), 假设在 t − 1 t-1 t1时刻任何一种实体标签都可以在 t t t时刻转换为任何一种其他类型的实体标签, 则总共可能的转换的路径一共有 N 2 N^2 N2种, 所以我们可以做一个 N ∗ N N*N NN的矩阵来表示所有可能的隐状态转移概率.
    在这里插入图片描述
    上图就是转移概率矩阵, 也就是 t r a n s i t i o n   m a t r i x transition \ matrix transition matrix, 我们设这个矩阵为 A A A矩阵, 则 A i j A_{ij} Aij表示矩阵中第i行第j列:
    A i j = P ( i t + 1 = q j ∣ i t = q i ) q i ∈ Q h i d d e n A_{ij}=P(i_{t+1}= q_j | i_{t} = q_i) \quad q_i \in Q_{hidden} Aij=P(it+1=qjit=qi)qiQhidden
    上式表示指的是在 t t t时刻实体标签为 q i q_i qi, 而在 t + 1 t+1 t+1时刻实体标签转换到 q j q_j qj的概率.
  2. HMM的发射概率(emission probabilities):
    我们之前提到了任意时刻观测 o t o_t ot只依赖于当前时刻的隐状态 i t i_t it,
    也就是 P ( o t ∣ i t ) P(o_t | i_t) P(otit), 也叫做发射概率, 指的是隐状态生成观测结果的过程.
    设我们的字典里有 M M M个字, V o b s . = { v 0 , v 1 , . . . , v M − 1 } V_{obs.}=\{v_0, v_1, ... , v_{M-1} \} Vobs.={v0,v1,...,vM1}(注意这里下标从0算起, 所以最后的下标是 M − 1 M-1 M1, 一共有 M M M种观测), 则每种实体标签(隐状态)可以生成 M M M种不同的汉字(也就是观测), 这一过程可以用一个发射概率矩阵来表示, 他的维度是 N ∗ M N*M NM.
    在这里插入图片描述
    上图就是发射概率矩阵, 也就是 e m i s s i o n   m a t r i x emission \ matrix emission matrix, 我们设这个矩阵为 B B B矩阵, 则 B j k B_{jk} Bjk表示矩阵中第 j j j行第 k k k列:
    B j k = P ( o t = v k ∣ i t = q j ) q i ∈ Q h i d d e n v k ∈ V o b s . = { v 0 , v 1 , . . . , v M − 1 } B_{jk}=P(o_{t}= v_k | i_{t} = q_j) \quad q_i \in Q_{hidden} \quad v_k \in V_{obs.}=\{v_0, v_1, ... , v_{M-1} \} Bjk=P(ot=vkit=qj)qiQhiddenvkVobs.={v0,v1,...,vM1}
    上式表示指的是在 t t t时刻由实体标签(隐状态) q j q_j qj生成汉字(观测结果) v k v_k vk的概率.
  3. HMM的初始隐状态概率: 又称为 i n i t i a l   p r o b a b i l i t i e s initial \ probabilities initial probabilities, 我们通常用 π \pi π来表示, 注意这里可不是圆周率:
    π = P ( i 1 = q i ) q i ∈ Q h i d d e n = { q 0 , q 1 , . . . , q N − 1 } \pi=P(i_1=q_i) \quad q_i \in Q_{hidden} = \{ q_0, q_1, ... , q_{N-1}\} π=P(i1=qi)qiQhidden={q0,q1,...,qN1}
    上式指的是自然语言序列中第一个字 o 1 o_1 o1的实体标记是 q i q_i qi的概率, 也就是初始隐状态概率.

3. 用HMM解决序列标注问题, HMM的学习算法;(重要)

我们现在已经了解了HMM的三大参数 A ,   B ,   π A, \ B, \ \pi A, B, π, 假设我们已经通过建模学习, 学到了这些参数, 得到了模型的概率, 我们怎么使用这些参数来解决序列标注问题呢?
在这里插入图片描述
设目前在时刻 t t t, 我们有当前时刻的观测到的一个汉字 o t = v k o_t=v_k ot=vk(指的第 t t t时刻观测到 v k v_k vk), 假设我们还知道在 t − 1 t-1 t1时刻(前一时刻)对应的实体标记类型 i t − 1 = q ^ i t − 1 i_{t-1} = \hat{q}^{t-1}_i it1=q^it1(指的 t − 1 t-1 t1时刻标记为 q ^ i t − 1 \hat{q}^{t-1}_i q^it1). 我们要做的仅仅是列举所有 i t i_{t} it可能的实体标记 q ^ j t \hat{q}^{t}_{j} q^jt, 并求可以使下式输出值最大的那个实体类型 q j t q^{t}_{j} qjt(也就是隐状态类型):
q ^ j t = a r g m a x q ^ j t ∈ Q h i d d e n P ( i t = q ^ j t ∣ i t − 1 = q ^ i t − 1 ) P ( o t = v k ∣ i t = q ^ j t ) \hat{q}_j^{t} = argmax_{\hat{q}_j^{t} \in Q_{hidden}} P(i_t = \hat{q}_j^{t} | i_{t-1} = \hat{q}^{t-1}_i) P(o_t=v_k| i_t = \hat{q}_j^{t}) q^jt=argmaxq^jtQhiddenP(it=q^jtit1=q^it1)P(ot=vkit=q^jt)
将所有 t t t时刻当前可取的实体标签带入下式中, 找出一个可以使下式取值最大的那个实体标签作为当前字的标注:
P ( 当 前 可 取 实 体 标 签 ∣ 上 一 时 刻 实 体 标 签 ) P ( 测 到 的 汉 字 ∣ 当 前 可 取 实 体 标 签 ) P(当前可取实体标签|上一时刻实体标签)P(测到的汉字|当前可取实体标签) P()P()
注意: 我们这里只讲到了怎样求第 t t t时刻的最优标注, 但是在每一时刻进行这样的计算, 并不一定能保证最后能得出全局最优序列路径, 例如在第 t t t时刻最优实体标签是 q j q_j qj, 但到了下一步, 由于从 q j q_j qj转移到其他某些实体标签的转移概率比较低, 而降低了经过 q j q_j qj的路径的整体概率, 所以到了下一时刻最优路径就有可能在第 t t t时刻不经过 q j q_j qj了, 所以每一步的局部最优并不一定可以达成全局最优, 所以我们之后会用到维特比算法来找到全局最优的标注序列, 这个后面会有详细讲解.

HMM参数学习(监督学习):
我们今天要用HMM解决的是序列标注问题, 所以我们解决的是监督学习的问题. 也就是说我们现在有一些文本和与之对应的标注数据, 我们要训练一个HMM来拟合这些数据(训练方法就是参数估计), 以便之后用这个模型进行数据标注任务, 最简单的方式是直接用极大似然估计来估计参数:
在这里插入图片描述

  1. 初始隐状态概率 π \pi π的参数估计:
    π ^ q i = c o u n t ( q i 1 ) c o u n t ( o 1 ) \hat{\pi}_{q_i}=\frac{count(q^{1}_{i})}{count(o_1)} π^qi=count(o1)count(qi1)
    上式指的是, 计算在第 1 1 1时刻, 也就是文本中第一个字, q i 1 q^{1}_{i} qi1出现的次数占总第一个字 o 1 o_1 o1观测次数的比例, q i 1 q^{1}_{i} qi1上标1指的是第1时刻, 下标 i i i指的是第 i i i种标签(隐状态), c o u n t count count是的是记录次数.
  2. 转移概率矩阵 A A A的参数估计:
    我们之前提到过 t r a n s i t i o n   m a t r i x transition \ matrix transition matrix里面 A i j A_{ij} Aij(矩阵的第i行第j列)指的是在 t t t时刻实体标签为 q i q_i qi, 而在 t + 1 t+1 t+1时刻实体标签转换到 q j q_j qj的概率, 则转移概率矩阵的参数估计相当与一个二元模型 b i g r a m bigram bigram, 也就是把所有的标注序列中每相邻的两个实体标签分成一组, 统计他们出现的概率:
    A ^ i j = P ( i t + 1 = q j ∣ i t = q i ) = c o u n t ( q i 后 面 出 现 q j 的 次 数 ) c o u n t ( q i 的 次 数 ) \hat{A}_{ij}=P(i_{t+1}= q_j | i_{t} = q_i)=\frac{count(q_i后面出现q_j的次数)}{count(q_i的次数)} A^ij=P(it+1=qjit=qi)=count(qi)count(qiqj)
  3. 发射概率矩阵 B B B的参数估计:
    我们提到过 e m i s s i o n   m a t r i x emission \ matrix emission matrix中的 B j k B_{jk} Bjk(矩阵第j行第k列)指的是 t t t时刻由实体标签(隐状态) q j q_j qj生成汉字(观测结果) v k v_k vk的概率.
    B ^ j k = P ( o t = v k ∣ i t = q j ) = c o u n t ( q j 与 v k 同 时 出 现 的 次 数 ) c o u n t ( q j 出 现 的 次 数 ) \hat{B}_{jk}=P(o_{t}= v_k | i_{t} = q_j)=\frac{count(q_j与v_k同时出现的次数)}{count(q_j出现的次数)} B^jk=P(ot=vkit=qj)=count(qj)count(qjvk)

到此为止, 我们就可以遍历所有语料, 根据上面的方式得到模型的参数 A ,   B ,   π A, \ B, \ \pi A, B, π的估计.

注意, 通过上面的计算过程, 我们可以得出HMM的参数 ( A , B , π ) (A, B, \pi) (A,B,π)有以下特性:
∑ i π q i = 1 \sum_{i}\pi_{q_i} = 1 iπqi=1 所有标签的初始概率和为1
∑ j A i j = ∑ j P ( i t + 1 = q j ∣ i t = q i ) = 1 \sum_{j}A_{ij} = \sum_{j}P(i_{t+1}= q_j | i_{t} = q_i) = 1 jAij=jP(it+1=qjit=qi)=1 在第 t t t时刻标签为 q i q_i qi的条件下,此时基于 q i q_i qi条件的所有的转移概率和为1
∑ k B j k = ∑ k P ( o t = v k ∣ i t = q j ) = 1 \sum_{k}B_{jk} = \sum_{k}P(o_{t}= v_k | i_{t} = q_j) =1 kBjk=kP(ot=vkit=qj)=1 在第 t t t时刻标签为 q j q_j qj的条件下,此时基于 q j q_j qj条件的所有的发射概率和为1

4. 维特比算法(Viterbi Algorithm)(HMM的预测算法).

维特比算法 v i t e r b i   a l g o r i t h m viterbi \ algorithm viterbi algorithm使用了动态规划算法来解决类似HMM和CRF的预测问题, 用维特比算法可以找到概率最大路径, 也就是最优路径, 在我们今天要解决的序列标注问题中, 就要通过维特比算法, 来找到文本所对应的最优的实体标注序列.

如果用一句话来概括维特比算法, 那就是:
在每一时刻, 计算当前时刻落在每种隐状态的最大概率, 并记录这个最大概率是从前一时刻哪一个隐状态转移过来的, 最后再从结尾回溯最大概率, 也就是最有可能的最优路径.

我们这里为了学习维特比方便, 所以转换一下标签(非常重要):

  1. A i , j t − 1 , t A_{i, j}^{t-1, t} Ai,jt1,t, 是转移概率矩阵 A A A中的第 i i i行第 j j j列(下标), 指的是在 t − 1 t-1 t1时刻实体标签为 q i q_i qi, 而在 t t t时刻实体标签转换到 q j q_j qj的概率.
  2. B j k B_{jk} Bjk是发射矩阵的第j行第k列, 指的是在第 t t t时刻, 由隐状态 q j q_j qj生成观测 v k v_k vk的概率.
  3. 有了上面两点, 则 q ^ j = A i j B j k \hat{q}_j = A_{ij}B_{jk} q^j=AijBjk表示在 t t t时刻的隐状态为 q j q_j qj的概率估计.
    在这里插入图片描述
    维特比具体计算方式见此,但不要求掌握。
  • 2
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Xu_Wave

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值