PYTHON 自然语言处理实战核心技术与算法-HMM算法进行分词

本文深入探讨了Python中用于自然语言处理的HMM(隐马尔科夫模型)算法,通过实战代码解析其在分词任务中的应用,并附带详细注释。
摘要由CSDN通过智能技术生成

这是python 自然语言处理实战核心计算与算法那本书上3.3.2 HMM模型的代码,然后自己加了点备注。




# coding=utf-8
class HMM(object):
    def __init__(self):
        import os
        #后面计算的发射概率,转移概率,和状态的初始概率会放在这里
        self.model_file = r'E:\code\nlp\nlp3\hmm_model.pkl'
        #状态值的集合,我们这边就是知道其观测值来预测最大可能的状态值,凭借状态值来进行分词
        self.state_list=['B','M','E','S']
        #参数的加载,用于判断是否需要加载Model_file
        self.load_para = False


    # 用来加载已计算的中间结果,当需要重新训练的时候需要初始化清空结果
    def try_load_model(self,trained):
        if trained:
            import pickle
            with open(self.model_file, 'rb') as f:
                self.A_dic = pickle.load(f)
                self.B_dic = pickle.load(f)
                self.Pi_dic = pickle.load(f)
                self.load_para = True

        else:
            # 状态转移概率(状态->状态的条件概率(也就是在t时刻是这个状态下t+1时刻变成另一个状态的概率)
            self.A_dic = {}
            # 发射概率(状态->词语的条件概率(也就是这个状态下出现这个词语的概率)
            self.B_dic = {}
            # 状态的初始概率(在一个句子的第一个字是某个状态的概率)
            self.Pi_dic = {}
            self.load_para = False

    def train(self,path):
        # 重置几个概率矩阵
        self.try_load_model(False)

        # 统计状态出现次数,求p(o)(计算某个状态出现的次数)
        Count_dic = {}
        #初始化参数
        def init_parameters():
            #四个状态循环,每个状态都要初始化。
            #这边都是字典的形式,state相当于键值
            for stat
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值