命名实体识别学习-从基础算法开始(01)-维特比算法

本文介绍了命名实体识别学习的第一部分——维特比算法。通过一个关于健康和发烧状态的HMM小例子,阐述了如何将问题抽象为HMM模型,并详细讲解了维特比算法的Python实现,包括手算过程、伪代码和实际代码。最后进行了总结,强调维特比算法的本质是动态规划。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


title: 命名实体识别学习-从基础算法开始-维特比算法
date: 2020-06-22 15:28:49
tags:


命名实体识别学习-从基础算法开始(01)-维特比算法


代码地址: https://github.com/SStarLib/NERfromBasic

Day1: 维特比算法

HMM的小例子

从一个小例子开始实现维特比算法:

例子来自知乎一个答案对维特比算法和HMM的讲解:

如何通俗地讲解 viterbi 算法? - Kiwee的回答 - 知乎
https://www.zhihu.com/question/20136144/answer/239971177

大致介绍下这个例子:

题目背景

从前有个村儿,村里的人的身体情况只有两种可能:健康或者发烧。
假设这个村儿的人没有体温计或者百度这种神奇东西,他唯一判断他身体情况的途径就是到村头我的偶像金正月的小诊所询问。
月儿通过询问村民的感觉,判断她的病情,再假设村民只会回答正常、头晕或冷。
有一天村里奥巴驴就去月儿那去询问了。
第一天她告诉月儿她感觉正常。
第二天她告诉月儿感觉有点冷。
第三天她告诉月儿感觉有点头晕。
那么问题来了,月儿如何根据阿驴的描述的情况,推断出这三天中阿驴的一个身体状态呢?

将问题抽象为一个HMM

从问题中过可以看出,{健康,发烧}对应隐马尔可夫模型中的状态序列,{正常,冷,头晕},则对应观察序列。(本例子其实不严谨,冷,头晕这两个观察现象是可以同时存在的,不过本例中假设其不同时存在)

问题要求:推断出这三天中阿驴的一个身体状态

问题本质:解码这三天的状态序列。

模型参数:状态转移概率矩阵,状态-观察概率分布矩阵,初始状态

  • **初始状态:**月儿预判的阿驴身体状态的概率分布 = { 健康:0.6 , 发烧: 0.4 }

  • 状态转移概率矩阵: {
    健康->健康: 0.7 ,
    健康->发烧: 0.3 ,
    发烧->健康:0.4 ,
    发烧->发烧: 0.6
    }

  • 状态-观察概率分布矩阵:{
    健康,正常:0.5 ,冷 :0.4 ,头晕: 0.1 ;
    发烧,正常:0.1 ,冷 :0.3 ,头晕: 0.6
    }

    image-20200622160308608

有了模型参数。就可以构建模型并用维特比算法进行解码了即预测三天的身体状态。

Python实现维特比算法

为了方便后面学习,使用Pytorch框架(其实numpy应该更简单些)

手算维特比过程:

image-20200622155623835

伪代码:

维特比算法的伪代码(来自宗成庆老师的ppt):

image-20200622161813184

代码前期准备
def main():
    states = [ "健康", "发烧"]
    observations = ["正常","冷", "头晕"]
    tran_matrix = torc
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值