热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

NLP如何理解隐马尔可夫求解过程?

文章目录一、引言二、模型引入1、为了模型的使用做如下假设2、模型图概览3、分析三、实战预测一、引言HMM对于自然语言处理和语音识别等方面有着重大意义,其三个经典问题


文章目录

    • 一、引言
    • 二、模型引入
      • 1、为了模型的使用做如下假设
      • 2、模型图概览
      • 3、分析
    • 三、实战预测




一、引言

HMM对于自然语言处理和语音识别等方面有着重大意义,其三个经典问题


  • 在已知序列的情况下推理出隐藏序列
  • 参数估计
  • 计算可能序列的边缘概率

在诸多文章中被提及,但是对于如何求解却很少提及!
本文主要通过一个简单的小例子说明如何在已知序列的情况下推理出隐藏序列


二、模型引入


1、为了模型的使用做如下假设


  • 观测序列和隐含序列有关系
  • 序列符合马尔科夫过程


2、模型图概览


HMM.png



3、分析


  • 隐含序列范围 :state ϵ\epsilonϵ [a,b,c]
  • 观测序列范围 :observe $ \epsilon$ [1,2,3]

为了根据观测序列求出隐含的序列,必须求出三个参数,分别如下


  • 参数1:π\piπ

π\piπ:表示隐含序列每一位的为序列开头的概率,比如有4个序列
a,b,c
a,c,c
b,a,c
c,a,b
如序列a,b,c的初始概率π=[24,14,14]=[0.5,0.25,0.25]\pi=[\frac{2}{4},\frac{1}{4},\frac{1}{4}]=[0.5,0.25,0.25]π=[42,41,41]=[0.5,0.25,0.25]



  • 参数2:隐含序列之间的转移概率矩阵transPtransPtransP

仍以状态a,b,c的序列为例,a->a转移了0次,a->b转移了2次…



abc
a022
b101
c101

那么transPtransPtransP为:


abc
a00.50.5
b0.500.5
c0.500.5

  • 参数3:隐含序列到观测序列的发射概率矩阵emitPemitPemitP

如隐含序列和观测序列的对应关系如下:
a,b,c->1,2,3
a,c,c->1,3,2
b,a,c->2,2,3
c,a,b->1,1,2
a->1发射了3次,a->2发射了1次…



123
a310
b030
c112

那么emitPemitPemitP为:


123
a0.750.250
b010
c0.250.250.5

到此为止模型的三个参数处理完毕,根据三个参数+维特比算法就可以根据输入值求出预测值,比如输入一个序列 2,1,1,那么需要计算的表格是


abc
2p(a∥2)=π[a]∗emitP[a][2]p(a\|2)=\pi[a]*emitP[a][2]p(a2)=π[a]emitP[a][2]p(b∥2)=π[b]∗emitP[b][2]p(b\|2)=\pi[b]*emitP[b][2]p(b2)=π[b]emitP[b][2]p(c∥2)=π[c]∗emitP[c][2]p(c\|2)=\pi[c]*emitP[c][2]p(c2)=π[c]emitP[c][2]
1p(a∥1)=max(transP[a][a]∗emitP[a][1]∗p(a∥2),transP[b][a]∗emitP[a][1]∗p(b∥2),transP[c][a]∗emitP[a][1]∗p(c∥2))p(a\|1)=max(transP[a][a]*emitP[a][1]*p(a\|2),transP[b][a]*emitP[a][1]*p(b\|2),transP[c][a]*emitP[a][1]*p(c\|2))p(a1)=max(transP[a][a]emitP[a][1]p(a2),transP[b][a]emitP[a][1]p(b2),transP[c][a]emitP[a][1]p(c2))
1

在首行,根据初始概率和发射概率进行初始化
首先计算序列2,1,1的首位2的状态有可能是a,b,c的概率p(a∣2)、p(b∣2)、p(c∣2)p(a|2)、p(b|2)、p(c|2)p(a2)p(b2)p(c2)
首位的影响因素为两个,一个是a,b,c分别为首的概率,一个是隐含状态a,b,c可能生成观测值1,2,3的概率,那么


p(a∣2)=p(a为首位)∗p(a发射程2)p(a|2)=p(a为首位)*p(a发射程2)p(a2)=p(a)p(a2)


从第二行开始,使用发射概率和来自有状态转移的最大概率进行概率填充,并记录最大概率来自方状态确定路径,特别说明一下(以p(a∣1)p(a|1)p(a1)为例):


p(a∣1)=Max(p(a|1)=Max(p(a1)=Max(
transP[a][a]∗emitP[a][1]∗p(a∣2),transP[a][a]*emitP[a][1]*p(a|2),transP[a][a]emitP[a][1]p(a2),
transP[b][a]∗emitP[a][1]∗p(b∣2),transP[b][a]*emitP[a][1]*p(b|2),transP[b][a]emitP[a][1]p(b2),
transP[c][a]∗emitP[a][1]∗p(c∣2)transP[c][a]*emitP[a][1]*p(c|2)transP[c][a]emitP[a][1]p(c2)
)))


p(a∣1)p(a|1)p(a1)表示在观测值为1的条件下隐含状态为a的概率,在此不仅要考虑a发射为1的概率,还要考虑上一个状态a,b,c转移为a的概率,基于动态规划的思想,确保局部路径最优,还要考虑上一个状态的最终概率


三、实战预测


  • 安装环境

pip install hmmlearn

  • 根据的方法计算模型参数
  • 导入hmmlearn

from hmmlearn import hmm

  • 模型求解

model=hmm.MultinomialHMM(n_components=隐含状态数量)
model.startprob_=startP
model.transmat_=tranP
model.emissionprob_=emitP
预测结果=model.predict(输入序列.reshape(-1,1))

本文如果有什么错误还望大神指正!



推荐阅读
author-avatar
mobiledu2502880517
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有