HMM 隐马尔科夫模型。这里面有一个马尔科夫过程,一个马尔科夫过程是状态间的转移仅依赖于前n 个状态的过程。这个过程被称之为n 阶马尔科夫模型,其中n 是影响下一个状态选择的(前)n 个状态。最简单 的马尔科夫过程是一阶模型,它的状态选择仅与前一个状态有关。这里要注意它与确定性系统并不相同,因为下一个状态的选择由相应的概率决定,并不是确定性的。这里的马尔科夫过程只是一个假设过程,在现实过程中很多情况都可以看做一个马尔科夫过程。
用一个例子来简单的理解一下最基本的HMM概念:
考虑一个简单的例子,有人试图通过一片海藻推断天气——民间传说告诉我们‘湿透的’海藻意味着潮湿阴雨,而‘干燥的’海藻则意味着阳光灿烂。如果它处于一个中间状态(‘有湿气’),我们就无法确定天气如何。然而,天气的状态并没有受限于海藻的状态,所以我们可以在观察的基础上预测天气是雨天或晴天的可 能性。另一个有用的线索是前一天的天气状态(或者,至少是它的可能状态)——通过综合昨天的天气及相应观察到的海藻状态,我们有可能更好的预测今天的天气。【在这里,海藻的状态是可观测的,我们假设天气是一个马尔科夫过程,因此天气的状况只与前一天的天气相关,因此预测今天的天气我们就可以从1.昨天的天气2.观测状态海藻的状态来推断】。在这里,假设只有三种天气状态:多云;晴;雨。
下面的状态转移矩阵显示的是天气例子中可能的状态转移概率(每一行加和等于1):
用以下三个参数描述一个一阶马尔科夫过程
状态:三个状态——晴天,多云,雨天。
向量:定义系统初始化时每一个状态的概率。
状态转移矩阵:给定前一天天气情况下的当前天气概率。
任何一个可以用这种方式描述的系统都是一个马尔科夫过程。
描述这个过程我们有两个状态,观测状态(水藻的状态)和隐藏状态(天气的状态)。结合语音识别:我们听到的声音是来自于声带、喉咙大小、舌头位置以及其他一些东西的组合结果。所有这些因素相互作用产生一个单词的声音,一套语音识别系统检测的声音就是来自于个人发音时身体内部物理变化所引起的不断改变的声音。一些语音识别装置工作的原理是将内部的语音产出看作是隐藏的状态,而将声音结果作为一系列观察的状态,这些由语音过程生成并且最好的近似了实际(隐 藏)的状态【所以说在kaldi中一个音素由三个状态描述,这三个状态并没有什么实际的物理意义,是一个隐藏的状态】。在这两个例子中,需要着重指出的是,隐藏状态的数目与观察状态的数目可以是不同的。一个包含三个状态的天气系统(晴天、多云、雨天)中,可以观察到4 个等级的海藻湿润情况(干、稍干、潮湿、湿润);纯粹的语音可以由80 个音素描述,而身体的发音系统会产生出不同数目的声音,或者比80 多,或者比80 少。
在这种情况下,观察到的状态序列与隐藏过程有一定的概率关系。我们使用隐马尔科夫模型对这样的过程建模,这个模型包含了一个底层隐藏的随时间改变的马尔科夫过程,以及一个与隐藏状态某种程度相关的可观察到的状态集合。
隐马尔科夫模型
为了定义一个隐马尔科夫模型,我们用以下几个参数:
隐藏状态:一个系统的(真实)状态,可以由一个马尔科夫过程进行描述(例如,天气)。
* 观察状态:在这个过程中‘可视’的状态(例如,海藻的湿度)。
* 向量:包含了(隐)模型在时间t=1 时一个特殊的隐藏状态的概率(初始概率)。
* 状态转移矩阵:包含了一个隐藏状态到另一个隐藏状态的概率
* 混淆矩阵:包含了给定隐马尔科夫模型的某一个特殊的隐藏状态,观察到的某个观察状态的概率。
1.定义。
一个隐马尔科夫模型是一个三元组( π, A, B)。
π=(πi):初始化概率向量;
A=(aij):状态转移矩阵;
B = (bij):混淆矩阵
2.应用
既然定义隐马尔科夫模型,我们需要知道怎么应用。
一旦一个系统可以作为HMM 被描述,就可以用来解决三个基本问题。其中前两个是模式识别问题:给定HMM 求一个观察序列的概率(评估);搜索最有可能生成一个观察序列的隐藏状态训练(解码)。第三个问题是给定观察序列生成一个HMM(学习)。
(a)评估
考虑这样的问题,我们有一些描述不同系统的隐马尔科夫模型(也就是一些( π,A,B)三元组的集合)及一个观察序列。我们想知道哪一个HMM 最有可能产生了这个给定的观察序列。例如,对于海藻来说,我们也许会有一个“夏季”模型和一个“冬季”模型,因为不同季节之间的情况是不同的——我们也许想根据海藻湿度的观察序列来确定当前的季节。
我们使用前向算法(forward algorithm)来计算给定隐马尔科夫模型。(HMM)后的一个观察序列的概率,并因此选择最合适的隐马尔科夫模型(HMM)。
在语音识别中这种类型的问题发生在当一大堆数目的马尔科夫模型被使用,并且每一个模型都对一个特殊的单词进行建模时。一个观察序列从一个发音单词中形成,并且通过寻找对于此观察序列最有可能的隐马尔科夫模型(HMM)识别这个单词。【这句话的意思就是在训练过程中,我们会对每一个音素进行HMM建模,每一个HMM都对应一个编号,所以说在识别的过程中,我们通过这样一个过程去找到音素所对应的HMM,那么我们也就能得到这样一个特征对应的HMM那么就能得到他所对应的音素】
b) 解码(Decoding)
给定观察序列搜索最可能的隐藏状态序列另一个相关问题,也是最感兴趣的一个,就是搜索生成输出序列的隐藏状态序列。在许多情况下我们对于模型中的隐藏状态更感兴趣,因为它们代表了一些更有价值的东西,而这些东西通常不能直接观察到。考虑海藻和天气这个例子,一个盲人隐士只能感觉到海藻的状态,但是他更想知道天气的情况,天气状态在这里就是隐藏状态。我们使用Viterbi 算法(Viterbi algorithm)确定(搜索)已知观察序列及HMM下最可能的隐藏状态序列。iterbi 算法(Viterbi algorithm)的另一广泛应用是自然语言处理中的词性标注。在词性标注中,句子中的单词是观察状态,词性(语法类别)是隐藏状态(注意对于许多单词,如wind,fish 拥有不止一个词性)。对于每句话中的单词,通过搜索其最可能的隐藏状态,我们就可以在给定的上下文中找到每个单词最可能的词性标注。
c)学习(Learning)
根据观察序列生成隐马尔科夫模型。第三个问题,也是与HMM 相关的问题中最难的,根据一个观察序列(来自于已知的集合),以及与其有关的一个隐藏状态集,估计一个最合适的隐马尔科夫模型(HMM),也就是确定对已知序列描述的最合适的(π ,A,B)三元组。当矩阵A和B不能够直接被(估计)测量时,前向-后向算法(forward-backwardalgorithm)被用来进行学习(参数估计),这也是实际应用中常见的情况。