利用HMM进行词性标注实战

隐马尔可夫有三个问题,第三个问题就是利用已知模型和序列对隐状态序列I=(I1,I2,....In)进行预测.要想进行预测的话可以使用维特比算法,在写维特比算法的时候总是很多bug或者逻辑错误,之后代码会将每一步进行注释。

首先要初始化词典以及参数,主要就是做一个id与tag和word的相互转换,以及定义转移矩阵A,初始概率Π,以及观测概率B。

然后计算词频,并最后转换成概率,即train函数

最后就是利用维特比算法进行预测,这里是用了动态规划dp,并记录每一步最优概率的路径ptr.

import os
import sys
import numpy as np
import jieba

def log(v):
    if v == 0:
        return np.log(v + 0.000001)
    return np.log(v)

class HMM_PosTagger():
    def __init__(self):
        # 初始化词典
        self.id2tag, self.tag2id = {}, {}
        self.word2id, self.id2word = {}, {}

        # 初始化参数
        self.implicit_num = 0
        self.explicit_num = 0

        self.pi = None
        self.A = None
        self.B = None

    # 从数据中统计词典
    def init_stat(self, textfile):
        for line in open(textfile, 'r', encoding='utf-8'):
            
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值