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

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

大虾飞哥哥

于 2022-03-05 11:54:17 发布

350
 收藏
分类专栏: NLP 文章标签: 自然语言处理 算法 人工智能
版权

NLP
专栏收录该内容
10 篇文章0 订阅
订阅专栏
NLP-统计分词-隐马尔可夫模型(维特比算法实现详解)
一、HMM模型
1. 模型状态集合
2. 观察状态集合
3.观察状态和状态序列
4. 状态转移概率分布矩阵
5. 观测状态概率矩阵(发射概率)
6. 初始概率
7. 目标
二、python实现
1.模型参数初始化
2.求解过程
求 “我” 分别是 B BB、M MM、E EE、S SS的概率: P ( o 1 ) P ( o 1 ∣ i 1 ) P(o_1)P(o_1|i_1)P(o 
1

 )P(o 
1

 ∣i 
1

 )
求 “我” 的每个状态到 “爱”每个状态的概率: ∏ 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)∏ 
2
T

 P(o 
i

 ∣o 
i−1

 )P(o 
i

 ∣i 
i

 )
重复以上过程,找到最大概率路径
一、HMM模型
1. 模型状态集合
Q QQ = {undefinedB BB, M MM, E EE, S SS},N NN = 4

2. 观察状态集合
V VV = {undefined我 我我,爱 爱爱, … } ,句子的集合。

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

4. 状态转移概率分布矩阵
在中文分词中就是状态序列 Q QQ = {undefinedB BB, M MM, E EE, S SS} 的转移概率,这个状态概率矩阵是在训练阶段参数估计中得到。


5. 观测状态概率矩阵(发射概率)
在中文分词中发射概率指的是每一个字符对应状态序列 Q QQ = {undefinedB BB, M MM, E EE, S SS} 中每一个状态的概率,通过对训练集每个字符对应状态的频数统计得到。


6. 初始概率
在中文分词初始状态概率指的是每一句话第一个字符的对应状态概率。
{undefinedB BB:xxx, M MM: xxx, E EE: xxx, S SS: 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(i 
1

 ,i 
2

 ,i 
3

 ...,i 
T

 ∣o 
1

 ,o 
2

 ,o 
3

 ...,o 
T

 )
其中:T TT 为句子长度,o i o_io 
i

  是句子的每一个字,i i i_ii 
i

  是每个字的标记。
根据贝叶斯公式:

P ( i ∣ o ) P(i | o)P(i∣o) = P ( o ∣ i ) P ( o ) P(o | i) P(o)P(o∣i)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(o 
2

 ∣o 
1

 )...p(o 
t

 ∣o 
t−1

 ), 状态转移概率。
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(o∣i)=p(o 
1

 ∣i 
1

 )...p(o 
t

 ∣i 
t

 ) , 即观测状态生成的概率(发射概率)。

使 P PP = P ( o ∣ i ) P ( o ) P(o | i) P(o)P(o∣i)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(o 
1

 )P(o 
1

 ∣i 
1

 )∏ 
2
T

 P(o 
i

 ∣o 
i−1

 )P(o 
i

 ∣i 
i

 )概率最大。

二、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(o 
1

 )P(o 
1

 ∣i 
1

 )∏ 
2
T

 P(o 
i

 ∣o 
i−1

 )P(o 
i

 ∣i 
i

 )

求 “我” 分别是 B BB、M MM、E EE、S SS的概率: P ( o 1 ) P ( o 1 ∣ i 1 ) P(o_1)P(o_1|i_1)P(o 
1

 )P(o 
1

 ∣i 
1

 )

V VV: 第一个字典记录开始的 B BB、M MM、E EE、S SS概率
p a t h pathpath:记录当前状态


求 “我” 的每个状态到 “爱”每个状态的概率: ∏ 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)∏ 
2
T

 P(o 
i

 ∣o 
i−1

 )P(o 
i

 ∣i 
i

 )

y yy 记录下一个状态,遍历 “我” 的每一个状态,由 y 0 y_0y 
0

 记录。
遍历结束会生成四个 (概率,字典索引)的列表:[ ( 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 的路径:


循环遍历,到“爱” 的最终路径如下:

重复以上过程,找到最大概率路径
————————————————
版权声明:本文为CSDN博主「大虾飞哥哥」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/xu624735206/article/details/123285649

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值