【Sklearn-驯化】一文搞懂很难的条件随机场系列算法:hmm、crf以及实践

【Sklearn-驯化】一文搞懂很难的条件随机场系列算法:hmm、crf以及实践

 
本次修炼方法请往下查看
在这里插入图片描述

🌈 欢迎莅临我的个人主页 👈这里是我工作、学习、实践 IT领域、真诚分享 踩坑集合,智慧小天地!
🎇 免费获取相关内容文档关注:微信公众号,发送 pandas 即可获取
🎇 相关内容视频讲解 B站

🎓 博主简介:AI算法驯化师,混迹多个大厂搜索、推荐、广告、数据分析、数据挖掘岗位 个人申请专利40+,熟练掌握机器、深度学习等各类应用算法原理和项目实战经验

🔧 技术专长: 在机器学习、搜索、广告、推荐、CV、NLP、多模态、数据分析等算法相关领域有丰富的项目实战经验。已累计为求职、科研、学习等需求提供近千次有偿|无偿定制化服务,助力多位小伙伴在学习、求职、工作上少走弯路、提高效率,近一年好评率100%

📝 博客风采: 积极分享关于机器学习、深度学习、数据分析、NLP、PyTorch、Python、Linux、工作、项目总结相关的实用内容。

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

🌵文章目录🌵

    • 🎯 1. 基本介绍
    • 💡 2. 原理介绍
      • 2.1 标注模型发展状况
      • 2.2 HMM算法知识点总结
        • 两个假设问题
        • 预测问题
        • viterbi算法理解
      • 模型建模理解
      • 2.3 memm算法介绍
      • 2.4 CRF算法原理
    • 🔍 3. 代码实践
      • 3.1 HHM实践
      • 3.1 CRF实践
    • 🔍 4. 注意事项
    • 🔍 5. 总结

下滑查看解决方法

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

  加粗样式

🎯 1. 基本介绍

  判别式模型举例:要确定一个羊是山羊还是绵羊,用判别模型的方法是从历史数据中学习到模型,然后通过提取这只羊的特征来预测出这只羊是山羊的概率,是绵羊的概率。生成式模型举例:利用生成模型是根据山羊的特征首先学习出一个山羊的模型,然后根据绵羊的特征学习出一个绵羊的模型,然后从这只羊中提取特征,放到山羊模型中看概率是多少,在放到绵羊模型中看概率是多少,哪个大就是哪个。
  假设你现在有一个分类问题,x是特征,y是类标记。用生成模型学习一个联合概率分布P(x,y),而用判别模型学习一个条件概率分布P(y|x)
在这里插入图片描述

💡 2. 原理介绍

2.1 标注模型发展状况

  从朴素贝叶斯去理解hmm模型, 对于朴素贝叶斯之所以叫“朴素”,是因为这里做了一个比较强的假设,即 x i ⊥ x j ∣ y ( i ≠ j ) x_i⊥x_j|y(i≠j) xixjyi=j,就是在给定y的情况下, x i x_i xi x j x_j xj是相互独立的,因此可以简写NB假设为: P ( X ∣ y = 1 / 0 ) = ∏ P ( x i ∣ y = 1 / 0 ) P(X|y=1/0)=∏P(x_i|y=1/0) P(Xy=1/0)=P(xiy=1/0), 而hmm模型可以理解为贝叶斯模型y为0/1的扩展到seq(序列)的过程,因此这里hmm也有两个假设条件:齐次Markov假设;观测独立假设;, 其中x为观测变量,y为隐变量;同时二者还有个区别就是贝叶斯是判别模型,而hmm为生成模型;
在这里插入图片描述

  hmm与memm的对比,由于hmm模型的两个假设再现实生活中不符合,对于一个x2标注的词性y2并不单单与x2有关,也与上下文x1、x3有关,因此假设更加合理,同时相对于hmm计算联合分布,memm借鉴lr的思想,将其转化为判别模型来进行建模在复杂度上会小很多;同时在HMM中,观测变量是隐变量的输出;在MEMM中,观测变量变成输入了;
