隱馬爾可夫模型

本文主要參考了《統計學習方法》及https://github.com/aespresso/a_journey_into_math_of_ml

請各位大佬多多指正。

隱馬爾可夫模型(hidden Markov model, HMM)描述由隱藏的馬爾可夫鏈隨機生成觀測序列的過程,屬於生成模型。可用於自動分詞、詞性標註、命名實體識別等。

以命名實體識別爲例:

一段文本:武漢市成立自由貿易試驗區。我們需要識別出濟南市(地點), 自由貿易試驗區(地點).

在我們今天使用的NER數據集中, 一共有7個標籤:

  1. "B-ORG": 組織或公司(organization)
  2. "I-ORG": 組織或公司
  3. "B-PER": 人名(person)
  4. "I-PER": 人名
  5. "O": 其他非實體(other)
  6. "B-LOC": 地名(location)
  7. "I-LOC": 地名

文本中以每個字爲單位,每個字都對應一個標籤。注意:實體開頭的那個字使用開頭爲‘B’的標籤來標註,實體中間或結尾的部分用‘I’來標註。

舉個栗子:自(B-LOC)貿(I-LOC)區(I-LOC)

什麼是隱馬爾科夫模型?

隱馬爾可夫模型是關於時序的概率模型,描述了一個由隱藏的馬爾可夫鏈隨機生成不可觀測的狀態隨機序列,再由各個狀態生成一個觀測而產生觀測隨機序列的過程,如下圖所示:

 

在上述的命名實體識別的例子中,隱狀態序列是實體標記序列, 而可觀測序列是我們可讀的原始語料文本序列。

隱馬爾可夫模型由初始狀態概率向量pi、狀態轉移概率矩陣A(對應上圖的轉移概率)和觀測概率矩陣B(對應上圖的發射概率)決定。ABpi稱爲隱馬爾可夫模型的三要素,可表示爲

設可觀測狀態序列是所有漢字的集合,用V表示,已知字數爲M;設所有可能的隱藏狀態集合爲Q,一共有N種隱藏狀態。

 

I是長度爲T的狀態序列,O是對應的觀測序列。注:每個狀態序列都對應一個觀測序列。

 

A是狀態轉移概率矩陣:

是在時刻t處於狀態qi的條件下在時刻t+1轉移到狀態qj的概率。

B是觀測概率矩陣:

 

是在時刻t處於狀態qj的條件下生成觀測vk的概率。

n是初始狀態概率向量:

 

是時刻t=1處於狀態qi的概率。

由定義可知,隱馬爾可夫模型作了兩個基本假設:

(1) 齊次馬爾可夫性假設,即假設隱藏的馬爾可夫鏈在任意時刻t的狀態只依賴於其前一時刻的狀態,與其他時刻的狀態及觀測無關,也與時刻t無關

(2) 觀測獨立性假設,即假設任意時刻的觀測只依賴於該時刻的馬爾可夫鏈的狀態,與其他觀測及狀態無關.

一般而言,隱馬爾可夫模型有3個基本問題

(1)概率計算問題。給定模型λ和觀測序列,計算在模型之下觀測序列O出現的概率。

(2)學習問題。己知觀測序列,估計模型參數,使得在該模型下觀測序列概率最大。即用極大似然估計的方法估計參數。

(3)預測問題,也稱爲解碼問題。己知模型和觀測序列,求對給定觀測序列條件概率P(I | O)最大的狀態序列,即給定觀測序列,求最有可能的對應的狀態序列。注:我們常說的詞性標註、命名實體識別就是此類。

(1)概率計算問題:

1)直接計算法:

計算量太大,一般不考慮

2)前向算法:

給定隱馬爾可夫模型,定義到時刻t部分觀測序列o1,o2,... ,ot 且狀態爲qi的概率爲前向概率,記作

可以遞推地求得前向概率及觀測序列概率

步驟(1)初始化前向概率,是初始時刻的狀態i1=qi和觀測o1的聯合概率。

步驟(2)是前向概率的遞推公式,應該是對t時刻進行遞推算出直到t=T-1時刻的t=1,2,…,T-1。

