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