NLP-统计分词-隐马尔可夫模型(维特比算法实现详解)


一、HMM模型

1. 模型状态集合

Q Q Q = { B B B M M M E E E S S S}, N N N = 4

2. 观察状态集合

V V V = { 我 我 爱 爱 , … } ,句子的集合。

3.观察状态和状态序列

观察序列:小 明 是 中 国 人
状态序列: B , E , S , B , M , E B, E, S, B, M, E B,E,S,B,M,E

4. 状态转移概率分布矩阵

在中文分词中就是状态序列 Q Q Q = { B B B M M M E E E S S S} 的转移概率,这个状态概率矩阵是在训练阶段参数估计中得到。
在这里插入图片描述

5. 观测状态概率矩阵(发射概率)

在中文分词中发射概率指的是每一个字符对应状态序列 Q Q Q = { B B B M M M E E E S S S} 中每一个状态的概率,通过对训练集每个字符对应状态的频数统计得到。
在这里插入图片描述

6. 初始概率

在中文分词初始状态概率指的是每一句话第一个字符的对应状态概率。
{ B B B:xxx, M M M: xxx, E E E: xxx, S S S: xxx}

7. 目标

在这里插入图片描述
max = m a x P ( i 1 , i 2 , i 3 . . . , i T ∣ o 1 , o 2 , o 3 . . . , o T ) maxP(i_1, i_2, i_3...,i_T | o_1,o_2,o_3... ,o_T) maxP(i1,i2,i3...,iTo1,o2,o3...,oT)
其中: T T T 为句子长度, o i o_i oi 是句子的每一个字, i i i_i ii 是每个字的标记。
根据贝叶斯公式:
在这里插入图片描述
P ( i ∣ o ) P(i | o) P(io) = P ( o ∣ i ) P ( o ) P(o | i) P(o) P(oi)P(o) / P ( i ) P(i) P(i)
根据齐性HMM:
P ( o ) = p ( o 1 ) p ( o 2 ∣ o 1 ) . . . p ( o t ∣ o t − 1 ) P(o) = p(o1)p(o_2| o_1)...p(o_{t}| o_{t-1}) P(o)=p(o1)p(o2o1)...p(otot1), 状态转移概率。
P ( o ∣ i ) = p ( o 1 ∣ i 1 ) . . . p ( o t ∣ i t ) P(o | i) = p(o_1| i_1)...p(o_{t}| i_{t}) P(oi)=p(o1i1)...p(otit) , 即观测状态生成的概率(发射概率)。

使 P P P = P ( o ∣ i ) P ( o ) P(o | i) P(o) P(oi)P(o) = P ( o 1 ) P ( o 1 ∣ i 1 ) ∏ 2 T P ( o i ∣ o i − 1 ) P ( o i ∣ i i ) = P(o_1)P(o_1|i_1)∏{_2^T}P(o_i|o_{i-1})P(o_i|i_i) =P(o1)P(o1i1)2TP(oioi1)P(oiii)概率最大。

二、python实现

1.模型参数初始化

在这里插入图片描述

2.求解过程

P = P ( o 1 ) P ( o 1 ∣ i 1 ) ∏ 2 T P ( o i ∣ o i − 1 ) P ( o i ∣ i i ) P = P(o_1)P(o_1|i_1)∏{_2^T}P(o_i|o_{i-1})P(o_i|i_i) P=P(o1)P(o1i1)2TP(oioi1)P(oiii)

求 “我” 分别是 B B B M M M E E E S S S的概率: P ( o 1 ) P ( o 1 ∣ i 1 ) P(o_1)P(o_1|i_1) P(o1)P(o1i1)


V V V: 第一个字典记录开始的 B B B M M M E E E S S S概率
p a t h path path:记录当前状态
在这里插入图片描述

求 “我” 的每个状态到 “爱”每个状态的概率: ∏ 2 T P ( o i ∣ o i − 1 ) P ( o i ∣ i i ) ∏{_2^T}P(o_i|o_{i-1})P(o_i|i_i) 2TP(oioi1)P(oiii)

在这里插入图片描述

在这里插入图片描述
y y y 记录下一个状态,遍历 “我” 的每一个状态,由 y 0 y_0 y0记录。
遍历结束会生成四个 (概率,字典索引)的列表: [ ( p r o b , s t a t e ) , ( p r o b , s t a t e ) , ( p r o b , s t a t e ) , ( p r o b , s t a t e ) ] [(prob, state), (prob, state), (prob, state), (prob, state)] [(prob,state),(prob,state),(prob,state),(prob,state)]
寻找概率最大的路径,新的路径 = path[state] (之前的路径) + B

运行结果如下,选择S 到 B 的路径:
在这里插入图片描述

在这里插入图片描述

循环遍历,到“爱” 的最终路径如下:
在这里插入图片描述
在这里插入图片描述

重复以上过程,找到最大概率路径

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

大虾飞哥哥

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

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

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

打赏作者

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

抵扣说明:

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

余额充值