一、馬爾科夫過程:
在已知目前狀態(現在)的條件下,它未來的演變(將來)不依賴於它以往的演變 (過去 )。例如森林中動物頭數的變化構成——馬爾可夫過程。在現實世界中,有很多過程都是馬爾可夫過程,如液體中微粒所作的布朗運動、傳染病受感染的人數、車站的候車人數等,都可視為馬爾可夫過程。
二、馬爾科夫鏈:
時間和狀態都是離散的馬爾可夫過程稱為馬爾可夫鏈,簡記為Xn=X(n),n=0,1,2…
三、馬爾可夫模型(Markov Model):
是一種統計模型,廣泛應用在語音識別,詞性自動標注,音字轉換,概率文法等各個自然語言處理等應用領域。經過長期發展,尤其是在語音識別中的成功應用,使它成為一種通用的統計工具。
一個馬爾科夫過程包括一個初始向量和一個狀態轉移矩陣。關於這個假設需要注意的一點是狀態轉移概率不隨時間變化。
四、隱馬爾科夫模型:
(1)概述
在某些情況下馬爾科夫過程不足以描述我們希望發現的模式。譬如,一個隱居的人可能不能直觀的觀察到天氣的情況,但是有一些海藻。民間的傳說告訴我們海藻的狀態在某種概率上是和天氣的情況相關的。在這種情況下我們有兩個狀態集合,一個可以觀察到的狀態集合(海藻的狀態)和一個隱藏的狀態(天氣的狀況)。我們希望能找到一個算法可以根據海藻的狀況和馬爾科夫假設來預測天氣的狀況。
其中,隱藏狀態的數目和可以觀察到的狀態的數目可能是不一樣的。在語音識別中,一個簡單的發言也許只需要80個語素來描述,但是一個內部的發音機制可以產生不到80或者超過80種不同的聲音。同理,在一個有三種狀態的天氣系統(sunny、cloudy、rainy)中,也許可以觀察到四種潮濕程度的海藻(dry、dryish、damp、soggy)。在此情況下,可以觀察到的狀態序列和隱藏的狀態序列是概率相關的。於是我們可以將這種類型的過程建模為一個隱藏的馬爾科夫過程和一個和這個馬爾科夫過程概率相關的並且可以觀察到的狀態集合。
(2)HMM的模型表示
HMM由隱含狀態S、可觀測狀態O、初始狀態概率矩陣pi、隱含狀態概率轉移矩陣A、可觀測值轉移矩陣B(混淆矩陣)組成。
pi和A決定了狀態序列,B決定了觀測序列,因此,HMM可以由三元符號表示:
HMM的兩個性質:
1. 齊次假設:
2.觀測獨立性假設:
齊次假設:本質就是時刻t的狀態為qi,原本是要給定t時刻之前的所有狀態和觀測才可以確定,但是其實我們給出前一個時刻t-1的狀態就可將t時刻與之前隔斷,也就是說我們假設t時刻與t-1之前的所有狀態和觀測是獨立的。
觀測獨立性假設:本質就是t時刻的觀測為ot,原本是要給定包括t時刻和t時刻之前所有的觀測和狀態才能確定,現在我們給定t時刻狀態qi就將ot與前邊隔斷,也就是說我們假設t時刻的觀測ot與t時刻之前的所有狀態和觀測是獨立的
(3)HMM的三個問題
概率計算問題:前向-后向算法----動態規划
給定模型 λ = (A, B, π)和觀測序列O={o1, o2, o3 ...},計算模型λ下觀測O出現的概率P(O | λ)
學習問題:Baum-Welch算法----EM算法
已知觀測序列O={o1, o2, o3 ...},估計模型λ = (A, B, π)的參數,使得在該參數下該模型的觀測序列P(O | λ)最大
預測問題:Viterbi算法----動態規划
解碼問題:已知模型λ = (A, B, π)和觀測序列O={o1, o2, o3 ...},求給定觀測序列條件概率P(I | O,λ)最大的狀態序列I
a)概率計算問題
對於概率計算問題,可以采用暴力計算法、前向算法和后向算法
暴力法:
問題:已知HMM的參數 λ,和觀測序列O = {o1, o2, ...,oT},求P(O|λ)
思路:--------------------------------------------------------------------------
- 列舉所有可能的長度為T的狀態序列I = {i1, i2, ..., iT};每個i都有N個可能的取值。
- 求各個狀態序列I與觀測序列 的聯合概率P(O,I|λ);
- 所有可能的狀態序列求和∑_I P(O,I|λ)得到P(O|λ)。
步驟:
1,最終目標是求O和I同時出現的聯合概率,即:
P(O,I|λ)= P(O|I, λ)P(I|λ)
那就需要求出P(O|I, λ) 和 P(I|λ)。
2,求P(I|λ) ,即狀態序列I = {i1,i2, ..., iT} 的概率:
2.1,P(I|λ) = P(i1,i2, ..., iT |λ)
=P(i1 |λ)P(i2, i3, ..., iT |λ)
=P(i1 |λ)P(i2 | i1, λ)P(i3, i4, ..., iT |λ)
=......
=P(i1 |λ)P(i2 | i1, λ)P(i3 | i2, λ)...P(iT | iT-1, λ)
而上面的P(i1 |λ) 是初始為狀態i1的概率,P(i2 | i1, λ) 是從狀態i1轉移到i2的概率,其他同理,於是分別使用初始概率分布π 和狀態轉移矩陣A,就得到結果:
PS:上面的ai1i2代表A的第i1行第i2列。
3,P(O|I, λ),即對固定的狀態序列I,觀測序列O的概率是:
4,代入第一步求出P(O,I|λ)。
5,對所有可能的狀態序列I求和得到觀測序列O的概率P(O|λ):
時間復雜度:
每個時刻有n個狀態,一共有t個時刻,而根據上面的第5步可以知道每個時刻狀態ai相乘的復雜度為nT,然后乘以各個對應的b,所以時間復雜度大概為:O(TnT)階
概率消失:
可以通過取對數,防止P的值過小。
前向概率:
前向概率的定義:當第t個時刻的狀態為i時,前面的時刻分別觀測到q1,q2, ..., qt的概率。
初值:
遞推:
最終值:
時間復雜度:
由公式可見,括號里面的時間復雜度為N^2,迭代過程中,又乘上T個時刻的b,因此,時間復雜度為O(TN^2)階的。
對於暴力法和前向算法時間復雜度的理解:
對於兩種算法,其實本質上都是通過狀態 x 觀測概率獲得的概率值,只不過區別在於,前向算法將每一個時刻的狀態概率先進行相加然后乘以觀測概率,獲得最終值。
可以理解為:a1*a2*a3... 如果ai有n種取值,其復雜度為 O(n^T)
對於另一種表達方式: α*a1 同理 α有n種取值,ai有n種取值,那么復雜度為 O(n^2)
時間復雜度計算:
后向概率和前向概率類似,此處不贅述。
b)學習問題
學習問題分兩種:
- 觀測序列和隱狀態序列都給出,求HMM。這種學習是監督學習。
- 給出觀測序列,但沒給出隱狀態序列,求HMM。這種學習是非監督學習,利用Baum-Welch(鮑姆-韋爾奇)算法。
對於監督學習,利用大數定律“頻率的極限是概率”即可求解:
對於非監督學習,一般采用Baum-Welch算法。
對於觀測數據Q、隱藏狀態I、概率P(Q, I ;λ)即為暴力法的表達式,其對數似然函數為:ln(P(Q, I ;λ)),然后用EM算法求解即可。
求 π:利用約束條件:所有πi的和為1。
拉格朗日函數求解:
同理:
c)預測問題:
對於預測問題,本文主要講Viterbi算法。Viterbi算法實際是用動態規划的思路求解HMM預測問題。求出概率最大的路徑,每個路徑對應一個狀態序列。
盒子和球模型λ= (A, B,π),狀態集合Q={1, 2, 3},觀測集合V={白,黑},已知觀測序列“白黑白白黑”,求最優的隱藏狀態
同理:
可以看到結果如圖:
我們從后往前查詢,第5時刻最大概率的狀態為3,然后往前推導,究竟第5個狀態是從哪一個狀態的來的呢?
max{ 0.00384*0.1 0.00768*0.6 0.0144*0.3 } 可以看到,應該取狀態2 -> 3才是最大的,故第4個時刻的狀態為2。
最終求得最優狀態為:2 3 2 2 3
五、viterbi用於詞性標注
詞性標注問題映射到隱馬模型可以表述為:模型中狀態(詞性)的數目為詞性符號的個數N;從每個狀態可能輸出的不同符號(單詞)的數目為詞匯的個數M。假設在統計意義上每個詞性的概率分布只與上一個詞的詞性有關(即詞性的二元語法),而每個單詞的概率分布只與其詞性相關。那么,我們就可以通過對已分詞並做了詞性標注的訓練語料進行統計,統計出HMM的參數 λ,當然這就是上述學習問題。
然后可以根據已知的詞語,通過viterbi算法,求出每個詞語對應的詞性,即完成詞性標注。