在这里插入图片描述

  memm与crf的对比,crf相对比memm算法的主要改进就是针对其标准偏差问题 进行改进,为了打破MEMM的标注偏差问题,将MEMM中的有向变成了无向,解决了局部归一化问题,变成了全局归一化。
在这里插入图片描述

2.2 HMM算法知识点总结

  • hmm模型早期常用于分词和词性标注问题,主要包括2个假设和2个问题;
两个假设问题
  • 齐次1阶马尔科夫: 这个的意思就是y3只和y2有关,y2只和y1有关,同时在马尔科夫链{y1,y2,…,yn}中,马氏链中的任意yt转移到yt+1所服从的概率分布是相同的;
  • 观测独立假设: 在给定 y t y_t yt的情况下, x t x_t xt与其他的 x k ( k ≠ t ) x_k(k≠t) xk(k=t)全都无关。
  • 具体的数学表达式为:
    p ( x t ∣ y 1 : t , x 1 : t ) = p ( x t ∣ y t ) p(x_t|y_{1:t},x_{1:t})=p(x_t|y_t) p(xty1:t,x1:t)=p(xtyt)
预测问题
  • hmm算法是生成模型算法,他最终需要解决的问题就是,给定一个观测序列,怎么求解状态序列的过程;它主要由三部分组成,第一步,先随机初始化参数 λ = ( A , B , π ) \lambda=(A,B,\pi) λ=(A,B,π),然后求得此刻观测序列的概率P(O|λ),第二步,不断的通过em算法迭代参数,得到序列O出现的概率最大的参数,第三步,通过得到的最优参数和观测序列O得到最优的状态序列I。
  • 观察序列概率预测问题: 即给定模型 λ = ( A , B , π ) \lambda=(A,B,\pi) λ=(A,B,π)和观测序列 O = o 1 , o 2 , . . . o T O={o_1,o_2,...o_T} O=o1,o2,...oT,计算在模型λ下观测序列O出现的概率P(O|λ)。这个问题的求解需要用到前向后向算法,我们在这个系列的第二篇会详细讲解。这个问题是HMM模型三个问题中最简单的。
  • 模型参数学习问题: 即给定观测序列 O = o 1 , o 2 , . . . o T O={o_1,o_2,...o_T} O=o1,o2,...oT,估计模型 λ = ( A , B , π ) \lambda=(A,B,\pi) λ=(A,B,π)的参数,使该模型下观测序列的条件概率P(O|λ)最大。这个问题的求解需要用到基于EM算法的鲍姆-韦尔奇算法, 我们在这个系列的第三篇会详细讲解。这个问题是HMM模型三个问题中最复杂的。
  • 预测问题: 也称为解码问题。即给定模型 λ = ( A , B , π ) \lambda=(A,B,\pi) λ=(A,B,π)和观测序列 O = o 1 , o 2 , . . . o T O={o_1,o_2,...o_T} O=o1,o2,...oT,求给定观测序列条件下,最可能出现的对应的状态序列,这个问题的求解需要用到基于动态规划的维特比算法,我们在这个系列的第四篇会详细讲解。这个问题是HMM模型三个问题中复杂度居中的算法。
  • HMM常用于分词处理,jieba分词的内部原理就是使用的HMM算法来进行处理的,其本的原理如下,给定训练样本,比如每个词对应的标注:{B,E,M,S},起始,结尾,中间,单个的label,然后给定一个query(观测序列),求此刻的状态序列I每个词的label的概率。
