這次學習會講了隱馬爾科夫鏈,這是一個特別常見的模型,在自然語言處理中的應用也非常多。
常見的應用比如分詞,詞性標註,命名實體識別等問題序列標註問題均可使用隱馬爾科夫模型.
下面,我根據自己的理解舉例進行講解一下HMM的基本模型以及三個基本問題,希望對大家理解有幫助~
隱馬爾可夫模型是關於時序的概率模型,描述由一個隱藏的馬爾可夫鏈隨機生成不可觀測的狀態隨機序列,再由各個狀態生成一個觀測而產生觀測隨機序列的過程。
隱藏的馬爾可夫鏈隨機生成的狀態的序列,稱為狀態序列(state sequence);每個狀態生成一個觀測,而由此產生的觀測的隨機序列,稱為觀測序列(observation sequence)。
序列的每一個位置又可以看作是一個時刻。
下面我們引入一些符號來表示這些定義:
設Q是所有可能的狀態的集合,V是所有可能的觀測的集合。
其中,N是可能的狀態數,M是可能的觀測數。
狀態q是不可見的,觀測v是可見的。
應用到詞性標註中,v代表詞語,是可以觀察到的。q代表我們要預測的詞性(一個詞可能對應多個詞性)是隱含狀態。
應用到分詞中,v代表詞語,是可以觀察的。q代表我們的標籤(B,E這些標籤,代表一個詞語的開始,或者中間等等)
應用到命名實體識別中,v代表詞語,是可以觀察的。q代表我們的標籤(標籤代表著地點詞,時間詞這些)
上面提到的方法,有興趣的同學可以再細入查閱相應資料。
I是長度為T的狀態序列,O是對應的觀測序列。
<img src="https://pic1.zhimg.com/v2-07c3af4a16a5babbdad861edd7b539a0_b.png" data-rawwidth="300" data-rawheight="47" class="content_image" width="300" _src="https://pic1.zhimg.com/v2-07c3af4a16a5babbdad861edd7b539a0_b.png"/>我們可以看做是給定了一個詞(O)+詞性(I)的訓練集。或者一個詞(O)+分詞標籤(I)的訓練集....有了訓練數據,那麼再加上訓練算法則很多問題也就可以解決了,問題後面慢慢道來~我們可以看做是給定了一個詞(O)+詞性(I)的訓練集。
或者一個詞(O)+分詞標籤(I)的訓練集....有了訓練數據,那麼再加上訓練算法則很多問題也就可以解決了,問題後面慢慢道來~
我們繼續定義A為狀態轉移概率矩陣:
其中,
是在時刻t處於狀態qi的條件下在時刻t+1轉移到狀態qj的概率。
B是觀測概率矩陣:
其中,
是在時刻t處於狀態qj的條件下生成觀測vk的概率(也就是所謂的「發射概率」)。
所以我們在其它資料中,常見到的生成概率與發射概率其實是一個概念。
π是初始狀態概率向量:
<img src="https://pic2.zhimg.com/v2-210bc9b422d33213a6f7711c671cc559_b.png" data-rawwidth="108" data-rawheight="49" class="content_image" width="108" _src="https://pic2.zhimg.com/v2-210bc9b422d33213a6f7711c671cc559_b.png"/>其中,
隱馬爾可夫模型由初始狀態概率向量π、狀態轉移概率矩陣A和觀測概率矩陣B決定。π和A決定狀態序列,B決定觀測序列。因此,隱馬爾可夫模型可以用三元符號表示,即
稱為隱馬爾可夫模型的三要素。
如果加上一個具體的狀態集合Q和觀測序列V,構成了HMM的五元組,這也是隱馬爾科夫模型的所有組成部分。
<img src="https://pic3.zhimg.com/v2-4153e9246ada1d2d9c8fd225e039ed0e_b.png" data-rawwidth="829" data-rawheight="87" class="origin_image zh-lightbox-thumb" width="829" data-original="https://pic3.zhimg.com/v2-4153e9246ada1d2d9c8fd225e039ed0e_r.png" _src="https://pic3.zhimg.com/v2-4153e9246ada1d2d9c8fd225e039ed0e_b.png"/>舉例來說明一下,例子如下:(例子來源於維基百科)舉例來說明一下,例子如下:(例子來源於維基百科)
考慮一個村莊,所有村民都健康或發燒,只有村民醫生才能確定每個人是否發燒。醫生通過詢問患者的感受來診斷髮燒。村民只能回答說他們覺得正常,頭暈或感冒。(這裡的正常,頭暈,感冒就是我們前面說的觀察序列)
醫生認為,他的患者的健康狀況作為離散的馬可夫鏈。 「健康」和「發燒」有兩個狀態,但醫生不能直接觀察他們;健康與發燒的狀態是隱藏的(這裡的健康與發燒就是我們前面說的隱藏狀態)。每天都有機會根據患者的健康狀況,病人會告訴醫生他/她是「正常」,「感冒」還是「頭昏眼花」。
觀察(正常,感冒,暈眩)以及隱藏的狀態(健康,發燒)形成隱馬爾可夫模型(HMM),並可以用Python程式語言表示如下:
在這段代碼中,start_probability代表了醫生對患者首次訪問時HMM所處的狀態的信念(他知道患者往往是健康的)。
這裡使用的特定概率分布不是平衡的,它是(給定轉移概率)大約{'健康':0.57,'發燒':0.43}。(這裡代表的就是我們前面說的初始狀態概率pi)
transition_probability表示基礎Markov鏈中健康狀況的變化。在這個例子中,今天只有30%的機會,如果他今天健康,病人會發燒。發射概率表示患者每天感受的可能性。如果他健康,那麼有50%的機會感覺正常;如果他有發燒,那麼有60%的機會感到頭昏眼花。
那麼用圖來表示上面的例子可以如下表示:
<img src="https://pic4.zhimg.com/v2-c13d7e306fcc83daceffda6c6d51cd37_b.png" data-rawwidth="636" data-rawheight="529" class="origin_image zh-lightbox-thumb" width="636" data-original="https://pic4.zhimg.com/v2-c13d7e306fcc83daceffda6c6d51cd37_r.png" _src="https://pic4.zhimg.com/v2-c13d7e306fcc83daceffda6c6d51cd37_b.png"/>好的,例子我們描述完了,現在我們用人話來繼續描述一下第一個問題。好的,例子我們描述完了,現在我們用人話來繼續描述一下第一個問題。
第一個問題是求,給定模型的情況下,求某種觀測序列出現的概率。
比如,給定的HMM模型參數已知,求出三天觀察是(Dizzy,Cold,Normal)的概率是多少?
對應的HMM模型參數已知的意思,就是說的A,B,pi矩陣是已經知道的。
<img src="https://pic2.zhimg.com/v2-cd4f58b291ab292320064ec5b9625065_b.png" data-rawwidth="849" data-rawheight="70" class="origin_image zh-lightbox-thumb" width="849" data-original="https://pic2.zhimg.com/v2-cd4f58b291ab292320064ec5b9625065_r.png" _src="https://pic2.zhimg.com/v2-cd4f58b291ab292320064ec5b9625065_b.png"/>按照上面的例子來對應,第二個問題就是。按照上面的例子來對應,第二個問題就是。
我們已經知道了觀測序列是(Dizzy,Cold,Normal),需要求出HMM的參數問題(使得我們的觀測序列出現概率最大)。也就是我們上面說的A,B,PI三個矩陣參數
<img src="https://pic2.zhimg.com/v2-80c1cc23a613ebea13f9f914bff424f5_b.png" data-rawwidth="875" data-rawheight="78" class="origin_image zh-lightbox-thumb" width="875" data-original="https://pic2.zhimg.com/v2-80c1cc23a613ebea13f9f914bff424f5_r.png" _src="https://pic2.zhimg.com/v2-80c1cc23a613ebea13f9f914bff424f5_b.png"/>按照上面的例子來對應,第三個問題就是。按照上面的例子來對應,第三個問題就是。
我們知道了觀測序列是(Dizzy,Cold,Normal),也知道了HMM的參數,讓我們求出造成這個觀測序列最有可能對應的狀態序列。比如說是(Healthy,Healthy,Fever)還是(Healthy,Healthy,Healthy),等等,這裡有3的3次方27種可能~
致謝:
皓宇,德川,繼豪,施琦
近期文章預告:
《隱馬爾科夫模型-前向後向算法》
《隱馬爾科夫模型-維特比算法》
《深入淺出講解支持向量機》
推薦閱讀文章:
深入淺出理解決策樹算法(一)-核心思想
零基礎掌握極大似然估計
帶你搞懂樸素貝葉斯分類算法
淺析感知機(一)--模型與學習策略