HanLP — HMM隐马尔可夫模型 -- 训练--归一化,计算概率

简介: HanLP — HMM隐马尔可夫模型 -- 训练--归一化,计算概率

前篇得出初始矩阵、转移矩阵、发射矩阵

通过归一化得出每个状态的概率。

然后通过 pickle 将三个数组序列化到文件中,用的时候反序列化

# 训练数据
[
  '今天 天气 真 不错 。',
  '麻辣肥牛 好吃 !',
  '我 喜欢 吃 好吃 的 !'
]
# 标注
[
  'BE BE S BE S',
  'BMME BE S',
  'S BE S BE S S '
]
# 初始矩阵
[2, 0, 1, 0]
# 转移矩阵
[
  [0, 1, 0, 6],
  [0, 1, 0, 1],
  [3, 0, 1, 0],
  [2, 0, 5, 0]
]
# 发射矩阵
{
  'B': {'total': 7, '今': 1, '天': 1, '不': 1, '麻': 1, '好': 2, '喜': 1},
  'M': {'total': 2, '辣': 1, '肥': 1},
  'S': {'total': 7, '真': 1, '。': 1, '!': 2, '我': 1, '吃': 1, '的': 1},
  'E': {'total': 7, '天': 1, '气': 1, '错': 1, '牛': 1, '吃': 2, '欢': 1}
}
import pickle
from tqdm import tqdm
import numpy as np
import os
# 定义 HMM类, 其实最关键的就是三大矩阵
class HMM:
    def __init__(self, file_text, file_state):
        # 初始矩阵 : 1 * 4 , 对应的是 BMSE,
        self.init_matrix = [2, 0, 1, 0, ]
        # 转移状态矩阵:  4 * 4 ,
        self.transfer_matrix = [[0, 1, 0, 6],
                                [0, 1, 0, 1],
                                [3, 0, 1, 0],
                                [2, 0, 5, 0]]
        # 发射矩阵
        self.emit_matrix = {
            'B': {'total': 7, '今': 1, '天': 1, '不': 1, '麻': 1, '好': 2, '喜': 1},
            'M': {'total': 2, '辣': 1, '肥': 1},
            'S': {'total': 7, '真': 1, '。': 1, '!': 2, '我': 1, '吃': 1, '的': 1},
            'E': {'total': 7, '天': 1, '气': 1, '错': 1, '牛': 1, '吃': 2, '欢': 1}
            }
    # 将矩阵归一化,得出概率
    def normalize(self):
        self.init_matrix = self.init_matrix / np.sum(self.init_matrix)
        self.transfer_matrix = self.transfer_matrix / np.sum(self.transfer_matrix, axis=1, keepdims=True)
        self.emit_matrix = {state: {word: t / word_times["total"] * 1000 for word, t in word_times.items() if word != "total"} for state, word_times in
                            self.emit_matrix.items()}
    # 训练开始, 其实就是3个矩阵的求解过程
    def train(self):
        self.normalize()  # 矩阵求完之后进行归一化
        pickle.dump([self.init_matrix, self.transfer_matrix, self.emit_matrix], open("data/three_matrix.pkl", "wb"))  # 保存参数
if __name__ == "__main__":
    train_file = "data/train_data.txt"
    state_file = "data/train_state.txt"
    hmm = HMM(train_file, state_file)
    hmm.train()
# 初始矩阵 -- 概率
[0.66666667, 0,0.33333333,0]
# 转移矩阵 -- 概率
[[0.        , 0.14285714, 0.        , 0.85714286]
 [0.        , 0.5       , 0.        , 0.5       ]
 [0.75      , 0.        , 0.25      , 0.        ]
 [0.28571429, 0.        , 0.71428571, 0.        ]]