viterbi算法理解
  • viterbi算法解决的是篱笆型的图的最短路径问题,图的节点按列组织,每列的节点数量可以不一样,每一列的节点只能和相邻列的节点相连,不能跨列相连,节点之间有着不同的距离,具体如下图所示:
    在这里插入图片描述

  • 对于上图,寻找一条最短的路径,我们从s节点出发,可以有三条路径,然后对于b列,对于每一个节点:b1,b2,b3找到最短的一条路径,同样的原理对于c列也是挑选从b节点到c节点最短的一列出来,最后再到e节点,然后在从所有的路径中选择出最短的路径出来;

模型建模理解

  • 如下图所示为hmm的算法的框架图,对于图中的虚线圈内即为每个时间t所需要建模的状态,因此对于生成模型,具体表达式为
    p ( x , y ∣ λ ) = ∏ t = 1 T p ( x t , y t ∣ λ ) p(x,y|\lambda)= \prod_{t=1}^{T}p(x_t,y_t|\lambda) p(x,yλ)=t=1Tp(xt,ytλ)
    p ( x , y ∣ λ ) = ∏ t = 1 T p ( x t ∣ y t , λ ) p ( y t ∣ y t − 1 , λ ) p(x,y|\lambda)= \prod_{t=1}^{T}p(x_t|y_t,\lambda)p(y_t|y_{t-1},\lambda) p(x,yλ)=t=1Tp(xtyt,λ)p(ytyt1,λ)
    在这里插入图片描述
    _url=image-11.png&pos_id=img-okOEsns5-1722233419045)
  • 举个简单的例子,假设我们要通过观察MaxMa的心情来推测今天的天气。也就是说,上面的天气变化(晴天变为阴天)是随机变化,MaxMa的心情(由天气导致的心情变化)也是随机变化,整个的过程就是所谓的双重随机过程。上面的过程有两个特点:输出(MaxMa的心情)依然只和当前的状态(今天的天气)有关想要计算观察的序列(知道MaxMa连续好多天的心情,推算出最可能的连续几天的天气情况),只需要依照最大似然概率计算即可
  • O i O_i Oi表示观察值(MaxMa的心情),用 S i S_i Si表示中间隐状态(天气状况),概率计算公式为:
    p ( o 1 , o 2 , . . . . , o t ) = p ( o 1 ∣ s 1 ) p ( o 2 ∣ s 2 ) . . . . p ( o t ∣ s t ) p(o_1,o_2,....,o_t)=p(o_1|s_1)p(o_2|s_2)....p(o_t|s_t) p(o1,o2,....,ot)=p(o1s1)p(o2s2)....p(otst)
  • 如果计算出隐变量的转移矩阵和当前的状态矩阵就可以得出相关联合概率分布

2.3 memm算法介绍

  • 对于hmm算法来说,状态之间相互独立在现实生活中,一个句子,上下文附加了很多的有用信息,因此,这种假设不是很符合现实,同时通过求联合分布在计算量上有较大的缺点,故,提出打破状态之间相互独立的假设同时借鉴最大熵模型的求解方法,因此,具体的表达式如下所示:
    p ( y ∣ x , λ ) = ∏ t = 1 T p ( y t ∣ y t − 1 , x 1 : t , λ ) p(y|x,\lambda)= \prod_{t=1}^{T}p(y_t|y_{t-1},x_{1:t},\lambda) p(yxλ)=t=1Tp(ytyt1,x1:t,λ)

  • 虽然改算法相对于hmm算法来说更加的适用实际情况,但是同样存在一个标注偏差问题,具体如下图所示:
    在这里插入图片描述

  • 由于每次进行状态转移的时候,状态之和为1,英雌,当从e节点到o节点是,此时的转移概率就是1,而且当到达e节点的时候,下一个节点的转移一定是o,不会受到观测变量的影响,因此,不符合实际情况

