【Python机器学习】隐马尔可夫模型讲解及在中文分词中的实战(附源码和数据集)

简介: 【Python机器学习】隐马尔可夫模型讲解及在中文分词中的实战(附源码和数据集)

需要源码和数据集请点赞关注收藏后评论区留言私信~~~

隐马尔可夫模型(HMM)是关于时序的概率模型,它可用于标注等问题中

基本思想

假设一个盒子里可以装两个骰子,骰子的种类有四面的和六面的两种。现在进行猜骰子实验,该实验由实验者和分析者完成。

实验者每次随机从盒子中取出一个骰子,然后补入一个另外种类的骰子。实验者记录下每次实验后盒子中不同种类骰子的数量,可得到一个盒子状态的序列。

实验者在每次实验后掷一次骰子,并将两个骰子的点数之和告诉他。于是分析者将得到一个数字序列,称为观察序列。

用盒子中四面骰子的数量来标记盒子的状态:若盒子中有k个四面骰子,则称系统处于状态k。显然盒子状态的取值空间为I={0,1,2}。

实验者在实验中能抓出什么骰子只与当前盒子的状态有关,而与盒子以前的状态无关。具有这种特性的序列,被称为具有马尔可夫性。

盒子状态的变化可以由所谓的初始概率和转移概率来确定。

初始概率是指盒子最初处于什么状态的概率。盒子可能出现的状态有0、1、2三种,假设两种骰子随机等概放入,那么三种状态出现的概率分别为0.25、0.5、0.25,用一个向量π=(π_0,π_1,π_2)=(0.25,0.5,0.25)来表示,称此向量为初始状态概率向量。

一步转移概率矩阵:

矩阵的横坐标表示当前状态,纵坐标表示下一步状态。 对分析者不可见的状态序列可以认为是由π和A依概率产生的。

分析者见到的观测值又是由状态值依据所谓的观测概率(或称为发射概率)产生的。

第1个状态为1,说明盒子中有一个四面的骰子和六面的骰子。此时,能掷出的点数分别为2、3、4、5、6、7、8、9、10共9个。用b_1(2)表示在状态1时观测到点数2的观测概率,可知:b_2(2)=1/4×1/6=1/24。

计算出所有观测概率,并写成矩阵形式,可得到观测概率矩阵:

可见,隐马尔可夫模型是由π、A以及B依概率确定。π和A决定状态序列,B决定观测序列。记隐马尔可夫模型为λ,λ可以由三元符号表示,即:

λ=(A,B,π)

隐马尔可夫模型在实际应用中,一般有三种问题:

1.概率计算问题

给定模型λ=(A,B,π)和观测序列O={o_1,o_2,…,o_T},计算在模型λ下观测序列O出现的概率P(O|λ)。

可以通过穷举状态序列的方法来计算指定观测序列的概率。一般采用用时较少的前向-后向算法(forward-backward algorithm)来计算。

2.学习问题

估计出隐马尔可夫模型的参数λ=(A,B,π)的问题是学习问题。隐马尔可夫模型的学习分为监督学习和无监督学习。监督学习的训练样本包含有观测序列和状态序列,无监督学习的训练样本只含有观测序列。

3.预测问题,也称为解码(decoding)问题

已知观测序列O={o_1,o_2,…,o_T}和模型λ=(A,B,π),求使条件概率P(Q|O)最大的状态序列Q={q_1,q_2,…,q_T},即给定观测序列,求最有可能的状态序列。

hmmlearn隐马尔可夫模型扩展库曾经是scikit-learn项目的一部分,现已独立成单独的Python扩展库。在Anaconda环境中,可以用“conda install hmmlearn”命令直接安装。

hmmlearn实现了三种常用的观测概率分布的隐马尔可夫模型:多项式分布、高斯分布和高斯混合分布隐马尔可夫模型。 多项式分布隐马尔可夫模型假定观测概率b_i(j)符合多项式分布。 高斯分布隐马尔可夫模型假定观测概率b_i(j)服从高斯分布。 高斯混合分布隐马尔可夫模型假定观测概率b_i(j)服务多个叠加的高斯分布。

中文分词应用示例

自然语言处理领域的很多问题都是序列标注问题。中文分词是将中文句子分解成有独立含义的字或词,如“我爱自然语言处理”可分解成“我 爱 自然 语言 处理”或“我 爱 自然语言 处理”。

标注分词方法给句子中的每个字标记一个能区分词的标签,如SBME四标注法中,“S”表示是该字是单字,“B”表示该字是一个词的首字,“M”表示该字是一个词的中间字,“E”表示该字是一个词的结尾字。

对分词模型来说,就是要对输入序列产生正确的输出序列。采用隐马尔可夫模型作为分词模型时,输入序列是观测值序列,输出的标签序列是隐状态序列。

应用隐马尔可夫模型来分词,先要用大量的训练样本来训练模型,属于监督学习。在自然语言处理领域,训练样本称为语料。

用语料来有监督训练隐马尔可夫模型比较容易理解。用概率论的极大似然估计法和矩估计法都可以得到用频率来估计概率的结论。也就是说,对隐马尔可夫模型的三要素A,B,π,只需要统计它们中的每个元素在语料库中出现的频率即可。为了防止出现概率为0的情况,可采取如多项式朴素贝叶斯分类器中用到的平滑技术。

代码输出如下

分词结果如下

部分代码如下

