NLP-如何理解隐马尔可夫求解过程?
文章目录一、引言二、模型引入1、为了模型的使用做如下假设2、模型图概览3、分析三、实战预测一、引言HMM对于自然语言处理和语音识别等方面有着重大意义其三个经典问题在已知序列的情况下推理出隐藏序列参数估计计算可能序列的边缘概率在诸多文章中被提及但是对于如何求解却很少提及本文主要通过一个简单的小例子说明如何在已知序列的情况下推理出隐藏序列。二、模型引入1、为了模型的使用做如下假设观测序列和隐含序列有关系序列符合马尔科夫过程2、模型图概览3、分析隐含序列范围 :stateϵ \epsilonϵ[a,b,c]观测序列范围 :observe $ \epsilon$ [1,2,3]为了根据观测序列求出隐含的序列必须求出三个参数分别如下参数1π \piππ \piπ:表示隐含序列每一位的为序列开头的概率比如有4个序列a,b,ca,c,cb,a,cc,a,b如序列a,b,c的初始概率π [ 2 4 , 1 4 , 1 4 ] [ 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隐含序列之间的转移概率矩阵t r a n s P transPtransP仍以状态a,b,c的序列为例,a-a转移了0次a-b转移了2次…abca022b101c101那么t r a n s P transPtransP为abca00.50.5b0.500.5c0.500.5参数3隐含序列到观测序列的发射概率矩阵e m i t P emitPemitP如隐含序列和观测序列的对应关系如下a,b,c-1,2,3a,c,c-1,3,2b,a,c-2,2,3c,a,b-1,1,2a-1发射了3次a-2发射了1次…123a310b030c112那么e m i t P emitPemitP为123a0.750.250b010c0.250.250.5到此为止模型的三个参数处理完毕根据三个参数维特比算法就可以根据输入值求出预测值比如输入一个序列 2,1,1那么需要计算的表格是abc2p ( a ∥ 2 ) π [ a ] ∗ e m i t P [ a ] [ 2 ] p(a\|2)\pi[a]*emitP[a][2]p(a∥2)π[a]∗emitP[a][2]p ( b ∥ 2 ) π [ b ] ∗ e m i t P [ b ] [ 2 ] p(b\|2)\pi[b]*emitP[b][2]p(b∥2)π[b]∗emitP[b][2]p ( c ∥ 2 ) π [ c ] ∗ e m i t P [ c ] [ 2 ] p(c\|2)\pi[c]*emitP[c][2]p(c∥2)π[c]∗emitP[c][2]1p ( a ∥ 1 ) m a x ( t r a n s P [ a ] [ a ] ∗ e m i t P [ a ] [ 1 ] ∗ p ( a ∥ 2 ) , t r a n s P [ b ] [ a ] ∗ e m i t P [ a ] [ 1 ] ∗ p ( b ∥ 2 ) , t r a n s P [ c ] [ a ] ∗ e m i t P [ 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(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))……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(a∣2)、p(b∣2)、p(c∣2)首位的影响因素为两个一个是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(a∣2)p(a为首位)∗p(a发射程2)从第二行开始使用发射概率和来自有状态转移的最大概率进行概率填充并记录最大概率来自方状态确定路径,特别说明一下以p ( a ∣ 1 ) p(a|1)p(a∣1)为例p ( a ∣ 1 ) M a x ( p(a|1)Max(p(a∣1)Max(t r a n s P [ a ] [ a ] ∗ e m i t P [ a ] [ 1 ] ∗ p ( a ∣ 2 ) , transP[a][a]*emitP[a][1]*p(a|2),transP[a][a]∗emitP[a][1]∗p(a∣2),t r a n s P [ b ] [ a ] ∗ e m i t P [ a ] [ 1 ] ∗ p ( b ∣ 2 ) , transP[b][a]*emitP[a][1]*p(b|2),transP[b][a]∗emitP[a][1]∗p(b∣2),t r a n s P [ c ] [ a ] ∗ e m i t P [ a ] [ 1 ] ∗ p ( c ∣ 2 ) transP[c][a]*emitP[a][1]*p(c|2)transP[c][a]∗emitP[a][1]∗p(c∣2)) ))p ( a ∣ 1 ) p(a|1)p(a∣1)表示在观测值为1的条件下隐含状态为a的概率在此不仅要考虑a发射为1的概率还要考虑上一个状态a,b,c转移为a的概率基于动态规划的思想确保局部路径最优还要考虑上一个状态的最终概率三、实战预测安装环境pip install hmmlearn根据二的方法计算模型参数导入hmmlearnfromhmmlearnimporthmm模型求解modelhmm.MultinomialHMM(n_components隐含状态数量)model.startprob_startP model.transmat_tranP model.emissionprob_emitP 预测结果model.predict(输入序列.reshape(-1,1))本文如果有什么错误还望大神指正