隐马尔科夫模型基础
?引言
? ? ? 隱馬爾可夫模型(Hidden Markov model, HMM)是用于序列標(biāo)注的概率圖模型,描述一個(gè)隱藏的馬爾科夫鏈生成不可觀測的狀態(tài)序列,再由每個(gè)狀態(tài)生成一個(gè)觀測而產(chǎn)生一個(gè)觀測序列的過程,是一個(gè)生成模型。隱馬爾可夫模型在自然語言處理、語音識(shí)別、模式識(shí)別等領(lǐng)域都應(yīng)用廣泛。在自然語言處理中,基于字標(biāo)注的分詞、詞性標(biāo)注、句法分析、命名實(shí)體識(shí)別等領(lǐng)域都可以應(yīng)用隱馬爾可夫模型。
? ? ? ? 雖然現(xiàn)在深度學(xué)習(xí)大行其道,HMM(在訓(xùn)練數(shù)據(jù)充足的情況下)也不如條件隨機(jī)場(Conditional Random Field,CRF)強(qiáng)大,但是HMM依然是經(jīng)典的統(tǒng)計(jì)分析模型,HMM包含的一些基本原理和概念,是學(xué)習(xí)其他算法的基礎(chǔ),比如隨機(jī)采樣中的馬爾可夫-蒙特卡洛方法(Markov Chain Monte Carlo)用馬爾科夫鏈產(chǎn)生樣本序列,CRF中的隨機(jī)場即馬爾可夫隨機(jī)場。因此,接下去我們簡單的學(xué)習(xí)一下隱馬爾科夫模型。
2.??隱馬爾科夫模型的框架
? ? ? ?隱馬爾可夫模型的基礎(chǔ)內(nèi)容其實(shí)非常簡單,總結(jié)起來只需要記住“1、2、3”,即1個(gè)元組,2個(gè)假設(shè),3個(gè)問題。
2.1 一個(gè)元組
? ? ? ? 1個(gè)元組就是隱馬爾可夫模型的參數(shù)元組,即組成隱馬爾科夫模型的要素。一般來說是一個(gè)三元組??或者一個(gè)五元組??。五元組比三元組多了一個(gè)可能的狀態(tài)集合Q和可能的觀測集合V。Q和V是模型預(yù)設(shè)而不需要訓(xùn)練的參數(shù)(可認(rèn)為是兩個(gè)超參數(shù)),A,B,??是隱馬爾可夫模型需要訓(xùn)練的參數(shù)。
? ? ? ? A表示狀態(tài)轉(zhuǎn)移概率矩陣。假設(shè)可能的狀態(tài)集合Q總共有N個(gè)狀態(tài),則A是一個(gè)N*N的方陣,即,表示t時(shí)刻從狀態(tài)i轉(zhuǎn)移到t+1時(shí)刻狀態(tài)j的概率:
??
注意這里包含了一個(gè)隱含的約束,從狀態(tài)i轉(zhuǎn)移到所有狀態(tài)(包括他自己)的概率和為1即。
? ? ? ? B表示符號發(fā)射概率(仿射概率)矩陣。假設(shè)可能的狀態(tài)集合Q共N個(gè)狀態(tài),可能的觀測集合總共由M個(gè)觀測,則B是一個(gè)N*M的矩陣,即,其中表示t時(shí)刻從狀態(tài)j生成觀測k的概率:
??
同樣這里包含一個(gè)隱含約束條件。
? ? ? ? 是初始狀態(tài)概率分布向量,即在初始時(shí)刻(t=1)狀態(tài)的概率分布,其中。
2.2 兩個(gè)假設(shè)
? ? ? ? 三元組決定了隱馬爾可夫模型,和A決定了如何從隱藏的馬爾可夫鏈生成狀態(tài)序列I,B決定了如何從狀態(tài)序列生成觀測序列O。在這個(gè)過程中隱馬爾可夫模型做了兩個(gè)基本假設(shè):
(1)齊次馬爾可夫性假設(shè)。
?????假設(shè)隱藏的馬爾科夫鏈在時(shí)刻t的狀態(tài)只依賴于其前一刻(t-1時(shí)刻)的狀態(tài)而與其他時(shí)刻的狀態(tài)及觀測無關(guān),也與時(shí)刻t無關(guān):
??
(2)觀測獨(dú)立性假設(shè)。
?????假設(shè)任意時(shí)刻的觀測只依賴于該時(shí)刻的馬爾科夫鏈的狀態(tài),與其他觀測以及狀態(tài)無關(guān):
??
2.3?三個(gè)基本問題
? ? ? ? 隱馬爾科夫模型基于以上兩個(gè)基本假設(shè),生成一個(gè)長度為T的觀測序列的過程如下:
? ? ? ?1)按照初始狀態(tài)產(chǎn)生狀態(tài)?;
? ? ? ?2)令t=1
? ? ? ?3)按照狀態(tài)的仿射概率分布生成觀測;
? ? ? ?4)按照狀態(tài)的狀態(tài)轉(zhuǎn)移概率分布產(chǎn)生狀態(tài);
? ? ? ?5)令t=t+1,如果t小于T轉(zhuǎn)到(3),否則終止;
隱馬爾可夫模型的生成如下圖所示:
? ? ? ?在生成觀測序列時(shí)我們需要考慮全局最優(yōu)策略,而且我們更多的時(shí)候關(guān)心的不是生成的觀測而是生成觀測的最佳狀態(tài)序列,所以隱馬爾可夫模型有三個(gè)基本問題:(1)評估問題;(2)學(xué)習(xí)問題;(3)解碼問題。
2.3.1 評估問題
? ? ? ?評估問題是給定模型μ=(A, B, π)和觀測序列,計(jì)算在模型μ下觀測序列O出現(xiàn)的概率P(O | μ)。評估問題是學(xué)習(xí)問題和解碼問題的基礎(chǔ),它為學(xué)習(xí)問題和解碼問題提供了基本要素。先看下面的示意圖:
最直接計(jì)算概率P(O | μ)的方式是計(jì)算每個(gè)時(shí)刻可能狀態(tài)的轉(zhuǎn)移概率和生成觀測的概率并將所有可能路徑的概率相加得到概率P(O | μ)。但是顯而易見這種暴力計(jì)算的方式計(jì)算代價(jià)極為高昂,一個(gè)包含N個(gè)可能狀態(tài)的HMM模型生成一個(gè)長度為T的狀態(tài)序列的計(jì)算復(fù)雜度為。
? (1)前向概率
? ? ??給定隱馬爾科夫模型μ,定義到時(shí)刻t部分觀測序列為且狀態(tài)為的概率為前向概率,記作
??
前向概率的計(jì)算方式如下圖所示:
t=1時(shí)刻狀態(tài)i的前向概率為?,t時(shí)刻狀態(tài)i的前向概率為t-1時(shí)刻所有狀態(tài)的前向概率轉(zhuǎn)移到t時(shí)刻狀態(tài)i的概率之和:
于是可得概率。
? (2)后向概率
給定隱馬爾科夫模型μ,定義在時(shí)刻t狀態(tài)為的條件下,從t+1到T的部分觀測序列為的概率為后向概率,記作?
初始化后向概率時(shí),模型規(guī)定T時(shí)刻的,與前向概率相似,t時(shí)刻狀態(tài)i的后向概率的遞推公式為:
?
遞推公式如下圖所示:
最終概率。
? ? ? ?利用前向概率和后向概率的定義可以將觀測序列概率P(O|μ)統(tǒng)一寫成:
前向概率和后向概率運(yùn)用動(dòng)態(tài)規(guī)劃算法降低了概率計(jì)算的復(fù)雜度,從暴力計(jì)算的降低到了,當(dāng)T很大時(shí),這個(gè)差別將非常大。
2.3.2 學(xué)習(xí)問題
? ? ? 已知觀測序列,學(xué)習(xí)模型μ=(A, B, π)的參數(shù),使得該模型下觀測序列概率P(O | μ)最大。學(xué)習(xí)問題解決的是隱馬爾科夫模型的訓(xùn)練問題,通過訓(xùn)練數(shù)據(jù)得到模型的參數(shù)A,B,π。根據(jù)訓(xùn)練數(shù)據(jù)是否包含觀測序列相應(yīng)的狀態(tài)序列,學(xué)習(xí)問題可以用監(jiān)督學(xué)習(xí)和無監(jiān)督學(xué)習(xí)的方式訓(xùn)練。
? ? ? ?監(jiān)督學(xué)習(xí)的方式,是給定訓(xùn)練數(shù)據(jù)包含S個(gè)長度相同的觀測序列和對應(yīng)的狀態(tài)序列,利用極大似然估計(jì)來估計(jì)隱馬爾科夫模型的參數(shù):
(1)轉(zhuǎn)移概率的估計(jì)
設(shè)樣本中時(shí)刻t處于狀態(tài)i時(shí)刻t+1轉(zhuǎn)移到狀態(tài)j的頻數(shù)為,那么狀態(tài)轉(zhuǎn)移概率的估計(jì)是:
??
(2)觀測概率的估計(jì)
設(shè)樣本中狀態(tài)為j并觀測為k的頻數(shù),那么狀態(tài)為j觀測為k的概率的估計(jì)是:
??
(3)初始狀態(tài)概率πi的估計(jì)為S個(gè)樣本中初始狀態(tài)為的頻率。
當(dāng) 給定訓(xùn)練數(shù)據(jù)只包含S個(gè)長度為T的觀測序列而沒有對應(yīng)的狀態(tài)序列時(shí),那么隱馬爾科夫模型是一個(gè)以觀測序列數(shù)據(jù)為觀測數(shù)據(jù)O,以狀態(tài)序列數(shù)據(jù)為不可觀測隱數(shù)據(jù)I的概率模型:
??
此時(shí)參數(shù)的學(xué)習(xí)可以使用Baum-Welch算法實(shí)現(xiàn),這是一種期望最大化算法(EM算法)。Baum-Welch算法的輸入輸如下:
輸入:觀測數(shù)據(jù)
輸出:隱馬爾科夫模型參數(shù) μ = (A, B, π)
令則算法步驟如下:
(1)初始化
對 n=0,選取,得到模型。
(2)遞推。對n=1,2,……,
??
??
??
上面幾式等號右邊以觀測和模型計(jì)算。式中
??
??
其中是前向概率,是后向概率。
(3)終止。得到模型參數(shù)。
? ? ? ?Baum-Welch算法也叫前向-后向算法,因?yàn)槠渲械膮?shù)計(jì)算用到了前向概率和后向概率。第二步遞推公式在李航博士的《統(tǒng)計(jì)學(xué)習(xí)方法論》的隱馬爾可夫模型一章給出了詳細(xì)的推導(dǎo),有興趣的讀者可以仔細(xì)閱讀。
2.3.3 解碼問題:
? ? ? 已知模型μ=(A, B, π)和觀測序列,求對給定觀測序列條件概率P(I | O)最大的狀態(tài)序列,即給定觀測序列,求最有可能的對應(yīng)的狀態(tài)序列。在參數(shù)學(xué)習(xí)完成之后,解碼問題是隱馬爾科夫模型模型實(shí)際應(yīng)用過程中的預(yù)測問題。比如在詞性標(biāo)注中給定由單詞組成的句子(觀測序列),輸出句子單詞相應(yīng)詞性的序列(狀態(tài)序列)。
? ? ? ?解決解碼問題最直覺的方式,是在每個(gè)時(shí)刻t選擇在該時(shí)刻最優(yōu)可能出現(xiàn)的狀態(tài),從而得到一個(gè)狀態(tài)序列,將它作為預(yù)測的結(jié)果。例如,給定隱馬爾科夫模型μ和觀測序列O,在時(shí)刻t處于狀態(tài)的概率?γ?如上文的等式所定義,在每一時(shí)刻t最有可能的狀態(tài)是:
??
從而得到狀態(tài)序列。這種直接計(jì)算的近似算法,計(jì)算簡單,但是一種典型的貪心算法,沒有考慮全局最優(yōu),所以缺點(diǎn)是不能保證預(yù)測的狀態(tài)序列整體是最有可能的狀態(tài)序列。
? ? ??解決解碼問題最經(jīng)典的算法是維特比算法。維特比算法也是動(dòng)態(tài)規(guī)劃的典型應(yīng)用。它基于最優(yōu)路徑的這樣一個(gè)特性:如果最優(yōu)路徑在時(shí)刻t通過節(jié)點(diǎn),那么這一路徑從節(jié)點(diǎn)到終點(diǎn)的部分路徑,對于從到的所有可能的部分路徑來說,必須是最優(yōu)的。(至于原因,非常簡單,讀者可以自行思考一下)
? ? ? ?在說明維特比算法之前,我們首先定義維特比變量,為在t時(shí)刻狀態(tài)為i的所有單個(gè)路徑中概率最大值:
??
維特比變量的遞推公式為:
???
? ? ? ?細(xì)心的讀者可能已經(jīng)發(fā)現(xiàn)了,維特比變量的遞推公式和前向概率(變量)的遞推公式十分相似,實(shí)際上,前向變量是t時(shí)刻狀態(tài)為i的所有路徑的概率之和,維特比變量是t時(shí)刻狀態(tài)為i的單個(gè)路徑的概率最大值,如下圖所示:
? ? ? ?由上圖可以看出(實(shí)際上上圖不是隱馬爾科夫模型,但是比較契合維特比變量和前向概率的直觀比較,我實(shí)在找不到合適的圖了),紅色的路徑代表維特比變量的路徑,前向概率的路徑是所以路徑的加和。除了維特比變量,維特比算法定義了在時(shí)刻t狀態(tài)為i的所有單個(gè)路徑中概率最大的路徑的第t-1個(gè)節(jié)點(diǎn)的變量:
??
于是維特比算法流程如下:
輸入:模型 μ=(A, B, π) 和觀測;
輸出:最優(yōu)路徑。
(1)初始化
??
??
(2)遞推。對t = 2, 3, …… , T
???
(3)終止
??
??
(4)最優(yōu)路徑回溯。對t = T-1, T-2, ……, 1
??
求得最優(yōu)路徑。
3. 總結(jié)
? ? ? ?以上就是馬爾可夫模型的基本內(nèi)容,作為一種簡單的概率圖模型,隱馬爾可夫模型有著廣泛的應(yīng)用,例如概率上下文文法可以認(rèn)為是隱馬爾科夫模型模型的一種推廣,動(dòng)態(tài)貝葉斯網(wǎng)絡(luò)(dynamic Bayesian network)包含了隱馬爾科夫模型。雖然隱馬爾可夫模型也有著一些缺點(diǎn),比如過強(qiáng)的獨(dú)立性假設(shè)以及標(biāo)記偏置問題,使得隱馬爾可夫模型不像條件隨機(jī)場那么強(qiáng)大。
? ? ? ?同時(shí),在具體的實(shí)現(xiàn)過程中,前向概率等應(yīng)用了動(dòng)態(tài)規(guī)劃,可以用遞歸算法實(shí)現(xiàn),但是遞歸實(shí)現(xiàn)的簡單性往往會(huì)掩蓋算法本身的復(fù)雜性,當(dāng)觀測序列很長時(shí),尤其是隱馬爾科夫模型訓(xùn)練用的是觀測序列的總長度,用遞歸算法往往可能會(huì)出現(xiàn)棧溢出的情況,尤其像python這種沒有尾遞歸優(yōu)化的語言,在實(shí)現(xiàn)的時(shí)候必須考慮這個(gè)問題??傊?#xff0c;隱馬爾科夫模型模型是一個(gè)相對簡單的序列標(biāo)注模型,有興趣的讀者可以自己實(shí)現(xiàn)一下。
總結(jié)
- 上一篇: linux 密码复杂度,用PAM 搞定L
- 下一篇: exe文件编辑器