# 转移矩阵 -- 概率
{
  'B': {'今': 142.85714285714286, '天': 142.85714285714286, '不': 142.85714285714286, '麻': 142.85714285714286, '好': 285.7142857142857, '喜': 142.85714285714286}, 
  'M': {'辣': 500.0, '肥': 500.0}, 
  'S': {'真': 142.85714285714286, '。': 142.85714285714286, '!': 285.7142857142857, '我': 142.85714285714286, '吃': 142.85714285714286, '的': 142.85714285714286}, 
  'E': {'天': 142.85714285714286, '气': 142.85714285714286, '错': 142.85714285714286, '牛': 142.85714285714286, '吃': 285.7142857142857, '欢': 142.85714285714286}
}
目录
相关文章
|
4月前
|
机器学习/深度学习 PyTorch 算法框架/工具
VQ-VAE:矢量量化变分自编码器,离散化特征学习模型
VQ-VAE 是变分自编码器(VAE)的一种改进。这些模型可以用来学习有效的表示。本文将深入研究 VQ-VAE 之前,不过,在这之前我们先讨论一些概率基础和 VAE 架构。
120 10
|
3月前
|
算法
HanLP — HMM隐马尔可夫模型 -- 训练
HanLP — HMM隐马尔可夫模型 -- 训练
32 0
HanLP — HMM隐马尔可夫模型 -- 训练
|
3月前
|
自然语言处理
HanLP — HMM隐马尔可夫模型 -- 语料库
HanLP — HMM隐马尔可夫模型 -- 语料库
41 0
|
6月前
|
自然语言处理 算法 数据挖掘
R语言中的隐马尔可夫HMM模型实例
R语言中的隐马尔可夫HMM模型实例
|
6月前
|
SQL 数据可视化 数据挖掘
R语言线性分类判别LDA和二次分类判别QDA实例
R语言线性分类判别LDA和二次分类判别QDA实例
|
算法 数据可视化 数据挖掘
高斯混合模型 GMM 的详细解释
高斯混合模型(后面本文中将使用他的缩写 GMM)听起来很复杂,其实他的工作原理和 KMeans 非常相似,你甚至可以认为它是 KMeans 的概率版本。 这种概率特征使 GMM 可以应用于 KMeans 无法解决的许多复杂问题。
219 0
|
机器学习/深度学习 算法 测试技术
适合离散值分类的多分类模型——softmax回归
适合离散值分类的多分类模型——softmax回归
适合离散值分类的多分类模型——softmax回归
|
机器学习/深度学习 算法 语音技术
隐马尔科夫模型HMM
本文介绍常见的机器学习模型隐马尔科夫模型HMM。 HMM也是generative model。 我是因为看到一篇论文需要用HMM来优化,所以速成。日后如有新的理解将会持续更新,可以收藏关注本文以待。
隐马尔科夫模型HMM
|
机器学习/深度学习 自然语言处理 算法
ML之NB:基于news新闻文本数据集利用纯统计法、kNN、朴素贝叶斯(高斯/多元伯努利/多项式)、线性判别分析LDA、感知器等算法实现文本分类预测daiding
ML之NB:基于news新闻文本数据集利用纯统计法、kNN、朴素贝叶斯(高斯/多元伯努利/多项式)、线性判别分析LDA、感知器等算法实现文本分类预测daiding
ML之NB:基于news新闻文本数据集利用纯统计法、kNN、朴素贝叶斯(高斯/多元伯努利/多项式)、线性判别分析LDA、感知器等算法实现文本分类预测daiding
ML之NB:基于news新闻文本数据集利用纯统计法、kNN、朴素贝叶斯(高斯/多元伯努利/多项式)、线性判别分析LDA、感知器等算法实现文本分类预测
ML之NB:基于news新闻文本数据集利用纯统计法、kNN、朴素贝叶斯(高斯/多元伯努利/多项式)、线性判别分析LDA、感知器等算法实现文本分类预测
ML之NB:基于news新闻文本数据集利用纯统计法、kNN、朴素贝叶斯(高斯/多元伯努利/多项式)、线性判别分析LDA、感知器等算法实现文本分类预测