HMM隐马尔科夫模型 学习总结
隱馬爾可夫模型(Hidden Markov Model,簡稱HMM)是結(jié)構(gòu)最簡單的動態(tài)貝葉斯網(wǎng)(dynamic Bayesian network),這是一種著名的有向圖模型,主要用于時序數(shù)據(jù)建模,在語音識別、自然語言處理等領(lǐng)域有廣泛應(yīng)用。
隱馬爾可夫模型中的變量可分為兩組,第一組是狀態(tài)變量 {y1,y2,y3,…yn},其中 yi∈Y表示第i時刻的系統(tǒng)狀態(tài)。通常假定狀態(tài)變量是隱藏的、不可被觀測的,因此狀態(tài)變量亦稱隱變量(hidden variable)。第二組是觀測變量{x1, x2,. . . , xn},其中x ∈X表示第i時刻的觀測值。在隱馬爾可夫模型中,系統(tǒng)通常在多個狀態(tài){ s1, s2,…,sN}之間轉(zhuǎn)換,因此狀態(tài)變量yi的取值范圍Y(稱為狀態(tài)空間)通常是有N個可能取值的離散空間。觀測變量xi可以是離散型也可以是連續(xù)型。
圖中的箭頭表示了變量間的依賴關(guān)系。在任一時刻,觀測變量的取值僅依賴于狀態(tài)變量,即 xt由yt確定,與其他狀態(tài)變量及觀測變量的取值無關(guān)。同時,t時刻的狀態(tài)yt僅依賴于t―1時刻的狀態(tài)yt-1,與其余n-2個狀態(tài)無關(guān).這就是所謂的“馬爾可夫鏈”(Markov chain),即:系統(tǒng)下一時刻的狀態(tài)僅由當(dāng)前狀態(tài)決定,不依賴于以往的任何狀態(tài)。基于這種依賴關(guān)系,所有變量的聯(lián)合概率分布為
除了結(jié)構(gòu)信息,欲確定一個隱馬爾可夫模型還需以下三組參數(shù):
狀態(tài)轉(zhuǎn)移概率:模型在各個狀態(tài)間轉(zhuǎn)換的概率
輸出觀測概率:模型根據(jù)當(dāng)前狀態(tài)獲得各個觀測值的概率
初始狀態(tài)概率:模型在初始時刻各狀態(tài)出現(xiàn)的概率
HMM在序列標(biāo)注中的應(yīng)用
序列標(biāo)注問題的輸入是一個觀測序列,輸出是一個標(biāo)記序列或狀態(tài)序列。問題的目標(biāo)在于學(xué)習(xí)一個模型,使它能夠?qū)τ^測序列給出標(biāo)記序列作為預(yù)測。
PPT中舉了一個例子,人腦產(chǎn)生一段話,是先產(chǎn)生一段基于語法的詞性序列,再在這個詞性序列的基礎(chǔ)上,產(chǎn)生一句話。
“John saw the saw”,這段話的詞性是"PN V D N"。那如何由序列{“PN V D N”}到{“John saw the saw”}?
P(x) = P(“John saw the saw”)
P(y) = P(“PN V D N”)
想要得到P(x,y),可由條件概率公式
P(x,y) = P(y) × P(x|y)
先求得 P(y) 和 P(x|y),也就是 P(“PN V D N”) 和 P( “John saw the saw” | “PN V D N” )
而這兩個概率,可以從大量語料的訓(xùn)練中得到
將兩個公式展開
P(y) = P(“PN V D N”) = P( “PN” | “Start”) × P( “V” | “PN”) × P( “D” | “V”) × P( “N” | “D”) × P( “End” | “N”)
P(x|y) = P( “John saw the saw” | “PN V D N” ) = P( “John” | “PN” ) × P( “saw” | “V” ) × P( “the” | “D” ) × P( “saw” | “N” )
上圖是展開后的計算公式
下面分別計算P(y) 和 P(x|y),也就是 P(“PN V D N”) 和 P( “John saw the saw” | “PN V D N” )
第一步:
從大量語料中,得到這四個詞性之間的轉(zhuǎn)換概率,可以計算出
P( “PN V D N” ) = P( “PN” | “Start”) × P( “V” | “PN”) × P( “D” | “V”) × P( “N” | “D”) × P( “End” | “N”)
第二步
同樣是在大量語料中,可以分別得到
從詞性為PN的詞中選到"John"的概率 P( “John” | “PN” )
從詞性為V的詞中選到"saw"的概率 P( “saw” | “V” )
從詞性為D的詞中選到"the"的概率 P( “the” | “D” )
從詞性為N的詞中選到"the"的概率 P( “saw” | “N” )
從而可以得到
P( “John saw the saw” | “PN V D N” ) = P( “John” | “PN” ) × P( “saw” | “V” ) × P( “the” | “D” ) × P( “saw” | “N” )
這樣就可以計算出P(x,y)
上面的是一個小熱身,現(xiàn)在進入正題
在上面的例子中,y是知道的,x是不知道的。
現(xiàn)在,x是知道的,而y是要被找出來的,這就成了詞性標(biāo)注問題。
找出y,就是找出令P(y|x)最大時y的取值,因P(x)的值與y無關(guān),故找出令P(y|x)最大時y的取值,也就是找出令P(x,y)最大時y的取值。
找出P(x,y)最大時的y值有兩種方法
第一種方法:窮舉法
假設(shè)觀測序列X長度為L,隱狀態(tài)序列Y取值有S種狀態(tài),那么則需要對每一個隱狀態(tài)進行S次預(yù)測,一共是|S|^L次。
第二種方法:Viterbi算法
時間復(fù)雜度為O(L|S|^2)
這是我看到的講解Viterbi算法很淺顯易懂的一篇知乎:
https://www.zhihu.com/question/20136144
維特比算法(Viterbi algorithm)是一種動態(tài)規(guī)劃算法。它用于尋找最有可能產(chǎn)生觀測事件序列的-維特比路徑-隱含狀態(tài)序列,特別是在馬爾可夫信息源上下文和隱馬爾可夫模型中。
下面簡單舉例說明使用Viterbi算法求S到E的最短路徑
對于t時刻的每個狀態(tài),記錄下前一個時刻也就是t-1時刻的所有狀態(tài)到每個t時刻狀態(tài)的最小路徑
在A1→B1,A2→B1,A3→B1的這三條路徑中,A3→B1路徑是最短的,故保留A3→B1,刪去其他路徑。同理,在A1→B2,A2→B2,A3→B2的這三條路徑中,A1→B2路徑是最短的,故保留A1→B2,刪去其他路徑。其他的路徑也是同理得到的。
最后發(fā)現(xiàn),S到E只有三條路徑,只要從這三條路徑中計算出最短的那條就可以得到S→E的最短路徑。
但是HMM算法在解決詞性標(biāo)注問題上也存在一些問題(網(wǎng)上拷的)
1、HMM只依賴于每一個狀態(tài)和它對應(yīng)的觀察對象:
序列標(biāo)注問題不僅和單個詞相關(guān),而且和觀察序列的長度,單詞的上下文,等等相關(guān)。
2、目標(biāo)函數(shù)和預(yù)測目標(biāo)函數(shù)不匹配:
HMM學(xué)到的是狀態(tài)和觀察序列的聯(lián)合分布P(Y,X),而預(yù)測問題中,我們需要的是條件概率P(Y|X)。
HMM會給訓(xùn)練集語料中出來沒有出現(xiàn)過的序列賦予很高的概率。
再舉個例子說明
在訓(xùn)練集中
詞性N下一個詞性接V,V的觀測值是詞c,這樣的一個序列在訓(xùn)練集中出現(xiàn)9次
詞性P下一個詞性接V,V的觀測值是詞a,這樣的一個序列在訓(xùn)練集中同樣出現(xiàn)9次
詞性N下一個詞性接D,D的觀測值是詞a,這樣的一個序列在訓(xùn)練集中出現(xiàn)1次
P(V|N) = 0.9 ,P(D|N) = 0.1
P(“c”|V) = 0.5 ,P(“a”|V) = 0.5
P(“a”|D) = 1
在預(yù)測詞為a的詞性時,當(dāng)前一個詞性為N,計算概率值
P(“a”,N) = P(“a”|N) × P(N)
P(“a”|N) =P (?|N) × P(“a”|?)
當(dāng) ?=V 時,P(“a”,N)概率比 ?=D 時的概率值更大
但是訓(xùn)練集中并沒有出現(xiàn)過N→V→"a"
如果依據(jù)訓(xùn)練集,此處的隱狀態(tài)應(yīng)該是D
對HMM而言,它會覺得語料中沒有的N→V→"a"出現(xiàn)的概率比N→D→"a"出現(xiàn)的概率更高。由于這種“腦補”的現(xiàn)象,當(dāng)訓(xùn)練集很少的時候,HMM的表現(xiàn)比更好一些。但是當(dāng)訓(xùn)練集很大的時候,HMM的表現(xiàn)就不那么好了。
總結(jié)
以上是生活随笔為你收集整理的HMM隐马尔科夫模型 学习总结的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: jdk1.8版本连接Access数据库驱
- 下一篇: HuaWei ❀ 镜像流量配置案例与说明