隱馬爾可夫模型(HMM)是可用於標註問題的統計學習模型,描述由隱藏的馬爾可夫鏈隨機生成觀測序列的過程,屬於生成模型。
說到隱馬爾可夫模型(HMM),我們先來了解下馬爾可夫模型(Markov模型),Markov模型是一種統計模型,廣泛地應用在語音識別,詞性自動標註,音字轉換,概率文法等各個自然語言處理的應用領域。
一. 馬爾可夫模型(Markov模型)
設是隨機變數序列,其中每個隨機變數的取值在有限集
,稱為狀態空間。Markov特徵是:
有限歷史假設
時間不變性
如果 具有這些特徵,那麼這個隨機變數序列稱為一個馬爾可夫過程(鏈)。
Markov的形式化表示:一個馬爾可夫模型是一個三元組 ,其中
是狀態的集合,
是初始狀態的概率,
是狀態間的轉移概率。具體例子用圖形表示如下,
相應的分別是,
隱馬爾可夫模型與馬爾可夫模型不同的是各個狀態(或者狀態轉移弧)都有一個輸出,但是狀態是不可見的。
最簡單的情形:不同的狀態只能有不同的輸出,
增加一點靈活性:不同的狀態,可以輸出相同的輸出,
再增加一點靈活性:輸出在狀態轉移中進行,
最大的靈活性:在狀態轉移中以特定的概率分佈輸出,
這就得到了我們要講的隱馬爾可夫模型。
二. 隱馬爾可夫模型(HMM)
1.HMM的形式化定義
HMM是一個五元組,其中
是狀態的集合,
是輸出字元的集合,
是初始狀態的概率,
是狀態轉移的概率,
是狀態轉移時輸出字元的概率。
一個HMM的例子用圖形表示如下,
2. 隱馬爾可夫模型的三個基本問題
評估問題:給定一個模型
,如何高效地計算某一輸出字元序列的概率
?
解碼問題:給定一個輸出字元序列
,和一個模型
,如何確定產生這一序列概率最大的狀態序列
?
學習問題:給定一個輸出字元的序列
,如何調整模型的引數使得產生這一序列的概率最大?
3. 評估問題的解法
已知,
,計算
?我們先來化簡一下
,
方案一:直接計演算法
窮舉所有可能的的情況,求和得到
,但是時間複雜度太高,為
。
方案二:前向演算法(Forward algorithm)
使用動態規劃使得演算法更高效,定義一個前向變數表示到時刻部分觀測序列為
且狀態為
的概率為向前概率,記為
,即
則可以遞推得到,
前向過程演算法如下,
一個簡單的前向過程例子如下,
方案三:向後演算法(backward algorithm)
同樣的道理,我們定義在時刻狀態為
的條件下,從
到
的部分觀測序列為
的概率為後向概率,記作
,即
直接採用遞推即可得到後向演算法。
後向演算法過程如下,
1. 初始化
2. 推導
3. 總和
4. 解碼問題的解法
給定一個輸出字元序列,和一個模型
,如何確定產生這一序列概率最大的狀態序列?
即
我們定義表示為在
時刻到達狀態
,輸出字元
時,輸出前面
個字元的最可能路徑的概率,
則有
這樣我們就得到了維特比演算法(Viterbi Algorithm),演算法過程如下:
一個簡單的viterbi演算法舉例如下,
5. 學習問題解法
給定一個輸出字元的序列,如何調整模型的引數使得產生這一序列的概率最大?
隱馬爾可夫模型的學習,根據訓練資料是包括觀測資料和對應的狀態序列還是隻有觀測序列,可以分為有監督學習和無監督學習,其中無監督的學習即是利用EM演算法思想的Baum-Welch演算法。
方案一:有監督學習
假設訓練資料包含個長度相同的觀測序列和對應的狀態序列
,那麼可以利用極大似然估計法來估計隱馬爾可夫模型的引數
,具體估計方法如下:
- 1. 轉移概率
的估計
設樣本中時刻處於狀態
時刻
處於狀態
的頻數為
,那麼狀態轉移概率
的估計是
2. 觀測概率
的估計
設樣本中狀態為並觀測為
的頻數是
,那麼狀態為
觀測為
的概率
的估計是
3. 初始狀態概率
的估計
為
個樣本中初始狀態為
的概率
由於監督學習的方法需要使用訓練資料,而人工標註的代價往往很高,有時會採用非監督學習的方法。
方案二:無監督學習——Baum-Welch演算法
假設給定的訓練資料只包含個長度為
的觀測序列而沒有對應的狀態序列
,目標是學習隱馬爾可夫模型
的引數。我們將觀測序列資料看做觀測資料
,狀態序列資料看做不可觀測資料
,那麼隱馬爾可夫模型事實上是一個包含隱變數的概率模型
它的引數學習可以由EM演算法實現。
(演算法推導過程)
(1) 確定完全資料的對數似然函式 所有觀測資料寫成
,所有的隱資料寫成
,完全資料是
。完全資料的對數似然函式是
。
(2) EM演算法的E步:求
函式的
。
其中
是隱馬爾可夫模型引數的當前估計值,
是要極大化的隱馬爾可夫模型引數。因為,
所以
函式可以拆分寫成
式中求和都是對所有訓練資料的序列總長度
進行的。
(3) EM演算法的M步:極大化
函式
,求模型引數
。
由於要極大化的引數在
函式式子中單獨的出現在三個項中,所以只需要對各項分別極大化。第一項可以寫成,
注意到
滿足
,利用拉格朗日乘子法,寫出拉格朗日函式
對其求導數並令結果為0,
得到
對
求和得到
,
再代入上式子得到,
第二項可以寫成
類似於第一項,利用具有約束條件
的拉格朗日乘子法惡意求出
第三項可以寫成,
同樣利用拉格朗日乘子法,約束條件是
,注意只有在
時
對
的偏導數才不為0,以
表示,得到,
-----
為了簡便,我們使用一下式子簡化, 給定模型
和觀測
,在時刻
處於狀態
的概率記
有如下公式:
給定模型
和觀測
,在時刻
處於狀態
的概率記 :
有如下推倒:
我們結合上文以及EM演算法可以推導如下公式
Baum-Welch演算法過程:
輸入:觀測資料;
輸出:隱馬爾可夫模型引數。
1. 初始化。對,選取
得到模型
2. 遞推。對
3. 終止。得到模型引數