2.4 CRF算法原理

  • 随机场(RF)
    “随机场”的名字取的很玄乎,其实理解起来不难。随机场是由若干个位置组成的整体,当给每一个位置中按照某种分布(或者是某种概率)随机赋予一个值之后,其全体就叫做随机场。

  • 以词性标注为例:
    假如我们有10个词形成的句子需要做词性标注。这10个词每个词的词性可以在我们已知的词性集合(名词,动词…)中去选择。当我们为每个词选择完词性后,这就形成了一个随机场。

  • 马尔科夫随机场(MRF)
    马尔科夫随机场是随机场的特例,它假设随机场中某一个位置的赋值仅仅与和它相邻的位置的赋值有关,和与其不相邻的位置的赋值无关。
    换一种表示方式,把马尔科夫随机场映射到无向图中。此无向图中的节点都与某个随机变量相关,连接着节点的边代表与这两个节点有关的随机变量之间的关系。

  • CRF是马尔科夫随机场的特例,它假设马尔科夫随机场中只有𝑋和𝑌两种变量,𝑋一般是给定的,而𝑌一般是在给定𝑋的条件下我们的输出。这样马尔科夫随机场就特化成了条件随机场。

  • 在我们10个词的句子词性标注的例子中,𝑋是词,𝑌是词性。因此,如果我们假设它是一个马尔科夫随机场,那么它也就是一个CRF。

  • 对于CRF,我们给出准确的数学语言描述:设X与Y是随机变量,P(Y|X)是给定X时Y的条件概率分布,若随机变量Y构成的是一个马尔科夫随机场,则称条件概率分布P(Y|X)是条件随机场。
    在这里插入图片描述

  • 对于上述的crf公式来说,前面一项是节点特征函数,后面一项为局部特征函数,用来提取节点上下文的信息,其中T为各个序列的节点和局部特征求和个数,K为各个局部特征和节点特征之和,因此,从另一个角度来讲,crf也是一种融合模型;

  • 对于crf的参数求和就和lr的方法基本类似,通过极大似然估计算法来对其进行参数求解,而对于给定观测变量x,求满足p(y|x)的最大序列y

🔍 3. 代码实践

3.1 HHM实践

  我们构造数据对其进行实践,具体的代码流程如下所示:

from sklearn_hmm import hmm# 创建HMM实例
model = hmm.GaussianHMM(n_components=3, covariance_type="full")# 训练模型
model.fit([[1, 2, 3], [1, 2, 3], [4, 5, 6]])# 预测观测序列的最可能状态序列
hidden_states = model.predict([[1, 2, 3], [4, 5, 6], [7, 8, 9]])print(f"Hidden states: {hidden_states}")

3.1 CRF实践

  具体的代码流程如下所示:

from sklearn_crfsuite import CRF# 创建CRF实例
crf = CRF(algorithm='lbfgs', max_iterations=100, all_possible_transitions=True)# 训练模型
X_train = [(['word1', 'word2', 'word3'], ['tag1', 'tag2', 'tag3']) for _ in range(10)]
y_train = [([1, 2, 3] for _ in range(10))]
crf.fit(X_train, y_train)# 预测标签序列
X_test = [(['hello', 'world'], ['O', 'O'])]
y_pred = crf.predict(X_test)print(f"Predicted tags: {y_pred}")

🔍 4. 注意事项

  • HMM和CRF都是序列标注任务中常用的模型,但它们的应用场景和性能可能有所不同。
  • HMM更适合处理具有明显状态转移特性的序列数据,而CRF可以处理更复杂的标注任务。
  • 在使用CRF时,特征工程是关键,需要根据任务设计合适的特征函数。

🔍 5. 总结

  HMM和CRF是两种强大的序列标注模型,它们在自然语言处理和其他领域中有着广泛的应用。通过本博客的代码示例,我们学习了如何在Python中使用这些模型进行训练、预测和评估。希望这篇博客能够帮助你更好地理解HMM和CRF,并将其应用于实际的序列标注任务中。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/51367.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【Python从入门到进阶】61、Pandas中DataFrame对象的操作(二)

