要毕业啦,小编最近忙着找工作,更新的比较慢,希望大家不要放弃我哦,电臀师兄的地域文章判别下期更新,已经约好啦~今天我们介绍上次说好的隐马尔可夫模型(HMM)。
关于HMM模型的介绍,网上的资料已经烂大街,但是大部分都是在背书背公式,尽可能的撇开公式,撇开推导。结合实际例子,争取做到雅俗共赏,童叟无欺。没有公式就没有伤害,小编争取尽可能少用公式。
文章最后有举栗子🌰,不喜欢从概念出发的同学们,可以直接跳到文末的例子分割线那~等有点感觉了,再回头看概念和原理。
一、HMM的由来
隐马尔可夫模型(Hidden Markov Model,HMM)其实并不是19世界俄罗斯数学家马尔可夫(Andrey Markov)发明的,而是美国数学家鲍姆等人提出的,HMM的训练方法(鲍姆-韦尔奇算法)就是以他的名字命名的。
二、HMM的简介
在介绍HMM之前,我们可能需要先了解马尔可夫假设,马尔可夫链等,概念如下:
1 马尔可夫假设
即随机过程中各个状态st的概率分布,只与它前一个状态st-1有关,即
2 马尔可夫链
符合马尔可夫假设的随机过程称为马尔可夫过程,也称为马尔可夫链。如下图:
图1 马尔可夫链
在上图的马尔可夫链中,四个圈表示四个状态,每条边表示一个可能的状态转换,边上的权值是转移概率。
3 隐马尔可夫模型
隐马尔可夫模型是上述马尔可夫链的一个扩展:任一时刻t的状态st是不可见的。所以观察者没法通过观察到一个状态序列s1,s2,s3,…sT-1来推测转移概率等参数。但是,隐马尔可夫在每个时刻t会输出一个符号ot,而且ot和st相关而且仅和st相关。这个被称为独立输出假设。隐马尔可夫模型结构如下:其中包含的状态s1,s2,s3,s4是一个典型的马尔可夫链。鲍姆把这种模型称为“隐含”马尔可夫模型。如下图:
图2 隐马尔可夫模型
简而言之,HMM的核心就是一个五元组:
状态值集合
观察值集合
转移概率矩阵
发射概率矩阵
初始状态分布
围绕HMM有三种类型的问题:
1)给定一个模型,如何计算某个特定的输出序列的概率。(利用Forward-backward算法)
2)给定一个模型和某个特定的输出序列,如何找到最可能产生这个输出的状态序列。(利用viterbi算法)
3)给定足够的观测数据,如何估计隐马尔可夫模型的参数。(利用Baum-Welch算法)
其中,第三种问题最玄乎也最不常用,第二种问题最常用,【中文分词】,【语音识别】,【新词发现】,【词性标注】都有它的一席之地。此处涉及的三个算法暂时不做深入介绍,文章太长大家估计也看不下去。
三、HMM的应用
20世界80年代末李开复坚持采用隐马尔可夫模型的框架,成功的开发了世界上第一个大词汇量连续语音识别系统sphinx。接下来,隐马尔可夫模型陆续成功地应用于机器翻译、拼写纠错、手写体识别、图像处理、基因序列分析等领域。近20年来,它广泛应用于股票预测和投资。所以大概应用如下:
语音识别、中文断词/分词或光学字符识别;
机器翻译;
生物信息学和基因组学;
股票预测和投资;
四、HMM的相关文献参考
1 Lawrence R. Rabiner, A Tutorial onHidden Markov Models and Selected Applications in Speech Recognition.Proceedings of the IEEE, 77 (2), p. 257–286, February 1989.
2 浙江大学计算机学院《人工智能引论》课件,《第九讲 隐马尔可夫模型初步》
~此处是例子分割线~
🌰🌰🌰🌰🌰🌰🌰🌰🌰🌰🌰🌰🌰🌰🌰🌰🌰
没有公式,就没有伤害,举个栗子🌰:
假设你有一个住得很远的朋友,他每天跟你打电话告诉你他那天做了什么。你的朋友仅仅对三种活动感兴趣:公园散步,购物以及清理房间。他选择做什么事情只凭天气。你对于他所住的地方的天气情况并不了解,但是你知道总的趋势。在他告诉你每天所做的事情基础上,你想要猜测他所在地的天气情况。
你认为天气的运行就像一个马尔可夫链。其有两个状态 "雨"和"晴",但是你无法直接观察它们,也就是说,它们对于你是隐藏的。每天,你的朋友有一定的概率进行下列活动:“散步”,“购物”, 或 “清理”。 因为你朋友告诉你他的活动,所以这些活动就是你的观察数据。这整个系统就是一个隐马尔可夫模型HMM。
你知道这个地区的总的天气趋势,并且平时知道你朋友会做的事情。也就是说这个隐马尔可夫模型的参数是已知的。可以用程序语言(Python)写下来:
在这些代码中:
states代表状态序列;
observations代表观察序列;
start_probability代表了你对于你朋友第一次给你打电话时的天气情况的不确定性(你知道的只是那个地方平均起来下雨多些);
transition_probability表示基于马尔可夫链模型的天气变迁,在这个例子中,如果今天下雨,那么明天天晴的概率只有30%;
emission_probability表示了你朋友每天做某件事的概率。如果下雨,有 50% 的概率他在清理房间;如果天晴,则有60%的概率他在外头散步;
今天的文章就到这里啦,希望没有辜负大家的等待~下期见哈~