隱馬爾科夫模型(HMM)及其擴充_隱馬爾科夫模型

來源:互聯網
上載者:User

轉載請註明地址(http://blog.csdn.net/xinzhangyanxiang/article/details/8522078)

學習機率的時候,大家一定都學過馬爾科夫模型吧,當時就覺得很有意思,後來看了數學之美之隱馬模型在自然語言處理中的應用後,看到隱馬爾科夫模型竟然能有這麼多的應用,並且取得了很好的成果,更覺的不可思議,特地深入學習了一下,這裡總結出來。 馬爾科夫過程

馬爾科夫過程可以看做是一個自動機,以一定的機率在各個狀態之間跳轉。

考慮一個系統,在每個時刻都可能處於N個狀態中的一個,N個狀態集合是 {S1,S2,S3,...SN}。我們現在用q1,q2,q3,…qn來表示系統在t=1,2,3,…n時刻下的狀態。在t=1時,系統所在的狀態q取決於一個初始機率分布PI,PI(SN)表示t=1時系統狀態為SN的機率。

馬爾科夫模型有兩個假設:

1.      系統在時刻t的狀態只與時刻t-1處的狀態相關;(也稱為無後效性)

2.      狀態轉移機率與時間無關;(也稱為齊次性或時齊性)

第一條具體可以用如下公式表示:

P(qt=Sj|qt-1=Si,qt-2=Sk,…)= P(qt=Sj|qt-1=Si)

其中,t為大於1的任意數值,Sk為任意狀態

第二個假設則可以用如下公式表示:

P(qt=Sj|qt-1=Si)= P(qk=Sj|qk-1=Si)

其中,k為任意時刻。

下圖是一個馬爾科夫過程的範例圖:


可以把狀態轉移機率用矩陣A表示,矩陣的行列長度均為狀態數目,aij表示P(Si|Si-1)。 隱馬爾科夫過程

與馬爾科夫相比,隱馬爾科夫模型則是雙重隨機過程,不僅狀態轉移之間是個隨機事件,狀態和輸出之間也是一個隨機過程,如下圖所示:

此圖是從別處找來的,可能符號與我之前描述馬爾科夫時不同,相信大家也能理解。

該圖分為上下兩行,上面那行就是一個馬爾科夫轉移過程,下面這一行則是輸出,即我們可以觀察到的值,現在,我們將上面那行的馬爾科夫轉移過程中的狀態稱為隱藏狀態,下面的觀察到的值稱為觀察狀態,觀察狀態的集合表示為 O={O1,O2,O3,…OM}。

相應的,隱馬爾科夫也比馬爾科夫多了一個假設,即輸出僅與目前狀態有關,可以用如下公式表示:

P(O1,O2,…,Ot|S1,S2,…,St)=P(O1|S1)*P(O2|S2)*...*P(Ot|St)

其中,O1,O2,…,Ot為從時刻1到時刻t的觀測狀態序列,S1,S2,…,St則為隱藏狀態序列。

另外,該假設又稱為輸出獨立性假設。 舉個例子

舉個常見的例子來引出下文,同時方便大家理解。比如我在不同天氣狀態下去做一些事情的機率不同,天氣狀態集合為{下雨,陰天,晴天},事情集合為{宅著,自習,遊玩}。假如我們已經有了轉移機率和輸出機率,即P(天氣A|天氣B)和P(事情a|天氣A)的機率都已知道,那麼則有幾個問題要問(注意,假設一天我那幾件事情中的一件),

1.             假如一周內的天氣變化是 下雨->晴天->陰天->下雨->陰天->晴天->陰天,那麼我這一周 自習->宅著->遊玩->自習->遊玩->宅著->自習的機率是多大。

2.             假如我這一周做事序列是 自習->宅著->遊玩->自習->遊玩->宅著->自習,

不知道天氣狀態的情況下這個做事序列的機率是多大。

3.             假如一周內的天氣變化是 下雨->晴天->陰天->下雨->陰天->晴天->陰天,那我們這一周最有可能的做事序列是什麼。

4.             假如我這一周做事序列是 自習->宅著->遊玩->自習->遊玩->宅著->自習,那麼這一周的天氣變化序列最有可能是什麼。

對於第一個問題,我想大家應該都能很快知道怎麼算。(啥。不知道,答案在本文最後) 隱馬模型基本要素及基本三問題

綜上所述,我們可以得到隱馬爾科夫的基本要素,即一個五元組{S,N,A,B,PI};

S:隱藏狀態集合;

N:觀察狀態集合;

A:隱藏狀態間的轉移機率矩陣;

B:輸出矩陣(即隱藏狀態到輸出狀態的機率);

PI:初始機率分布(隱藏狀態的初始機率分布);

其中,A,B,PI稱為隱馬爾科夫的參數,用X表示。

由上述問題可以引出隱馬爾科夫的三個基本問題的其中兩個,下文中為了簡便,將隱馬爾科夫模型簡稱為HMM(Hiden Markov Model)。

HMM的三個基本問題是:

1.      給定模型(五元組),求某個觀察序列O的機率(範例問題2)

2.      給定模型和觀察序列O,求可能性最大的隱藏狀態序列(範例問題4)。

3.      對於給定的觀察序列O,調整HMM的參數,使觀察序列出現的機率最大。 前向演算法 對於第一個基本問題,計算公式為:


即對於觀察序列O,我們需要找出所有可能的隱藏狀態序列S,計算出在給定模型下S輸出為O的機率(就是範例問題一啊),然後計算機率之和。

直觀上看,假如序列O的長度為T,模型的隱藏狀態集合大小為N,那麼一共有NT個可能的隱藏狀態序列,計算複雜度極高O(NT),暴力演算法太慢了。

解決方案就是動態規劃(Dynamic Programming)。

假設觀察序列為O1,O2,O3,….,Ot. 在時刻i(1<i<=t)時,定義C為產生序列O1,O2,…,Oi且Si=Sk的機率:

其中,Sk為任意一個隱藏狀態值。

則C(i+1,Or)的計算公式為:

其中,Sr為任意一個隱藏狀態值。A為轉移機率。B為隱藏狀態到觀察狀態的機率。為了便於理解,還是看圖:


C(3,下雨)考慮了t=1和t=2的所有組合情況,同時也是C(4,下雨|陰天|晴天)的子問題。C(3,陰天)和C(3,晴天)也是如此計算,而C(i+1,Sr)計算公式則可以表示成:


由圖知:C(4,陰天)=[C(3,下雨)*A(下雨,陰天)+C(3,陰天)*A(陰天,陰天)+C(3,晴天)*A(晴天,陰天)]*B(陰天,自習)。

通過圖片,大家應該能直觀的理解該演算法了,該演算法又稱為前向演算法,那還有後向演算法。是的,後向演算法就是這個演算法倒過來嘛,也是動態規劃,這裡就不贅述了,有興趣的看參考文獻。另外,這裡沒有講解如何初始化機率,也可以去參考文獻裡查證。 維特比演算法

現在,HMM的第一個基本問題解決了,下面開始解決第二個問題,第二個問題又稱為解碼問題,同樣的,暴力演算法是計算所有可能性的機率,然後找出擁有最大機率值的隱藏狀態序列。與問題一的暴力解決方案類似,複雜度為O(NT)。

那應該用什麼方案呢。

毫無疑問,還是動態規劃啊。 假設觀察序列為O1,O2,O3,….,Ot. 在時刻i(1<i<=t)時,定義D為觀察O1,O2,…,Oi且Si=S k時產生該觀察序列的最大機率:

其中,S1,S2,….S(i-1),在此時也已經可以得到,因為它們是子問題啊。

童鞋們有麼有看到該公式和上面的前向演算法的差異。一個是對子問題求和,一個是對子問題求最大值啊。

當然,對於本問題來說,因為需要求出的是使得觀察序列機率最大的隱藏狀態的序列,而不是最大機率,所以,在演算法計算過程中,還需要記錄前一個隱藏狀態的值。比如C(4,陰天)的最大值是有子問題C(3,下雨)得來的,那麼需要在C(4,陰天)這個節點記錄前置狀態為下雨。

由於本演算法和前向演算法只是計算公式的不同,所以參考圖是一樣的,本演算法還可以參考上面演算法的圖;同樣的,解釋中沒有提到初始化,可以去看參考文獻。

本演算法又稱為維特比演算法,維特比是人名,這個老先生在上世紀70年代發明的該演算法,但在現代人看來沒什麼神秘,可見問題在解決後可能會很簡單,所以不管是生活上還是學術上都不要畏懼,勇於戰而後知戰之易矣。

相信理解了前向演算法和維特比演算法後,大家對範例問題2和範例問題4都能解決了吧,對於範例問題3,其實跟維特比演算法差不多,只不過是在觀察狀態的空間中尋找最優解。

對於基本問題三,本人還沒有理解的太透徹,這裡就不獻醜了。 應用

說了這麼多,HMM到底有什麼應用呢。

HMM一開始是在資訊理論中應用的,後來才被應用到自然語言處理還有其他Image Recognition等各個方面。下面舉兩個例子說明他的應用,一個是IME的整句解碼,一個是語音辨識。有圖為證:

IME把拼音看做是觀察狀態,需要得到的漢字為隱藏狀態,這樣,IME的整句解碼就變成了維特比解碼,其轉移機率即是二元語言模型,其輸出機率即是多音字對應不同拼音的機率。

將上圖中的拼音換成語音,就成了語音辨識問題,轉移機率仍然是二元語言模型,其輸出機率則是語音模型,即語音和漢字的對應模型。 擴充

儘管HMM模型解決問題的效果已經很好了,但在學術上,精益求精,總的想著方法使它變得更好。於是出現了針對HMM的各種擴充,這裡介紹兩種吧。

一種是對三大假設的時齊性進行擴充,即假設狀態轉移機率與時間有關。這在IME中也有實際意義的,比如作為主語的ta(他,它,她)與名詞ta(塔)和動詞ta(踏,蹋)等出現的位置一般是不一樣的,主語一般出現在句首或各種從句的開始端;比如,我們會說“他是誰”,而極少說“塔是誰”(不排除有個別奇葩的人的名字只有一個塔字),這樣,我們在考慮‘ta’shi’shui’這個拼音串時,第一個字ta考慮他,它,她的機率會大一些,塔字的機率就會小一些。

在這個方面,參考文獻中的論文《一種非時齊性的隱馬爾科夫模型在音字轉換中的應用》中提到了一種實現方法,統計語言模型時,使用詞語在句子中的位置作為位置統計出詞語的平均位置。在音字轉換的語言模型的使用時,使用拼音所對應的詞語位置與平均位置的一個函數作為權重重新估計語言模型的機率。公式如下:

其中PML(w1|w2)是最大似然估計的轉移機率,f(.)則為權重函數。

 

另外一種擴充HMM的方法則是對無後效性假設進行擴充,原來只假設某狀態只與前一狀態有關,以至於只能使用語言模型中的二元模型,現在則假設某狀態與前兩個甚至更多個狀態有關,這樣就能使用高元語言模型了。現在我們考慮只與前兩個有關,那麼這是雖然使用了三元模型,但是維特比演算法的計算就會出現問題,因為現在t時刻的狀態的機率不僅要考慮t-1時刻的狀態,還要考慮t-2時刻的狀態。

用來解決維特比演算法在三元模型下的問題(也成為二階HMM問題)的方法是:合并前後兩個狀態將二階HMM問題轉換成一階HMM問題。 合并二階HMM

對於合并二階HMM來說,可以看下圖:

為了簡便起見,我把隱藏狀態改為兩個,下雨和晴天。由圖可以看到,當t>=2時,節點中儲存著一些小節點,這些小節點的數目即為上一個狀態的狀態數目,小節點的值意義為到達該時刻狀態為Sr且前一時刻狀態為Sk時能夠產生狀態序列的最大機率。比如背景為綠色的小節點的值的意義為時刻3為下雨,時刻2為下雨時去自習->宅著->遊玩的最大機率。(注意,節點表示時刻i時某個狀態,小節點表示節點中儲存的前一狀態的節點,比如綠色的那個節點)。

對於時刻i(i>2),每個小節點的機率為

那麼對於時刻i+1,小節點的機率為:



然後,從時刻t中尋找最大的小節點回溯即可。

  範例問題一答案

上面範例問題中第一問的答案是:

機率P=P(下雨)*P(晴天|下雨)*…*P(陰天|晴天)*P(自習|下雨)*P(宅著|晴天)*…*P(自習|陰天)

         其中,第一項P(下雨)為初始機率分布(還記得馬爾科夫的t=1時刻的機率分布麼。。)。


參考文獻:

一種非時齊的隱馬爾科夫模型及其在音字轉換中的應用

統計語言模型的研究與應用

統計和規則相結合的語言模型的中文IME中的應用

 基於Markov鏈的整句輸入演算法研究與實現

參考文獻及本文pdf下載地址:猛擊這裡

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.