第 5 章 隐含马尔可夫模型

通信的过程

语音识别,汉英翻译等都符合通信模型。通信的过程本质上就是:发送者编码——信道传播——接收者解码。如何根据接收端的观测信号o_1,\ o_2,\ o_3,\ \cdots来推测信号源的发送信息s_1,\ s_2,\ s_3,\ \cdots呢?我们需要从所有的信息源中找到最可能产生观测信号的那一个信息。

通信模型

用概率论的语言描述,即是在已知o_1,\ o_2,\ o_3,\ \cdots的情况下,求得令条件概率P\left( s_1,\,\,s_2,\,\,s_3,\,\,\cdots \mid o_1,\,\,o_2,\,\,o_3,\,\,\cdots \right) 达到终于打值的那个信息串s_1,\,\,s_2,\,\,s_3,\,\,\cdots ,即:

(5.1)

其中\text{Arg}是参数 Argument 的所需,表示能获得最大值的那个信息串。

利用贝叶斯公式,公式(5.1)可等价变换为:

(5.2)

其中,P(o_{1},\ o_{2},\ o_{3},\ ...\mid s_{1},\ s_{2},\ s_{3},\ ...)表示信息s_{1},\ s_{2},\ s_{3},\ ...在传输后变成接收的信号o_1,\ o_2,\ o_3,\ \cdots的概率,这个可以通过训练得出;P(s_{1},\ s_{2},\ s_{3},\ ...)表示s_1,\ s_2,\ s_3,\ \cdots本身是一个在接收端合乎情理的信号的概率; P\left( o_1,\ o_2,\ o_3,\ \cdots \right)表示在发送端产生信息o_1,\ o_2,\ o_3,\ \cdots的概率。

为了简化问题,一旦信息o_1,\ o_2,\ o_3,\ \cdots产生了,就不会再改变,这时P\left( o_1,\ o_2,\ o_3,\ \cdots \right)就是一个可以忽略的常数,上述公式就可等价成

(5.3)

马尔科夫模型

要介绍隐含马尔可夫模型,还是要从马尔科夫链说起。如下图,在这个马尔科夫链中,状态m1只可能转换成状态m2;状态m2有60%概率转换成状态m3,有40%概率转换成状态m4;……以此类推。

马尔科夫链

马尔科夫链

马尔可夫假设为随机过程中各个状态s_t的概率分布,只与它的前一个状态s_{t-1}有关,即P\left( s_t\mid s_1,\,\,s_2,\,\,\cdots ,\,\,s_{t-1} \right) =P\left( s_t\mid s_{t-1} \right)

这里然使用非常简单的天气模型来做说明。

在这个马尔可夫模型中,存在三个状态:Sunny, Rainy, Cloudy,同时图片上标的是各个状态间的转移概率。

Markov Chains in Python: Beginner Tutorial

隐含马尔可夫模型( HMM)

以下三个 Table,从左往右:

  • Table1简单介绍 是对隐含马尔科夫模型的简单讲解。

  • Table2详细理解 是以经典的“掷骰子”案例对隐含马尔科夫模型进行讲解。

  • Table3有趣的例子 结合一些实际仔细理解隐含马尔科夫模型。

隐含马尔科夫模型是马尔科夫链的一个扩展:任一时刻t的状态s_t的不可见的。但隐含尔科夫模型在每个时刻t会输出一个符o_t,而且o_t仅和s_t相关。

隐含马尔科夫模型( Hidden Markov Models,HMM)

隐马尔可夫模型(Hidden Markov Model,HMM)是统计模型,它用来描述一个含有隐含未知参数的马尔科夫过程。其难点是从可观察的参数中确定该过程的隐含参数。然后利用这些参数来作进一步的分析,例如模式识别。

正常的马尔可夫模型中,状态对于观察者来说是直接可见的。这样状态的转换概率便是全部的参数。而在马尔可夫模型中,状态并不是直接可见的,但受状态影响的某些变量则是可见的。每一个状态在可能输出的符号上都有一概率分布。因此输出符号的序列能够透露出状态序列的一些信息。

举一个经典的例子:一个东京的朋友每天根据天气{下雨,天晴}决定当天的活动{公园散步,购物,清理房间}中的一种,我每天只能在twitter上看到她发的推“啊,我前天公园散步、昨天购物、今天清理房间了!”,那么我可以根据她发的推特推断东京这三天的天气。在这个例子里,显状态是活动,隐状态是天气。

任何一个HMM都可以通过下列五元组来描述:

param obs

观测序列

states

隐状态

start_p

初始概率(隐状态)

trans_p

转移概率(隐状态)

emit_p

发射概率(隐状态表现为显状态的概率)

假设模型在每个时刻t会输出一个符o_t,而且o_t仅和s_t相关(即马尔科夫假设),我们可以计算出某个特定状态序列s_1,\ s_2,\ s_3,\ \cdots产生输出符o_1,\ o_2,\ o_3,\ \cdots的概率 。则有:

(5.4)

现在,将马尔科夫假设独立输出假设用于通信的解码问题(5.3),即是将

(5.5)
(5.6)

(5.5),(5.6)带入(5.3)就可得(5.4)。

如何让找到概率最大值,需运用维特比算法(后面会提到)。(注:s_t可能会生成o_t,即生成概率;也可能会转化为s_{t-1},即转移概率)。

隐含马尔科夫模型的训练

首先有三个基本问题:

  1. 给定一个模型,如何计算某个特定输出序列的概率;

  2. 给定一个模型和某个特定的输出序列,如何找到最可能产生这个输出的状态序列;

  3. 给定足够的观测数据,如何估算隐含马尔可夫模型的参数。

问题1可参考贾里尼克《Statistical Methods for Speech Recognition 》。

问题2使用维特比算法来解码(后面会提到)。

关于问题3,通过大量的观察信号推测模型参数的生成概率、转移概率,以寻找最可能的模型,主要使用的是鲍穆-韦尔奇算法。首先,找到能够产生o序列的模型参数;然后,计算出这个模型产生o的概率,以及产生o的所有可能路径和产生这些路径的概率。最终,计算出一组新的模型参数,根据新的模型参数再继续寻找更好的模型参数。以此类推,直到目标函数的输出概率达到最大化。这个过程被称为期望最大化(Expectation-Maximization,即EM)。EM能保证算法收敛到一个局部最优点,却不能保证找到全局最优点。

小结

隐含马尔科夫模型最初应用与通信领域,继而推广到语音和语言处理中,成为连接自然语言处理和通信的桥梁。隐含马尔可夫模型也是机器学习的主要工具。几乎和所有机器学习的主要工具一样,它需要一个训练算法(鲍姆—韦尔奇算法)和使用时的解码算法(维特比算法)。 掌握了这两类算法,就基本上可以使用隐含马尔科夫模型这个工具了。

如今,隐含马尔可夫模型被广泛应用于机器翻译、拼音纠错、手写体识别、图像处理、基因序列分析以及股票预测和投资。

Last updated