没有合适的资源?快使用搜索试试~ 我知道了~
资源推荐
资源详情
资源评论
隐马尔科夫模型()依然是读者访问“我爱自然语言处理”的一个热门相关关键词,我曾在
《 学习最佳范例与崔晓源的博客》中介绍过国外的一个不错的 学习教程,并且国内崔晓
源师兄有一个相应的翻译版本,不过这个版本比较简化和粗略,有些地方只是概况性的翻译了一下,
省去了一些内容,所以从今天开始计划在 上系统的重新翻译这个学习教程,希望对大家有点
用。
一、介绍(Introduction)
我们通常都习惯寻找一个事物在一段时间里的变化模式(规律)。这些模式发生在很多领域,
比如计算机中的指令序列,句子中的词语顺序和口语单词中的音素序列等等,事实上任何领域中的
一系列事件都有可能产生有用的模式。
考虑一个简单的例子,有人试图通过一片海藻推断天气——民间传说告诉我们‘湿透的’海藻意味
着潮湿阴雨,而‘干燥的’海藻则意味着阳光灿烂。如果它处于一个中间状态(‘有湿气’),我们就无
法确定天气如何。然而,天气的状态并没有受限于海藻的状态,所以我们可以在观察的基础上预测
天气是雨天或晴天的可能性。另一个有用的线索是前一天的天气状态(或者,至少是它的可能状
态)——通过综合昨天的天气及相应观察到的海藻状态,我们有可能更好的预测今天的天气。
这是本教程中我们将考虑的一个典型的系统类型。
首先,我们将介绍产生概率模式的系统,如晴天及雨天间的天气波动。
然后,我们将会看到这样一个系统,我们希望预测的状态并不是观察到的——其底层系统是隐
藏的。在上面的例子中,观察到的序列将是海藻而隐藏的系统将是实际的天气。
最后,我们会利用已经建立的模型解决一些实际的问题。对于上述例子,我们想知道:
给出一个星期每天的海藻观察状态,之后的天气将会是什么
给定一个海藻的观察状态序列,预测一下此时是冬季还是夏季?直观地,如果一段时间内海
藻都是干燥的,那么这段时间很可能是夏季,反之,如果一段时间内海藻都是潮湿的,那么这段时
间可能是冬季。
二、生成模式(Generating Patterns)
、确定性模式()
考虑一套交通信号灯,灯的颜色变化序列依次是红色红色黄色绿色黄色红色。这个序列可
以作为一个状态机器,交通信号灯的不同状态都紧跟着上一个状态。
注意每一个状态都是唯一的依赖于前一个状态,所以,如果交通灯为绿色,那么下一个颜色状
态将始终是黄色——也就是说,该系统是确定性的。确定性系统相对比较容易理解和分析,因为状
态间的转移是完全已知的。
、非确定性模式()
为了使天气那个例子更符合实际,加入第三个状态——多云。与交通信号灯例子不同,我们并
不期望这三个天气状态之间的变化是确定性的,但是我们依然希望对这个系统建模以便生成一个天
气变化模式(规律)。
一种做法是假设模型的当前状态仅仅依赖于前面的几个状态,这被称为马尔科夫假设,它极大
地简化了问题。显然,这可能是一种粗糙的假设,并且因此可能将一些非常重要的信息丢失。
当考虑天气问题时,马尔科夫假设假定今天的天气只能通过过去几天已知的天气情况进行预测
——而对于其他因素,譬如风力、气压等则没有考虑。在这个例子以及其他相似的例子中,这样的
假设显然是不现实的。然而,由于这样经过简化的系统可以用来分析,我们常常接受这样的知识假
设,虽然它产生的某些信息不完全准确。
一个马尔科夫过程是状态间的转移仅依赖于前 个状态的过程。这个过程被称之为 阶马尔科
夫模型,其中 是影响下一个状态选择的(前) 个状态。最简单的马尔科夫过程是一阶模型,它
的状态选择仅与前一个状态有关。这里要注意它与确定性系统并不相同,因为下一个状态的选择由
相应的概率决定,并不是确定性的。
下图是天气例子中状态间所有可能的一阶状态转移情况:
对于有 个状态的一阶马尔科夫模型,共有 个状态转移,因为任何一个状态都有可能是所
有状态的下一个转移状态。每一个状态转移都有一个概率值,称为状态转移概率——这是从一个状
态转移到另一个状态的概率。所有的 个概率可以用一个状态转移矩阵表示。注意这些概率并不
随时间变化而不同——这是一个非常重要(但常常不符合实际)的假设。
下面的状态转移矩阵显示的是天气例子中可能的状态转移概率:
也就是说,如果昨天是晴天,那么今天是晴天的概率为 ,是多云的概率为 。注意,
每一行的概率之和为 。
要初始化这样一个系统,我们需要确定起始日天气的(或可能的)情况,定义其为一个初始概
率向量,称为 向量。
也就是说,第一天为晴天的概率为 。
现在我们定义一个一阶马尔科夫过程如下:
状态:三个状态——晴天,多云,雨天。
向量:定义系统初始化时每一个状态的概率。
状态转移矩阵:给定前一天天气情况下的当前天气概率。
任何一个可以用这种方式描述的系统都是一个马尔科夫过程。
、总结
我们尝试识别时间变化中的模式,并且为了达到这个目我们试图对这个过程建模以便产生这样
的模式。我们使用了离散时间点、离散状态以及做了马尔科夫假设。在采用了这些假设之后,系统
产生了这个被描述为马尔科夫过程的模式,它包含了一个 向量(初始概率)和一个状态转移矩阵。
关于假设,重要的一点是状态转移矩阵并不随时间的改变而改变——这个矩阵在整个系统的生命周
期中是固定不变的。
三、隐藏模式(Hidden Patterns)
、马尔科夫过程的局限性
在某些情况下,我们希望找到的模式用马尔科夫过程描述还显得不充分。回顾一下天气那个例
子,一个隐士也许不能够直接获取到天气的观察情况,但是他有一些水藻。民间传说告诉我们水藻
的状态与天气状态有一定的概率关系——天气和水藻的状态是紧密相关的。在这个例子中我们有两
组状态,观察的状态(水藻的状态)和隐藏的状态(天气的状态)。我们希望为隐士设计一种算法,
在不能够直接观察天气的情况下,通过水藻和马尔科夫假设来预测天气。
一个更实际的问题是语音识别,我们听到的声音是来自于声带、喉咙大小、舌头位置以及其他
一些东西的组合结果。所有这些因素相互作用产生一个单词的声音,一套语音识别系统检测的声音
就是来自于个人发音时身体内部物理变化所引起的不断改变的声音。
一些语音识别装置工作的原理是将内部的语音产出看作是隐藏的状态,而将声音结果作为一系
列观察的状态,这些由语音过程生成并且最好的近似了实际(隐藏)的状态。在这两个例子中,需
要着重指出的是,隐藏状态的数目与观察状态的数目可以是不同的。一个包含三个状态的天气系统
(晴天、多云、雨天)中,可以观察到 个等级的海藻湿润情况(干、稍干、潮湿、湿润);纯粹
的语音可以由 个音素描述,而身体的发音系统会产生出不同数目的声音,或者比 多,或者比
少。
在这种情况下,观察到的状态序列与隐藏过程有一定的概率关系。我们使用隐马尔科夫模型对
这样的过程建模,这个模型包含了一个底层隐藏的随时间改变的马尔科夫过程,以及一个与隐藏状
态某种程度相关的可观察到的状态集合。
、隐马尔科夫模型( !)
下图显示的是天气例子中的隐藏状态和观察状态。假设隐藏状态(实际的天气)由一个简单的
一阶马尔科夫过程描述,那么它们之间都相互连接。
隐藏状态和观察状态之间的连接表示:在给定的马尔科夫过程中,一个特定的隐藏状态生成特
定的观察状态的概率。这很清晰的表示了‘进入’一个观察状态的所有概率之和为 ,在上面这个例子
中就是 "#$%&'()"#$%*'(及 "#$%+(之和。(对这句话我有点疑惑?)
除了定义了马尔科夫过程的概率关系,我们还有另一个矩阵,定义为混淆矩阵(,'
-),它包含了给定一个隐藏状态后得到的观察状态的概率。对于天气例子,混淆矩阵是:
注意矩阵的每一行之和是 。
、总结(&'.)
我们已经看到在一些过程中一个观察序列与一个底层马尔科夫过程是概率相关的。在这些例子
中,观察状态的数目可以和隐藏状态的数码不同。
我们使用一个隐马尔科夫模型()对这些例子建模。这个模型包含两组状态集合和三组概
率集合:
/隐藏状态:一个系统的(真实)状态,可以由一个马尔科夫过程进行描述(例如,天气)。
/观察状态:在这个过程中‘可视’的状态(例如,海藻的湿度)。
/ 向量:包含了(隐)模型在时间 0 时一个特殊的隐藏状态的概率(初始概率)。
/状态转移矩阵:包含了一个隐藏状态到另一个隐藏状态的概率
/混淆矩阵:包含了给定隐马尔科夫模型的某一个特殊的隐藏状态,观察到的某个观察状态的
概率。
因此一个隐马尔科夫模型是在一个标准的马尔科夫过程中引入一组观察状态,以及其与隐藏状
态间的一些概率关系。
四、隐马尔科夫模型(Hidden Markov Models)
、定义(1,2 !)
一个隐马尔科夫模型是一个三元组( )3)4)。
:初始化概率向量;
:状态转移矩阵;
:混淆矩阵;
在状态转移矩阵及混淆矩阵中的每一个概率都是时间无关的——也就是说,当系统演化时这些
矩阵并不随时间改变。实际上,这是马尔科夫模型关于真实世界最不现实的一个假设。
、应用(562)
一旦一个系统可以作为 被描述,就可以用来解决三个基本问题。其中前两个是模式识别
的问题:给定 求一个观察序列的概率(评估);搜索最有可能生成一个观察序列的隐藏状态
训练(解码)。第三个问题是给定观察序列生成一个 (学习)。
(评估(7!')
考虑这样的问题,我们有一些描述不同系统的隐马尔科夫模型(也就是一些" )3)4(三元组的
集合)及一个观察序列。我们想知道哪一个 最有可能产生了这个给定的观察序列。例如,对
于海藻来说,我们也许会有一个“夏季”模型和一个“冬季”模型,因为不同季节之间的情况是不同的—
—我们也许想根据海藻湿度的观察序列来确定当前的季节。
我们使用前向算法(,682)来计算给定隐马尔科夫模型()后的一个观察
序列的概率,并因此选择最合适的隐马尔科夫模型"(。
在语音识别中这种类型的问题发生在当一大堆数目的马尔科夫模型被使用,并且每一个模型都
对一个特殊的单词进行建模时。一个观察序列从一个发音单词中形成,并且通过寻找对于此观察序
列最有可能的隐马尔科夫模型()识别这个单词。
$(解码( 8)
给定观察序列搜索最可能的隐藏状态序列。
另一个相关问题,也是最感兴趣的一个,就是搜索生成输出序列的隐藏状态序列。在许多情况
下我们对于模型中的隐藏状态更感兴趣,因为它们代表了一些更有价值的东西,而这些东西通常不
能直接观察到。
考虑海藻和天气这个例子,一个盲人隐士只能感觉到海藻的状态,但是他更想知道天气的情况,
天气状态在这里就是隐藏状态。
我们使用 9$算法(9$82)确定(搜索)已知观察序列及 下最可能的
隐藏状态序列。
9$ 算法(9$82)的另一广泛应用是自然语言处理中的词性标注。在词性标
注中,句子中的单词是观察状态,词性(语法类别)是隐藏状态(注意对于许多单词,如
6,12 拥有不止一个词性)。对于每句话中的单词,通过搜索其最可能的隐藏状态,我们就可
以在给定的上下文中找到每个单词最可能的词性标注。
*)学习(:8)
根据观察序列生成隐马尔科夫模型。
第三个问题,也是与 相关的问题中最难的,根据一个观察序列(来自于已知的集合),
以及与其有关的一个隐藏状态集,估计一个最合适的隐马尔科夫模型(),也就是确定对已知
序列描述的最合适的( )3)4)三元组。
当矩阵 3 和 4 不能够直接被(估计)测量时,前向后向算法(,6$ 6
82)被用来进行学习(参数估计),这也是实际应用中常见的情况。
、总结(&'.)
由一个向量和两个矩阵" )3)4(描述的隐马尔科夫模型对于实际系统有着巨大的价值,虽然经常
只是一种近似,但它们却是经得起分析的。隐马尔科夫模型通常解决的问题包括:
对于一个观察序列匹配最可能的系统——评估,使用前向算法(,682)解决;
对于已生成的一个观察序列,确定最可能的隐藏状态序列——解码,使用 9$算法
(9$82)解决;
对于已生成的观察序列,决定最可能的模型参数——学习,使用前向后向算法(,6
$ 682)解决。
HMM 学习最佳范例五:前向算法 1
五、前向算法(Forward Algorithm)
计算观察序列的概率(;82$$.,$!<')
穷举搜索( 7-2'!2,')
给定隐马尔科夫模型,也就是在模型参数( )3)4(已知的情况下,我们想找到观察序列的概
率。还是考虑天气这个例子,我们有一个用来描述天气及与它密切相关的海藻湿度状态的隐马尔科
夫模型"(,另外我们还有一个海藻的湿度状态观察序列。假设连续 天海藻湿度的观察结果是
(干燥、湿润、湿透)——而这三天每一天都可能是晴天、多云或下雨,对于观察序列以及隐藏的
状态,可以将其视为网格:
剩余30页未读,继续阅读
资源评论
- Fuxiangjun2012-10-01以往找了一些hmm的资料看,都很头大,这篇资料算是讲的比较清楚的,很有收获。
- cbbbbccbb2012-11-16写得很详细,还附有代码
zhy871029
- 粉丝: 0
- 资源: 9
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功