HMM模型之viterbi算法

1、前言
viterbi算法是HMM模型的三大算法之一。HMM模型解決三大問題:評估、解碼和學習。viterbi用於解決解碼問題,在自然語言處理中用於解決劃分問題,分詞是對於句子的劃分,viterbi是很好的分詞算法。推薦參看的是《HMM學習最佳範例》。這裏的術語將參照《HMM最佳學習範例》。關於HMM模型中的數值引用於結巴分詞中的源代碼。

2、初始向量
這裏start_p是初始向量,下文用π表示:

P={'B': -0.26268660809250016,
        'E': -3.14e+100,
        'M': -3.14e+100,
        'S': -1.4652633398537678}

從向量中可以看出,多字詞的概率要大於單字詞,其中-3.14e+100表示一個極小的概率。

3、狀態轉移矩陣
trans_P表示狀態轉移矩陣,下文用A表示:

P={'B': {'E': -0.510825623765990, 'M': -0.916290731874155},
        'E': {'B': -0.5897149736854513, 'S': -0.8085250474669937},
        'M': {'E': -0.33344856811948514, 'M': -1.2603623820268226},
        'S': {'B': -0.7211965654669841, 'S': -0.6658631448798212}}

A中的元素值爲一個隱藏狀態轉移到另一個隱藏狀態的概率,代碼中數據結構用嵌套的字典,並只包含了非零元素。例如:B狀態只能轉移到E或者M狀態,分詞表示雙字詞和多字詞。

4、混合矩陣
emit_P表示混合矩陣,下文用C表示(爲了防止和隱藏狀態B混淆,使用C):

    P={'B': {'\u4e00': -3.6544978750449433,
            '\u4e01': -8.125041941842026,
            '\u4e03': -7.817392401429855,
            '\u4e07': -6.3096425804013165,
            '\u4e08': -8.866689067453933,
            '\u4e09': -5.932085850549891,
            '\u4e0a': -5.739552583325728,
        ....}

C矩陣中行爲隱藏狀態,列爲觀察狀態,每一行所有元素的和爲1。矩陣的值表示P(觀察狀態|隱藏狀態)。
申明:矩陣A和C都是和時間無關的,不隨時間而改變。我們把(π,A,C)叫作一個HMM模型。

5、局部最佳路徑和局部概率
在分詞中我們把待分詞的句子看爲時序列,即我們把第一個字看爲t=1。對於任意的中間狀態或者終止狀態都有許多能夠到達該狀態的路徑,我們把這些路徑中概率最大的稱爲局部最佳路徑。局部最佳路徑的概率稱爲該狀態的局部概率。
圖片來源於《HMM最佳學習範例》
圖片來源於《HMM最佳學習範例》,其中的路徑即爲到達黑點的最佳路徑。那麼在終止狀態時即句子的末尾,我們有所有隱藏狀態的局部最佳路徑和局部概率,那麼就可以選擇出全局的最佳路徑(最佳隱含狀態序列),即得到句子的劃分。

在t=1時,因爲沒有指向隱藏狀態j的路徑,局部概率爲初始概率乘以相應的觀察概率。以“英語單詞”爲例

α,B=πB×C,B

在t=2時,利用數學歸納法的思想,我們已經知道t=1時,所有隱藏狀態j的局部概率α1,j ,則‘語’的隱藏狀態爲E的局部概率爲:

α,E=C,E×maxjα,jAj,E

更爲一般的:
αt+1,j=Ck,j×maxiαt,iAi,j

6、反向指針
來回顧下在t-1時刻到t時刻的局部最佳路徑的變換過程,假設得到了再t-1時刻所有隱藏狀態i的局部最佳路徑和局部概率αt1,i ,對於時刻t,我們需要知道t-1時哪一個狀態i產生了t時刻的局部最佳路徑,我們需要記錄下i,因爲這個i值不一定是t-1時刻各個隱藏狀態中概率最大的狀態。

θ(i)=argmaxi(αt,iAi,j)

7、總結
最後,回顧一下整個的計算過程。先計算所有的局部概率:

t=1:αk,j=πk×Ck,j

t>1:αt+1,j=Ck,j×maxiαt,iAi,j

同時在計算過程中,記錄下各個狀態的反向指針i:
θ(i)=argmaxi(αt,iAi,j)

在句子的末尾再加上一個終止狀態,終止狀態的反向指針爲末尾所有隱藏狀態中局部概率最大的狀態。再通過這個反向指針遞推則得到這個序列的所有最佳隱藏狀態。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章