隐马尔可夫模型(HMM)及Viterbi算法
HMM簡(jiǎn)介
對(duì)于算法愛(ài)好者來(lái)說(shuō),隱馬爾可夫模型的大名那是如雷貫耳。那么,這個(gè)模型到底長(zhǎng)什么樣?具體的原理又是什么呢?有什么具體的應(yīng)用場(chǎng)景呢?本文將會(huì)解答這些疑惑。
本文將通過(guò)具體形象的例子來(lái)引入該模型,并深入探究隱馬爾可夫模型及Viterbi算法,希望能對(duì)大家有所啟發(fā)。
隱馬爾可夫模型(HMM,hidden Markov model)是可用于標(biāo)注問(wèn)題的統(tǒng)計(jì)學(xué)模型,描述由隱藏的馬爾可夫鏈隨機(jī)生成觀測(cè)序列的過(guò)程,屬于生成模型。HMM模型在實(shí)際的生活和生產(chǎn)中有著廣泛的應(yīng)用,包括語(yǔ)音識(shí)別,自然語(yǔ)言處理,生物信息,模式識(shí)別等領(lǐng)域。
?
引入
某天,你的女神告訴你說(shuō),她放假三天,將要去上海游玩,準(zhǔn)備去歡樂(lè)谷、迪士尼和外灘(不一定三個(gè)都會(huì)去)。
她呢,會(huì)選擇在這三個(gè)地方中的某幾個(gè)逗留并決定是否購(gòu)物,而且每天只待在一個(gè)地方。根據(jù)你對(duì)她的了解,知道她去哪個(gè)地方,僅取決于她去的上一個(gè)地方,且是否購(gòu)物的概率僅取決于她去的地方。已知她去的三個(gè)地方的轉(zhuǎn)移概率表如下:
?
稍微對(duì)這個(gè)表格做些說(shuō)明,比如第一行,前一天去了歡樂(lè)谷后,第二天還待在歡樂(lè)谷的概率為0.8,去迪士尼的概率為0.05,去外灘的概率為0.15。
??她在每個(gè)地方的購(gòu)物概率為:
?
| 歡樂(lè)谷 | 0.1 |
| 迪士尼 | 0.8 |
| 外灘 | 0.3 |
在出發(fā)的時(shí)候,她跟你說(shuō)去每個(gè)地方的可能性相同。后來(lái),放假回來(lái)后,你看了她的朋友圈,發(fā)現(xiàn)她的購(gòu)物情況如下:第一天不購(gòu)物,第二三天都購(gòu)物了。于是,你很好奇,她這三天都去了哪些地方。
??怎么樣,聰明的你能求解出來(lái)嗎?
HMM的模型參數(shù)
接下來(lái),我們將會(huì)介紹隱馬爾可夫模型(HMM)。
??隱馬爾可夫模型是關(guān)于時(shí)序的概率模型,描述由一個(gè)隱藏的馬爾可夫鏈隨機(jī)生成不可觀測(cè)的狀態(tài)隨機(jī)序列,再由各個(gè)狀態(tài)生成一個(gè)觀測(cè)而產(chǎn)生觀測(cè)隨機(jī)序列的過(guò)程。隱藏的馬爾可夫鏈隨機(jī)生成的狀態(tài)的序列,稱為狀態(tài)序列;每個(gè)狀態(tài)生成一個(gè)觀測(cè),而由此產(chǎn)生的觀測(cè)的隨機(jī)序列,稱為觀測(cè)序列。序列的每一個(gè)位置又可以看作是一個(gè)時(shí)刻。
??隱馬爾可夫模型由初始概率分布、狀態(tài)轉(zhuǎn)移概率分布以及觀測(cè)概率分布確定。隱馬爾可夫模型的形式定義如下:
??設(shè)Q是所有可能的狀態(tài)的集合,V是所有可能的觀測(cè)的集合,也就是說(shuō),Q是不可見(jiàn)的,而V是可見(jiàn)的,是我們觀測(cè)到的可能結(jié)果。
? ? ? ? ? ? ? ? ? ? ? ?
其中,N是可能的狀態(tài)數(shù),M是可能的觀測(cè)數(shù)。
??在剛才的例子中,Q是不可見(jiàn)的狀態(tài)集合,應(yīng)為,而V是可以觀測(cè)的集合,應(yīng)為V={購(gòu)物,不購(gòu)物}。
??I是長(zhǎng)度為T的狀態(tài)序列,O是對(duì)應(yīng)的觀測(cè)序列。
在剛才的例子中,I這個(gè)序列是我們需要求解的,即女生去了哪些地方,而O是你知道的序列,O={不購(gòu)物,購(gòu)物,購(gòu)物}。
??A是狀態(tài)轉(zhuǎn)移概率矩陣:
其中,
是在時(shí)刻t處于狀態(tài)q_i的條件下在時(shí)刻t+1轉(zhuǎn)移到狀態(tài)q_j的概率。在剛才的例子中,轉(zhuǎn)移概率矩陣為:
?
?
?
?
?
B是觀測(cè)概率矩陣:
其中,
是在時(shí)刻t處于狀態(tài)q_j的條件下生成觀測(cè)v_k的概率。在剛才的例子中:
?
是初始狀態(tài)概率向量,其中是時(shí)刻t=1處于狀態(tài)q_j的概率。在剛才的例子中,?
綜上,我們已經(jīng)講完HMM中的基本概念。同時(shí),我們可以知道,隱馬爾可夫模型由初始狀態(tài)概率向量,狀態(tài)轉(zhuǎn)移概率矩陣A,和觀測(cè)概率矩陣B決定。和A決定狀態(tài)序列,B決定觀測(cè)序列。因此,隱馬爾可夫模型可用三元符號(hào)表示,即
稱為HMM的三要素。
當(dāng)然,隱馬爾可夫模型之所以被稱為馬爾可夫模型,是因?yàn)樗褂昧藘蓚€(gè)基本的假設(shè),其中之一為馬爾可夫假設(shè)。它們分別是:
齊次馬爾科夫假設(shè),即假設(shè)隱藏的馬爾可夫鏈在任意時(shí)刻t的狀態(tài)只依賴于其前一時(shí)刻的狀態(tài),與其他時(shí)刻的狀態(tài)及觀測(cè)無(wú)關(guān),也與時(shí)刻t無(wú)關(guān)。
觀測(cè)獨(dú)立性假設(shè),即假設(shè)任意時(shí)刻的觀測(cè)只依賴于該時(shí)刻的馬爾可夫鏈的狀態(tài),與其他觀測(cè)及狀態(tài)無(wú)關(guān)。
??在剛才的假設(shè)中,我們對(duì)應(yīng)的兩個(gè)假設(shè)分別為:她去哪個(gè)地方,僅取決于她去的上一個(gè)地方;是否購(gòu)物的概率僅取決于她去的地方。前一個(gè)條件為齊次馬爾科夫假設(shè),后一個(gè)條件為觀測(cè)獨(dú)立性假設(shè)。
??以上,我們就介紹了HMM的基本概念及假設(shè)。而HMM的三個(gè)基本問(wèn)題如下:
1. 概率計(jì)算問(wèn)題。給定模型和觀測(cè)序列,計(jì)算在模型下觀測(cè)序列O出現(xiàn)的概率.
2. 學(xué)習(xí)問(wèn)題。已知觀測(cè)序列,估計(jì)模型參數(shù),使得在該模型下觀測(cè)序列概率最大。
3. 預(yù)測(cè)問(wèn)題。已知模型和觀測(cè)序列,求對(duì)給定觀測(cè)序列條件概率最大的狀態(tài)序列即給定觀測(cè)序列,求最有可能的對(duì)應(yīng)的狀態(tài)序列。
??上面的例子即為HMM的第三個(gè)基本問(wèn)題,也就是,給定觀測(cè)序列{不購(gòu)物,購(gòu)物,購(gòu)物},結(jié)果最有可能的狀態(tài)序列,即游玩的地方。
Viterbi算法
求解HMM的第三個(gè)基本問(wèn)題,會(huì)用到大名鼎鼎的維特比算法(Viterbi Algorithm)。
??維特比算法以安德魯·維特比(Andrew Viterbi)命名,是現(xiàn)代數(shù)字通信中最常用的算法,同時(shí)也是很多自然語(yǔ)言處理采用的解碼算法??梢院敛豢鋸埖刂v,維特比是對(duì)我們的生活影音力最大的科學(xué)家之一,因?yàn)榛贑DMA的3G移動(dòng)通信標(biāo)準(zhǔn)主要就是他和厄文·雅各布(Irwin Mark Jacobs)創(chuàng)辦的高通公司(Qualcomm)指定的。
??維特比算法是一個(gè)特殊但應(yīng)用最廣的動(dòng)態(tài)規(guī)劃(dynamic programming)算法,利用動(dòng)態(tài)規(guī)劃,可以解決任何一個(gè)圖中的最短路徑問(wèn)題,同時(shí),它也是求解HMM描述的第三個(gè)基本問(wèn)題的算法。
??在維特比算法中,需要引入兩個(gè)變量和。定義在時(shí)刻t狀態(tài)i的所有單個(gè)路徑中概率最大值為
定義在時(shí)刻t狀態(tài)為i的所有單個(gè)路徑中概率最大的路徑的第i-1個(gè)節(jié)點(diǎn)為
??下面是維特比算法在HMM的第三個(gè)基本問(wèn)題的算法:
Python代碼實(shí)現(xiàn)
#?-*-?coding:?utf-8?-*- #?HMM.py #?Using?Vertibi?algorithmimport?numpy?as?npdef?Viterbi(A,?B,?PI,?V,?Q,?obs):N?=?len(Q)T?=?len(obs)delta?=?np.array([[0]?*?N]?*?T,?dtype=np.float64)phi?=?np.array([[0]?*?N]?*?T,?dtype=np.int64)#?初始化for?i?in?range(N):delta[0,?i]?=?PI[i]*B[i][V.index(obs[0])]phi[0,?i]?=?0#?遞歸計(jì)算for?i?in?range(1,?T):for?j?in?range(N):tmp?=?[delta[i-1,?k]*A[k][j]?for?k?in?range(N)]delta[i,j]?=?max(tmp)?*?B[j][V.index(obs[i])]phi[i,j]?=?tmp.index(max(tmp))#?最終的概率及節(jié)點(diǎn)P?=?max(delta[T-1,?:])I?=?int(np.argmax(delta[T-1,?:]))#?最優(yōu)路徑pathpath?=?[I]for?i?in?reversed(range(1,?T)):end?=?path[-1]path.append(phi[i,?end])hidden_states?=?[Q[i]?for?i?in?reversed(path)]return?P,?hidden_statesdef?main():#?狀態(tài)集合Q?=?('歡樂(lè)谷',?'迪士尼',?'外灘')#?觀測(cè)集合V?=?['購(gòu)物',?'不購(gòu)物']#?轉(zhuǎn)移概率:?Q?->?QA?=?[[0.8,?0.05,?0.15],[0.2,?0.6,?0.2],[0.2,?0.3,?0.5]]#?發(fā)射概率,?Q?->?VB?=?[[0.1,?0.9],[0.8,?0.2],[0.3,?0.7]]#?初始概率PI?=?[1/3,?1/3,?1/3]#?觀測(cè)序列obs?=?['不購(gòu)物',?'購(gòu)物',?'購(gòu)物']P,?hidden_states?=?Viterbi(A,B,PI,V,Q,obs)print('最大的概率為:?%.5f.'%P)print('隱藏序列為:%s.'%hidden_states)main()?
輸出結(jié)果如下:
最大的概率為:?0.02688. 隱藏序列為:['外灘',?'迪士尼',?'迪士尼'].?
現(xiàn)在,你有很大的把握可以確定,你的女神去了外灘和迪士尼。
?
參考文獻(xiàn)
一文搞懂HMM(隱馬爾可夫模型):https://www.cnblogs.com/skyme/p/4651331.html
李航《統(tǒng)計(jì)學(xué)習(xí)方法》 清華大學(xué)出版社
HMM與分詞、詞性標(biāo)注、命名實(shí)體識(shí)別:http://www.hankcs.com/nlp/hmm-and-segmentation-tagging-named-entity-recognition.html
Hidden Markov Models 1: http://docplayer.net/21306742-Hidden-markov-models-1.html
吳軍 《數(shù)學(xué)之美》 人民郵電出版社
轉(zhuǎn)載于:https://www.cnblogs.com/ZFJ1094038955/p/10755809.html
總結(jié)
以上是生活随笔為你收集整理的隐马尔可夫模型(HMM)及Viterbi算法的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: TUXEDO中间件介绍及应用
- 下一篇: react学习(7)----react转