最近在学习语音识别相关的知识,而语音识别最基础的就是隐马尔科夫模型(HMM)。其实HMM的运用是非常广泛的,如语音识别,词性标注等等,凡是关于时间序列的问题都可以用HMM来解决。

   我们知道,世间的万事万物都是有一定的规律的,而且这种规律一般来说是非常复杂,而且会随着时间变化。如果想用计算机来帮助我们解决问题,我们希望找到一个相应的数学模型来描述这种变化规律。实际的问题一般都是非常复杂的,为了简化分析,我们假设一个事物的状态只和它前面的n个状态相关,这就是马尔科夫假设。虽然这种假设往往是不太合理的,但是它使复杂问题简单化,同时实践证明,HMM确实帮助人们解决不少问题。

   

   一个HMM主要包括5个方面内容:

   1、观察状态

   2、隐藏状态

   3、状态转移矩阵A

   4、观察矩阵B

   5、初始概率PI


状态转移矩阵A:

   就是隐藏状态之间,前一个状态和后一个状态转移是的概率。如我们以天气为例,假设天气有3种状态:sunny,cloudy,rainy,并假设昨天的天气状态和今天的天气状态有一定的关系,我们用一个矩阵来描述


           

weather
yesterday
weather today

SunnyCloudyRainy
Sunny0.5000.3750.125
Cloudy0.2500.1250.625
Rainy0.2500.3750.375

   根据上面的这个矩阵我们知道,如果昨天是Sunny,今天还是Sunny的概率是0.500。

   一般来说这个矩阵是固定不变的,即不会随着时间的变化而变化。  



观察矩阵B:

   已知隐藏状态的情况下,观察状态的概率。假如天气有3种状态:sunny,cloudy,rainy,而我们观察到的是海藻的状态,我们假定有4种:Dry,Dryish,Damp,Soggy,他们之间的变化规律也可以用一个矩阵来表示


hidden
states
observed states

DryDryishDampSoggy
Sunny0.600.200.150.05
Cloudy0.250.250.250.25
Rainy0.050.100.350.50


   根据上面的这个矩阵我们知道,在隐藏状态使sunny的情况下,dry的概率是0.60,dryish的概率是0.20,damp的概率是0.15,soggy的概率是0.05



初始化概率PI:

   因为HMM是用来描述一个序列的,肯定会有一个初始的概率,它是一个一维数组,表示隐藏状态最初的概率,如

Sunny0.63
Cloudy0.17
Rainy0.20

表示初始的时候,runny的概率是0.63,cloudy的概率是0.17,rainy的概率是0.20.



HMM主要用来解决3个方面的问题:

(1) 评估

根据已知的HMM找出一个观察序列的概率。

这 类问题是假设我们有一系列的HMM模型,来描述不同的系统(比如夏天的天气变化规律和冬天的天气变化规律),我们想知道哪个系统生成观察状态序列的概率最 大。反过来说,把不同季节的天气系统应用到一个给定的观察状态序列上,得到概率最大的哪个系统所对应的季节就是最有可能出现的季节。(也就是根据观察状态 序列,如何判断季节)。在语音识别中也有同样的应用。

我们会用forward algorithm 算法来得到观察状态序列对应于一个HMM的概率。

(2) 解码

根据观察序列找到最有可能出现的隐状态序列

回想水藻和天气的例子,一个盲人隐士只能通过感受水藻的状态来判断天气状况,这就显得尤为重要。我们使用viterbi algorithm来解决这类问题。

viterbi算法也被广泛的应用在自然语言处理领域。比如词性标注。字面上的文字信息就是观察状态,而词性就是隐状态。通过HMM我们就可以找到一句话上下文中最有可能出现的句法结构。

(3) 学习

从观察序列中得出HMM

这是最难的HMM应用。也就是根据观察序列和其代表的隐状态,生成一个三元组HMM (隐马尔科夫模型(HMM)学习之 概要_hmm 语音识别 隐马尔科夫,A,B)。使这个三元组能够最好的描述我们所见的一个现象规律。

我们用forward-backward algorithm来解决在现实中经常出现的问题--转移矩阵和混淆矩阵不能直接得到的情况。