計算到時刻t+1部分觀測序列爲o1,o2,... ,ot ,ot+1且在時刻t+1處於狀態qi的前向概率。(j)是到時刻t觀測到o1,o2,... ,ot並在時刻t處於狀態的前向概率,那麼乘積(j)就是到時刻t觀測到o1,o2,... ,ot在在時刻t處於狀態而在時刻t+1到達狀態qi的聯合概率。對這個乘積在時刻t的所有可能的N個狀態求和,其結果就是到時刻t觀測爲o1,o2,... ,ot並在時刻t+1處於狀態qi的聯合概率。方括弧裏的值與觀測概率bi(ot+1)的乘積恰好是到時刻t+1觀測到o1,o2,... ,ot ,ot+1且在時刻t+1處於狀態qi的前向概率。即對t時刻進行遞推算出t=T-1時刻的

步驟(3):終止   

減少計算量的原因在於每一次計算直接引用前一個時刻的計算結果,避免重複計算。利用前向概率計算的計算量是O(N^2·T)階的,而不是直接計算的O(T·N^2)階。

(3)後向算法

給定隱馬爾可夫模型,定義在時刻t狀態爲qi的條件下,從t+1到T的部分觀測序列爲ot+1,ot+2 ,... ,oT的概率爲後向概率,記作

可以遞推地求得後向概率及觀測序列概率

步驟(1)初始化後向概率,對最終時刻的所有狀態qi規定

步驟(2)是後向概率的遞推公式,應該是對t時刻進行遞推算出直到t=1時刻的,i=1,2,...,N,t= T-1,T-2,…,1。

爲了計算在時刻t狀態爲qi的條件下,從t+1到T的部分觀測序列爲, ,... ,的後向概率。只需考慮在時刻t十1所有可能的N個狀態

的轉移概率(即項),以及在此狀態下的觀測的觀測概率(即bj(oi+1)項),然後考慮狀態qj之後的觀測序列的後向概率(即)。

步驟(3)求解的思路與步驟(2)一致,只是初始概率代替轉移概率.

(2)學習問題

監督學習方法:

採根據已給數據,採用極大似然估計法來估計隱馬爾科夫模型的參數

1、轉移概率的估計

設樣本中時t處於狀態i時刻t+1轉移到狀態j的頻數爲Aij,那麼狀態轉移概率的估計是

 

2、觀測概率bj(k)的估計

設樣本中狀態爲j並觀測爲k的頻數是Bjk,那麼狀態爲j觀測爲k的概率的估計是

 

 3、初始狀態概率的估計爲S個樣本中初始狀態爲qi的頻率

(3)預測算法

這裏主要介紹維特比算法。維特比算法實際是用動態規劃解隱馬爾可夫模型預側問題,即用動態規劃找到概率最大路徑(最優路徑)。在命名實體識別種。就是通過維特比算法找到文本對應的最可能的實體標註序列。

總結:計算並記錄在每個時刻中每種隱狀態的最大概率,還記錄最大概率是從前一時刻的哪種隱狀態轉移的,最後從結尾依次回溯最大概率,即得到了最優路徑。

先尊重下公式算法,然後舉實例說明:

爲了更好理解,下面舉實例說明:

假設有2種可能觀測的結果{0,1},有3種可能的隱狀態,我們已經觀測到一種序列O=

並已經學習到了如下圖所示的隱馬模型的參數

 

 

接着我們建立兩張表分別來存儲之前提到的每種隱狀態的最大概率和最大概率是從前一時刻的哪種隱狀態轉移的,如圖有:

 

1、t=0時刻是初始狀態,這時根據初始隱狀態π和t=1時的觀測結果= 0,計算T1在t=0時的隱狀態,T1[0][0]= π0·B[0][0]=0.2·0.5=0.1,T1[1][0]= π1·B[1][0]=0.4·0.4=0.16,T1[0][3]= π2·B[0][2]=0.4·0.7=0.28,因爲此時是初始狀態,故t=0時刻T2都爲空,則得到下表:

 

現在計算t=1時刻的情況,以計算T1[0][1]舉例,從t=0到t=1有三種可能性,分別是

取三種路徑中可能性最大的那條路徑,T1[0][1]=max{0.1·0.5·0.5,0.16·0.3·0.5,0.28·0.2·0.5}=0.028,再記錄當前最大概率前一時刻的的隱狀態I,

則T2[0][1]=argmax{0.1·0.5·0.5,0.16·0.3·0.5,0.28·0.2·0.5}=2,如下圖所示:

接下來的步驟同上,最後得到下表:

回溯計算:

計算最後一步最大可能的隱狀態,即求T1在t=2時的argmax:

 

由T2進行回溯,因爲之前就存儲了當前最大概率是從前一步轉移過來的隱狀態:

同樣方法得到:

那麼就得到了最大可能的隱狀態序列:

時間複雜度:

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章