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 的路径:
循环遍历,到“爱” 的最终路径如下:
重复以上过程,找到最大概率路径
————————————————
版权声明:本文为优快云博主「大虾飞哥哥」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.youkuaiyun.com/xu624735206/article/details/123285649