隐马尔可夫模型
本文主要参考了《统计学习方法》及https://github.com/aespresso/a_journey_into_math_of_ml
请各位大佬多多指正。
隐马尔可夫模型(hidden Markov model, HMM)描述由隐藏的马尔可夫链随机生成观测序列的过程,属于生成模型。可用于自动分词、词性标注、命名实体识别等。
以命名实体识别为例:
一段文本:武汉市成立自由贸易试验区。我们需要识别出济南市(地点), 自由贸易试验区(地点).
在我们今天使用的NER数据集中, 一共有7个标签:
- "B-ORG": 组织或公司(organization)
- "I-ORG": 组织或公司
- "B-PER": 人名(person)
- "I-PER": 人名
- "O": 其他非实体(other)
- "B-LOC": 地名(location)
- "I-LOC": 地名
文本中以每个字为单位,每个字都对应一个标签。注意:实体开头的那个字使用开头为‘B’的标签来标注,实体中间或结尾的部分用‘I’来标注。
举个栗子:自(B-LOC)贸(I-LOC)区(I-LOC)
什么是隐马尔科夫模型?
隐马尔可夫模型是关于时序的概率模型,描述了一个由隐藏的马尔可夫链随机生成不可观测的状态随机序列,再由各个状态生成一个观测而产生观测随机序列的过程,如下图所示:
在上述的命名实体识别的例子中,隐状态序列是实体标记序列, 而可观测序列是我们可读的原始语料文本序列。
隐马尔可夫模型由初始状态概率向量pi、状态转移概率矩阵A(对应上图的转移概率)和观测概率矩阵B(对应上图的发射概率)决定。A,B,pi称为隐马尔可夫模型的三要素,可表示为
设可观测状态序列是所有汉字的集合,用V表示,已知字数为M;设所有可能的隐藏状态集合为Q,一共有N种隐藏状态。
I是长度为T的状态序列,O是对应的观测序列。注:每个状态序列都对应一个观测序列。
A是状态转移概率矩阵:
是在时刻t处于状态qi的条件下在时刻t+1转移到状态qj的概率。
B是观测概率矩阵:
是在时刻t处于状态qj的条件下生成观测vk的概率。
n是初始状态概率向量:
是时刻t=1处于状态qi的概率。
由定义可知,隐马尔可夫模型作了两个基本假设:
(1) 齐次马尔可夫性假设,即假设隐藏的马尔可夫链在任意时刻t的状态只依赖于其前一时刻的状态,与其他时刻的状态及观测无关,也与时刻t无关
(2) 观测独立性假设,即假设任意时刻的观测只依赖于该时刻的马尔可夫链的状态,与其他观测及状态无关.
一般而言,隐马尔可夫模型有3个基本问题
(1)概率计算问题。给定模型λ和观测序列,计算在模型之下观测序列O出现的概率。
(2)学习问题。己知观测序列,估计模型参数,使得在该模型下观测序列概率最大。即用极大似然估计的方法估计参数。
(3)预测问题,也称为解码问题。己知模型和观测序列,求对给定观测序列条件概率P(I | O)最大的状态序列,即给定观测序列,求最有可能的对应的状态序列。注:我们常说的词性标注、命名实体识别就是此类。
(1)概率计算问题:
1)直接计算法:
计算量太大,一般不考虑
2)前向算法:
给定隐马尔可夫模型,定义到时刻t部分观测序列o1,o2,... ,ot 且状态为qi的概率为前向概率,记作
可以递推地求得前向概率及观测序列概率
步骤(1)初始化前向概率,是初始时刻的状态i1=qi和观测o1的联合概率。
步骤(2)是前向概率的递推公式,应该是对t时刻进行递推算出直到t=T-1时刻的t=1,2,…,T-1。
计算到时刻t+1部分观测序列为o1,o2,... ,ot ,ot+1且在时刻t+1处于状态qi的前向概率。(j)是到时刻t观测到o1,o2,... ,ot并在时刻t处于状态的前向概率,那么乘积(j)就是到时刻t观测到o1,o2,... ,ot在在时刻t处于状态而在时刻t+1到达状态qi的联合概率。对这个乘积在时刻t的所有可能的N个状态求和,其结果就是到时刻t观测为o1,o2,... ,ot并在时刻t+1处于状态qi的联合概率。方括弧里的值与观测概率bi(ot+1)的乘积恰好是到时刻t+1观测到o1,o2,... ,ot ,ot+1且在时刻t+1处于状态qi的前向概率。即对t时刻进行递推算出t=T-1时刻的
步骤(3):终止
减少计算量的原因在于每一次计算直接引用前一个时刻的计算结果,避免重复计算。利用前向概率计算的计算量是O(N^2·T)阶的,而不是直接计算的O(T·N^2)阶。
(3)后向算法
给定隐马尔可夫模型,定义在时刻t状态为qi的条件下,从t+1到T的部分观测序列为ot+1,ot+2 ,... ,oT的概率为后向概率,记作
可以递推地求得后向概率及观测序列概率
步骤(1)初始化后向概率,对最终时刻的所有状态qi规定
步骤(2)是后向概率的递推公式,应该是对t时刻进行递推算出直到t=1时刻的,i=1,2,...,N,t= T-1,T-2,…,1。
为了计算在时刻t状态为qi的条件下,从t+1到T的部分观测序列为, ,... ,的后向概率。只需考虑在时刻t十1所有可能的N个状态
的转移概率(即项),以及在此状态下的观测的观测概率(即bj(oi+1)项),然后考虑状态qj之后的观测序列的后向概率(即项)。
步骤(3)求解的思路与步骤(2)一致,只是初始概率代替转移概率.
(2)学习问题
监督学习方法:
采根据已给数据,采用极大似然估计法来估计隐马尔科夫模型的参数
1、转移概率的估计
设样本中时t处于状态i时刻t+1转移到状态j的频数为Aij,那么状态转移概率的估计是
2、观测概率bj(k)的估计
设样本中状态为j并观测为k的频数是Bjk,那么状态为j观测为k的概率的估计是
3、初始状态概率的估计为S个样本中初始状态为qi的频率
(3)预测算法
这里主要介绍维特比算法。维特比算法实际是用动态规划解隐马尔可夫模型预侧问题,即用动态规划找到概率最大路径(最优路径)。在命名实体识别种。就是通过维特比算法找到文本对应的最可能的实体标注序列。
总结:计算并记录在每个时刻中每种隐状态的最大概率,还记录最大概率是从前一时刻的哪种隐状态转移的,最后从结尾依次回溯最大概率,即得到了最优路径。
先尊重下公式算法,然后举实例说明:
为了更好理解,下面举实例说明:
假设有2种可能观测的结果{0,1},有3种可能的隐状态,我们已经观测到一种序列O=,
并已经学习到了如下图所示的隐马模型的参数
接着我们建立两张表分别来存储之前提到的每种隐状态的最大概率和最大概率是从前一时刻的哪种隐状态转移的,如图有:
1、t=0时刻是初始状态,这时根据初始隐状态π和t=1时的观测结果= 0,计算T1在t=0时的隐状态,T1[0][0]= π0·B[0][0]=0.2·0.5=0.1,T1[1][0]= π1·B[1][0]=0.4·0.4=0.16,T1[0][3]= π2·B[0][2]=0.4·0.7=0.28,因为此时是初始状态,故t=0时刻T2都为空,则得到下表:
现在计算t=1时刻的情况,以计算T1[0][1]举例,从t=0到t=1有三种可能性,分别是,
取三种路径中可能性最大的那条路径,T1[0][1]=max{0.1·0.5·0.5,0.16·0.3·0.5,0.28·0.2·0.5}=0.028,再记录当前最大概率前一时刻的的隐状态I,
则T2[0][1]=argmax{0.1·0.5·0.5,0.16·0.3·0.5,0.28·0.2·0.5}=2,如下图所示:
接下来的步骤同上,最后得到下表:
回溯计算:
计算最后一步最大可能的隐状态,即求T1在t=2时的argmax:
由T2进行回溯,因为之前就存储了当前最大概率是从前一步转移过来的隐状态:
同样方法得到:
那么就得到了最大可能的隐状态序列:
时间复杂度: