1. 程式人生 > >詳解隱馬爾科夫模型

詳解隱馬爾科夫模型

隱馬爾科夫模型

摘要
本文重點講解隱馬爾科夫(HMM)模型的模型原理,以及與模型相關的三個最重要問題:求解、解碼和模型學習。 #### 隱馬爾科夫模型的簡單介紹 為了方便,下文統一用HMM代替隱馬爾科夫模型。HMM實際上是一種圖概率模型。之所以叫做隱馬爾科夫模型,是因為模型與普通的馬爾科夫模型不同的是,HMM含有隱變數空間,並且遵循馬爾科夫假設。這樣說太抽象,我們看下圖: ![](https://img2020.cnblogs.com/blog/1781665/202003/1781665-20200322211423043-831700448.png) 其中$Y_i\in Q={q_1,q_2,...,q_N}$,$X_i \in V={v_1,v_2,...,v_M}$。並且記觀測序列$X = X_1,X_2,...,X_T$ 隱狀態序列$Y = Y_1,Y_2,...,Y_T$。我們首先介紹HMM三個重要引數,然後下面再解釋這些引數的具體物理含義。 $$ 狀態轉移矩陣: A = [a_{ij}]N\times N \\ a_{ij} =P(Y_t=q_j|Y_{t-1}=q_i),i=1,2,...,N\\ 觀測概率矩陣: B = [b_{jk}]N\times M \\ b_{jk} = P(X_t=v_k|Y_t=q_j), j = 1,2,...,N;k=1,2,...,M\\ 初始分佈: \pi=[\pi_1,\pi_2,...,\pi_N]\\ \pi_i = P(Y_0=q_i),i = 1,2,...,N $$ 也就是說,狀態轉移概率決定了狀態間的單步轉移情況,而觀測發射矩陣決定了從隱狀態到觀測狀態的轉移情況。而初始分佈決定了模型的狀態初始分佈。為了敘述方便,我們記上面的引數為$\lambda=(A,B,\pi)$ HMM有如下兩個假設,齊次性質假設和觀測獨立性假設,分別敘述如下: - 齊次馬爾科夫假設: $$ P(Y_t|X_1,...,X_{t-1},Y_1,...,Y_{t-1})=P(Y_t|Y_{t-1}) $$ 也就是任何時刻的隱藏狀態只與上一時刻的隱藏狀態有關,與其他的隱藏狀態和觀測狀態無關。 - 觀測獨立性假設: $$ P(X_t|X_1,...,X_T,Y_1,...,Y_T)=P(X_t|Y_t) $$ 即任意時刻的觀測只由其同時刻的隱狀態所決定,與其他隱藏狀態和觀測狀態無關。 為了更形象的理解這個模型,下面舉一個我覺得比較貼切的例子。 假設有兩個人分別記為P1和P2,他們中間隔了一堵牆。其中P1被關在了牆裡面,P2在外面。這兩個人僅僅能通過一個窗子交流。兩個人分別有以下的特點:P1記性特別差,只能記住上一次說過的單詞。並且每次說話時也只受上一次說話內容所影響。而P2可以看成一個特殊的轉錄機,他每次說的單詞都只受P1當前說的單詞所影響。並且P2有一個很長的紙帶,會把每次說的單詞記錄下來。並且假設P1和P2的詞彙表都是有限的。 - 如果給定P2的文字片段,我們能否給出該文字片段的概率(已知模型引數$\lambda$) - 給定P2的文字片段,假設我們已經知道了P1的詞彙表,我們能否給出P1最可能說了哪段話(已知模型引數$\lambda$) - 給定大量的(P2,P1)文字對片段,能否推測出模型引數$\lambda$,或者僅僅給出大量的P2文字片段,能否學出模型引數$\lambda$ 實際上面的三個問題就對應著預測,解碼和模型學習的三個問題。並且如果P1的詞彙表是分詞標記標籤,P2的詞彙表是漢語,那麼所對應的就是分詞問題。把P1的詞彙表是命名實體標籤,P2的詞彙表是漢語,那麼所對應的問題實際上就是命名實體識別(NER)問題。 如果我們不關心模型的具體使用,只是關心HMM是一個什麼樣的模型,那麼到這裡完全可以將模型說明白。但是我們要更細緻的瞭解HMM的話(從程式碼層面上)那麼還是逐一解決上述三個重要的問題。 #### 預測問題 所謂的預測問題,實際上是求下面的序列概率: $$ p = P(X_1,X_2,...,X_T;\lambda) $$ 根據全概率公式我們有: $$ \begin{align*} p&=P(X_1,X_2,...,X_T;\lambda)\\ &=\sum_{Y}P(X_1,X_2,...,X_t,Y_1,Y_2,...,Y_t;\lambda) \end{align*} $$ 其中$Y$是隱狀態空間的內所有組合,顯然當隱狀態空間特別大時,如果通過簡單的列舉加和方式,面臨著指數爆炸這一難題(簡單的分析可知,上述的求和複雜度是$O(N^T)$)。 通過上述分析可知,高效的求解序列概率的關鍵在於求解聯合概率。根據鏈式法則及HMM的假設我們可以得到如下公式: $$ \begin{align*} P(X_{<=T},Y_{<=T};\lambda)& = P(X_1,X_2,...,X_T,Y_1,Y_2,...,Y_T;\lambda) \\ &=P(X_T,Y_T|X_1,...,X_{T-1},Y_1,...,Y_{T-1}) \cdot P(X_1,...,X_{T-1},Y_1,...,Y_{T-1})\\ &=P(X_T|Y_T) \cdot P(Y_T|Y_{T-1})\cd