接上篇《60、Pandas中DataFrame对象的操作(一)》 上一篇我们讲解了DataFrame对象的简介、基本操作及数据清洗相关的内容。本篇我们来继续讲解DataFrame对象的统计分析、可视化以及数据导出与保存相关内容。 一、DataFrame的统计分析 在数据分析和处理中…

C#与欧姆龙PLC 通信——fins udp协议

前言 欧姆龙PLC在工控领域占有很大的市场份额,在上位机编程领域,实现上位机和欧姆龙PLC的通信也是必备的技能,上位机和PLC可以通过fins udp和fins tcp协议通信,本文介绍的是fins udp协议,该协议具有传输速度快的特点,为了帮助大家学习fins udp协议,我编写了“欧姆龙Fin…

从零开始学习网络安全渗透测试之基础入门篇——(四)反弹SHELL不回显带外正反向连接防火墙出入站文件上传下载

一、反弹SHELL 反弹SHELL(Reverse Shell)是一种网络攻击技术,它允许攻击者在一个被入侵的计算机上执行命令,即使该计算机位于防火墙或NAT(网络地址转换)之后。通常,当攻击者无法直接连接到目标…

基于OPENMV实现一个单目测速测试

1、测试平台:OpenMV4H7Plus开发板​ 使用的相机是 MT9V034 相机对应为752x480黑白图像,为全局快门 2、测速的时候,仅选取最大物体的抓取,这里采用了几个步骤: ①、直接计算灰度的帧差 ②、对帧差进行阈值处理以获取mot…

【代码随想录训练营第42期 Day7打卡 LeetCode 454.四数相加II 383. 赎金信 15. 三数之和 18. 四数之和

目录 一、做题心得 二、题目及题解 454.四数相加II 题目链接 题解 383. 赎金信 题目链接 题解 15. 三数之和 题目链接 题解 18. 四数之和 题目链接 题解 三、小结 一、做题心得 今天是代码随想录训练营打卡的第七天,做的也是同昨天一样的哈希表部分…

CUDA编程之grid和block详解

CUDA 文章目录 CUDAgrid和block基本的理解1维 遍历2维 遍历3维 遍历3维 打印对应的thread grid和block基本的理解 Kernel:Kernel不是CPU,而是在GPU上运行的特殊函数。你可以把Kernel想象成GPU上并行执行的任务。当你从主机(CPU)调…

使用Chainlit接入通义千问快速实现一个多模态的对话应用

开通灵识服务 首先需要到阿里云-模型服务灵积开通账户,获得apiKey 模型服务灵积 https://dashscope.aliyun.com/ 进入控制台 ,在API-KEY管理里,创建一个新的API-KEY,然后保存起来,后面会用到。 模型服务灵积服务所有API文档地址…

KUKA机器人外部自动IO信号经验分享

个人名片 🎓作者简介:java领域优质创作者 🌐个人主页:码农阿豪 📞工作室:新空间代码工作室(提供各种软件服务) 💌个人邮箱:[2435024119qq.com] &#x1f4f1…

k8s学习--k8s集群部署kubesphere的详细过程

文章目录 kubesphere简介k8s群集部署kubespere环境准备工作一、配置nfs二、配置storageclass三、kubesphere开启服务(devops) kubesphere简介 下面是官方文档描述 KubeSphere 是在 Kubernetes 之上构建的面向云原生应用的分布式操作系统,完全开源,支持多…

【python】最新版抖音js逆向拿到数据,非常详细教程(附完整代码)

✨✨ 欢迎大家来到景天科技苑✨✨ 🎈🎈 养成好习惯,先赞后看哦~🎈🎈 🏆 作者简介:景天科技苑 🏆《头衔》:大厂架构师,华为云开发者社区专家博主,阿里云开发者社区专家博主,CSDN全栈领域优质创作者,掘金优秀博主,51CTO博客专家等。 🏆《博客》:Python全…