import numpy as np
file = open("traindata.txt", encoding='utf-8')
test_str = "中国首次火星探测任务天问一号探测器实施近火捕获制动"
new_sents = []
sents_labels = []
for line in file.readlines():
    line = line.split()
    new_sent = ''
    sent_labels = ''
    for word in line:
        if len(word) == 1:
            new_sent += word
            sent_labels += 'S'
        elif len(word) >= 2:
            new_sent += word
            sent_labels += 'B' + 'M'*(len(word)-2) + 'E'
    if new_sent != '':
        new_sents.append([new_sent])
        sents_labels.append([sent_labels])
print("训练样本准备完毕!")
print('共有数据 %d 条' % len(new_sents))
print('平均长度:', np.mean([len(d[0]) for d in new_sents]))
# 统计转移概率矩阵A和观测概率矩阵B
A = np.zeros((4, 4))
B = np.zeros((4, 65536)) # GB2312编码
for i in range(len(sents_labels)):
    for j in range(len(sents_labels[i][0])):
        B[state.index(sents_labels[i][0][j]), ord(new_sents[i][0][j])] += 1 # 观测频率加1
    for j in range(len(sents_labels[i][0]) - 1):

创作不易 觉得有帮助请点赞关注收藏~~~

相关文章
|
10月前
|
人工智能 自然语言处理 IDE
模型微调不再被代码难住!PAI和Qwen3-Coder加速AI开发新体验
通义千问 AI 编程大模型 Qwen3-Coder 正式开源,阿里云人工智能平台 PAI 支持云上一键部署 Qwen3-Coder 模型,并可在交互式建模环境中使用 Qwen3-Coder 模型。
1489 109
|
11月前
|
人工智能 自然语言处理 运维
【新模型速递】PAI-Model Gallery云上一键部署Kimi K2模型
月之暗面发布开源模型Kimi K2,采用MoE架构,参数达1T,激活参数32B,具备强代码能力及Agent任务处理优势。在编程、工具调用、数学推理测试中表现优异。阿里云PAI-Model Gallery已支持云端部署,提供企业级方案。
648 0
【新模型速递】PAI-Model Gallery云上一键部署Kimi K2模型
|
机器学习/深度学习 算法 安全
差分隐私机器学习:通过添加噪声让模型更安全,也更智能
本文探讨在敏感数据上应用差分隐私(DP)进行机器学习的挑战与实践。通过模拟DP-SGD算法,在模型训练中注入噪声以保护个人隐私。实验表明,该方法在保持71%准确率和0.79 AUC的同时,具备良好泛化能力,但也带来少数类预测精度下降的问题。研究强调差分隐私应作为模型设计的核心考量,而非事后补救,并提出在参数调优、扰动策略选择和隐私预算管理等方面的优化路径。
775 3
差分隐私机器学习:通过添加噪声让模型更安全,也更智能
|
11月前
|
人工智能 自然语言处理 运维
【新模型速递】PAI-Model Gallery云上一键部署gpt-oss系列模型
阿里云 PAI-Model Gallery 已同步接入 gpt-oss 系列模型,提供企业级部署方案。
|
12月前
|
机器学习/深度学习 分布式计算 Java
Java 大视界 -- Java 大数据机器学习模型在遥感图像土地利用分类中的优化与应用(199)
本文探讨了Java大数据与机器学习模型在遥感图像土地利用分类中的优化与应用。面对传统方法效率低、精度差的问题,结合Hadoop、Spark与深度学习框架,实现了高效、精准的分类。通过实际案例展示了Java在数据处理、模型融合与参数调优中的强大能力,推动遥感图像分类迈向新高度。
|
12月前
|
机器学习/深度学习 存储 Java
Java 大视界 -- Java 大数据机器学习模型在游戏用户行为分析与游戏平衡优化中的应用(190)
本文探讨了Java大数据与机器学习模型在游戏用户行为分析及游戏平衡优化中的应用。通过数据采集、预处理与聚类分析,开发者可深入洞察玩家行为特征,构建个性化运营策略。同时,利用回归模型优化游戏数值与付费机制,提升游戏公平性与用户体验。
|
机器学习/深度学习 算法 Java
Java 大视界 -- Java 大数据机器学习模型在舆情分析中的情感倾向判断与话题追踪(185)
本篇文章深入探讨了Java大数据与机器学习在舆情分析中的应用,重点介绍了情感倾向判断与话题追踪的技术实现。通过实际案例,展示了如何利用Java生态工具如Hadoop、Hive、Weka和Deeplearning4j进行舆情数据处理、情感分类与趋势预测,揭示了其在企业品牌管理与政府决策中的重要价值。文章还展望了多模态融合、实时性提升及个性化服务等未来发展方向。
|
机器学习/深度学习 存储 搜索推荐
利用机器学习算法改善电商推荐系统的效率
电商行业日益竞争激烈,提升用户体验成为关键。本文将探讨如何利用机器学习算法优化电商推荐系统,通过分析用户行为数据和商品信息,实现个性化推荐,从而提高推荐效率和准确性。
786 14
|
机器学习/深度学习 算法 数据可视化
实现机器学习算法时,特征选择是非常重要的一步,你有哪些推荐的方法?
实现机器学习算法时,特征选择是非常重要的一步,你有哪些推荐的方法?
769 1
|
机器学习/深度学习 算法 搜索推荐
Machine Learning机器学习之决策树算法 Decision Tree(附Python代码)
Machine Learning机器学习之决策树算法 Decision Tree(附Python代码)

热门文章

最新文章

推荐镜像

更多