如何压缩pdf文件大小?这5种方法,简单又实用!

如何压缩pdf文件大小?pdf是电脑常用的便携式文档格式,无论是在学术领域的论文发表,还是在商业场景中的合同签署,甚至是个人简历的提交,PDF文件都扮演着重要的角色。 电脑上存储pdf文件会面临一个难题,那就是…

收不到验证码邮件怎么办?快速排查与解决!

收不到验证码邮件有哪些应对策略?验证码邮件被拦截? 经常需要通过邮箱接收验证码邮件来完成各种操作。然而,许多人都会遇到收不到验证码邮件的情况。AokSend将详细介绍如何快速排查和解决收不到验证码邮件的问题。 收不到验证码邮件&#x…

pake 打包TodoList windows桌面应用exe

参考: rust安装 https://blog.csdn.net/weixin_42357472/article/details/125943880 pake网址 https://github.com/tw93/Pake 支持把网页打包成多终端应用 离线网站打包参考: https://github.com/tw93/Pake/wiki/Pake%E6%89%93%E5%8C%85%E9%9D%99%E6%8…

企业微信开发智能升级:AIGC技术赋能,打造高效沟通平台

文章目录 一、AIGC在企业微信开发中的核心价值1. 智能化客服体验2. 自动化工作流程3. 个性化内容推荐4. 深度数据分析与洞察 二、使用AIGC进行企业微信开发的实践路径1. 需求分析与场景定义2. 技术选型与平台搭建3. 模型训练与调优4. 接口对接与功能集成5. 测试与优化 《企业微…

Hugo 部署与自动更新(Git)

文章目录 Nginx部署Hugonginx.confhugo.conf Hugo自动更新Hugo自动更新流程添加访问令牌添加web hookrust实现自动更新接口 Nginx部署Hugo nginx.conf user nginx; worker_processes auto;error_log /var/log/nginx/error.log notice; pid /var/run/nginx.pid;even…

python-小李帮老师改错(赛氪OJ)

[题目描述] 老师给小理发了一封电子邮件,任务如下。 写一个程序,给你 n 个数,输出 X。Xnum1p1​​num2p2​​⋯numnpn​​。 num1​,num2​,⋯⋯,numn​ 都是整数&#x…

【脱敏】平台数据脱敏技术解决方案(word)

1 概述 1.1 数据脱敏定义 1.2 数据脱敏原则 1.2.1基本原则 1.2.2技术原则 1.2.3管理原则 1.3 数据脱敏常用方法 3.1.1泛化技术 3.1.2抑制技术 3.1.3扰乱技术 3.1.4有损技术 1.4 数据脱敏全生命周期 2 制定数据脱敏规程 3 发现敏感数据 4 定义脱敏规则 5 执…

02 Go语言开发REST API接口_20240728 课程笔记

概述 如果您没有Golang的基础,应该学习如下前置课程。 Golang零基础入门Golang面向对象编程Go Web 基础 基础不好的同学每节课的代码最好配合视频进行阅读和学习,如果基础比较扎实,则阅读本教程巩固一下相关知识点即可,遇到不会…

探索Python监控之眼:watchdog库深度解析

文章目录 探索Python监控之眼:watchdog库深度解析1. 引言:为何选择watchdog?2. watchdog简介3. 安装watchdog库4. 基本函数与使用方法4.1 初始化监控器4.2 监控文件的创建4.3 监控文件的删除4.4 监控目录的创建4.5 监控目录的删除 5. 场景应用…

IoTDB 入门教程 实战篇②——MQTT集成

文章目录 一、前文二、配置参数三、开放端口四、MQTT客户端连接五、推送数据六、查询数据八、参考 一、前文 IoTDB入门教程——导读 IoTDB时序数据库内置MQTT服务器,允许远程设备将消息直接发送到IoTDB内置的MQTT服务器,并可以直接存入IoTDB时序数据库。…