一次性弄懂馬爾可夫模型、隱馬爾可夫模型、馬爾可夫網絡和條件隨機場!(詞性標註代碼實現)

1. 馬爾可夫網絡、馬爾可夫模型、馬爾可夫過程、貝葉斯網絡的區別

相信你們都看過上一節我講得貝葉斯網絡,都明白了機率圖模型是怎樣構造的,若是如今還沒明白,請看我上一節的總結:貝葉斯網絡git

這一節咱們重點來說一下馬爾可夫,正如題目所示,看了會一臉矇蔽,好在咱們會一點一點的來解釋上面的概念,請你們按照順序往下看就會徹底弄明白了,這裏我給一個通俗易懂的定義,後面咱們再來一個個詳解。github

如下共分六點說明這些概念,分紅條目只是方便邊閱讀邊思考,這6點是依次遞進的,不要跳躍着看。面試

  1. 將隨機變量做爲結點,若兩個隨機變量相關或者不獨立,則將兩者鏈接一條邊;若給定若干隨機變量,則造成一個有向圖,即構成一個網絡
  2. 若是該網絡是有向無環圖,則這個網絡稱爲貝葉斯網絡。
  3. 若是這個圖退化成線性鏈的方式,則獲得馬爾可夫模型;由於每一個結點都是隨機變量,將其當作各個時刻(或空間)的相關變化,以隨機過程的視角,則能夠當作是馬爾可夫過程
  4. 若上述網絡是無向的,則是無向圖模型,又稱馬爾可夫隨機場或者馬爾可夫網絡
  5. 若是在給定某些條件的前提下,研究這個馬爾可夫隨機場,則獲得條件隨機場
  6. 若是使用條件隨機場解決標註問題,而且進一步將條件隨機場中的網絡拓撲變成線性的,則獲得線性鏈條件隨機場

2. 馬爾可夫模型

2.1 馬爾可夫過程

馬爾可夫過程(Markov process)是一類隨機過程。它的原始模型馬爾可夫鏈,由俄國數學家A.A.馬爾可夫於1907年提出。該過程具備以下特性:在已知目前狀態(如今)的條件下,它將來的演變(未來)不依賴於它以往的演變 (過去 )。例如森林中動物頭數的變化構成——馬爾可夫過程。在現實世界中,有不少過程都是馬爾可夫過程,如液體中微粒所做的布朗運動、傳染病受感染的人數、車站的候車人數等,均可視爲馬爾可夫過程。算法

每一個狀態的轉移只依賴於以前的n個狀態,這個過程被稱爲1個n階的模型,其中n是影響轉移狀態的數目。最簡單的馬爾可夫過程就是一階過程,每個狀態的轉移只依賴於其以前的那一個狀態,這個也叫做馬爾可夫性質。用數學表達式表示就是下面的樣子:網絡

假設這個模型的每一個狀態都只依賴於以前的狀態,這個假設被稱爲馬爾科夫假設,這個假設能夠大大的簡化這個問題。顯然,這個假設多是一個很是糟糕的假設,致使不少重要的信息都丟失了。dom

\[P(X_{n+1}|X_1=x_1,X_2=x_2,...,X_n=x_n)=P(X_{n+1}=x|X_n=x_n)\]函數

假設天氣服從馬爾可夫鏈工具

從上面這幅圖能夠看出:學習

  • 假現在天是晴天,明天變成陰天的機率是0.1
  • 假現在天是晴天,明天任然是晴天的機率是0.9,和上一條几率之和爲1,這也符合真實生活的狀況。
0.9 0,1
0.5 0.5

由上表咱們能夠獲得馬爾可夫鏈的狀態轉移矩陣spa

所以,一階馬爾可夫過程定義瞭如下三個部分:

  • 狀態:晴天和陰天
  • 初始向量:定義系統在時間爲0的時候的狀態的機率
  • 狀態轉移矩陣:每種天氣轉換的機率

馬爾可夫模型(Markov Model)是一種統計模型,普遍應用在語音識別,詞性自動標註,音字轉換,機率文法等各個天然語言處理等應用領域。通過長期發展,尤爲是在語音識別中的成功應用,使它成爲一種通用的統計工具。到目前爲止,它一直被認爲是實現快速精確的語音識別系統的最成功的方法。

3. 隱馬爾可夫模型(HMM)

在某些狀況下馬爾科夫過程不足以描述咱們但願發現的模式。回到以前那個天氣的例子,一個隱居的人可能不能直觀的觀察到天氣的狀況,可是有一些海藻。民間的傳說告訴咱們海藻的狀態在某種機率上是和天氣的狀況相關的。在這種狀況下咱們有兩個狀態集合,一個能夠觀察到的狀態集合(海藻的狀態)和一個隱藏的狀態(天氣的情況)。咱們但願能找到一個算法能夠根據海藻的情況和馬爾科夫假設來預測天氣的情況。

而這個算法就叫作隱馬爾可夫模型(HMM)

隱馬爾可夫模型 (Hidden Markov Model) 是一種統計模型,用來描述一個含有隱含未知參數的馬爾可夫過程。它是結構最簡單的動態貝葉斯網,這是一種著名的有向圖模型,主要用於時序數據建模,在語音識別、天然語言處理等領域有普遍應用。

3.1 隱馬爾可夫三大問題

  1. 給定模型,如何有效計算產生觀測序列的機率?換言之,如何評估模型與觀測序列之間的匹配程度?
  2. 給定模型和觀測序列,如何找到與此觀測序列最匹配的狀態序列?換言之,如何根據觀測序列推斷出隱藏的模型狀態?
  3. 給定觀測序列,如何調整模型參數使得該序列出現的機率最大?換言之,如何訓練模型使其能最好地描述觀測數據?

前兩個問題是模式識別的問題:1) 根據隱馬爾科夫模型獲得一個可觀察狀態序列的機率(評價);2) 找到一個隱藏狀態的序列使得這個序列產生一個可觀察狀態序列的機率最大(解碼)。第三個問題就是根據一個能夠觀察到的狀態序列集產生一個隱馬爾科夫模型(學習)。

對應的三大問題解法:

  1. 向前算法(Forward Algorithm)、向後算法(Backward Algorithm)
  2. 維特比算法(Viterbi Algorithm)
  3. 鮑姆-韋爾奇算法(Baum-Welch Algorithm) (約等於EM算法)

下面咱們以一個場景來講明這些問題的解法究竟是什麼?

小明如今有三天的假期,他爲了打發時間,能夠在每一天中選擇三件事情來作,這三件事情分別是散步、購物、打掃衛生(對應着可觀測序列),但是在生活中咱們所作的決定通常都受到天氣的影響,可能晴天的時候想要去購物或者散步,可能下雨天的時候不想出門,留在家裏打掃衛生。而天氣(晴天、下雨天)就屬於隱藏狀態,用一幅機率圖來表示這一馬爾可夫過程:

那麼,咱們提出三個問題,分別對應馬爾可夫的三大問題:

  1. 已知整個模型,我觀測到連續三天作的事情是:散步,購物,收拾。那麼,根據模型,計算產生這些行爲的機率是多少。
  2. 一樣知曉這個模型,一樣是這三件事,我想猜,這三天的天氣是怎麼樣的。
  3. 最複雜的,我只知道這三天作了這三件事兒,而其餘什麼信息都沒有。我得創建一個模型,晴雨轉換機率,第一每天氣狀況的機率分佈,根據天氣狀況選擇作某事的機率分佈。

下面咱們就依據這個場景來一一解答這些問題。

3.1.1 第一個問題解法

遍歷算法

這個是最簡單的算法了,假設第一天(T=1 時刻)是晴天,想要購物,那麼就把圖上的對應機率相乘就可以獲得了。

次日(T=2 時刻)要作的事情,在第一天的機率基礎上乘上次日的機率,依次類推,最終獲得這三天(T=3 時刻)所要作的事情的機率值,這就是遍歷算法,簡單而又粗暴。但問題是用遍歷算法的複雜度會隨着觀測序列和隱藏狀態的增長而成指數級增加。

複雜度爲:\(2TN^T\)

因而就有了第二種算法

前向算法

  1. 假設第一天要購物,那麼就計算出第一天購物的機率(包括晴天和雨天);假設第一天要散步,那麼也計算出來,依次枚舉。
  2. 假設前兩天是購物和散步,也一樣計算出這一種的機率;假設前兩天是散步和打掃衛生,一樣計算,枚舉出前兩天行爲的機率。
  3. 第三步就是計算出前三天行爲的機率。

細心的讀者已經發現了,第二步中要求的機率能夠在第一步的基礎上進行,一樣的,第三步也會依賴於第二步的計算結果。那麼這樣作就可以節省不少計算環節,相似於動態規劃

這種算法的複雜度爲:\(N^2T\)

後向算法

跟前向算法相反,咱們知道總的機率確定是1,那麼B_t=1,也就是最後一個時刻的機率合爲1,先計算前三天的各類可能的機率,在計算前兩天、前一天的數據,跟前向算法相反的計算路徑。

3.1.2 第二個問題解法

維特比算法(Viterbi)

提及安德魯·維特比(Andrew Viterbi),通訊行業以外的人可能知道他的並很少,不過通訊行業的從業者大多知道以他的名字命名的維特比算法(ViterbiAlgorithm)。維特比算法是現代數字通訊中最經常使用的算法,同時也是不少天然語言處理採用的解碼算法。能夠絕不誇張地講,維特比是對咱們今天的生活影響力最大的科學家之一,由於基於CDMA的3G移動通訊標準主要就是他和厄文·雅各布(Irwin Mark Jacobs)創辦的高通公司(Qualcomm)制定的,而且高通公司在4G時代依然引領移動通訊的發展。

維特比算法是一個特殊但應用最廣的動態規劃算法。利用動態規劃,能夠解決任何一個圖中的最短路徑問題。而維特比算法是針對一個特殊的圖—籬笆網絡(Lattice)的有向圖最短路徑問題而提出的。它之因此重要,是由於凡是使用隱含馬爾可夫模型描述的問題均可以用它來解碼,包括今天的數字通訊、語音識別、機器翻譯、拼音轉漢字、分詞等。

維特比算法通常用於模式識別,經過觀測數據來反推出隱藏狀態,下面一步步講解這個算法。

由於是要根據觀測數據來反推,因此這裏要進行一個假設,假設這三天所作的行爲分別是:散步、購物、打掃衛生,那麼咱們要求的是這三天的天氣(路徑)分別是什麼。

  1. 初始計算第一天下雨和第一天晴天去散步的機率值:

    \(\bigtriangleup_1(R)\) 表示第一天下雨的機率

    \(\pi_R\) 表示中間的狀態(下雨)s機率

    \(b_R(O_1=w)\) 表示下雨而且散步的機率

    \(a_{R-R}\) 表示下雨天到下雨天的機率

    \(\bigtriangleup_1(R)=\pi_R*b_R(O_1=w)=0.6*0.1=0.06\)

    \(\bigtriangleup_1(S)=\pi_S*b_S(O_1=w)=0.4*0.6=0.24\)

    初始路徑爲:

    \(\phi_1(R)=Rainy\)

    \(\phi_1(S)=Sunny\)

  2. 計算次日下雨和次日晴天去購物的機率值:

    對應路徑爲:

  3. 計算第三天下雨和第三天晴天去打掃衛生的機率值:

    對應路徑爲:

  4. 比較每一步中 \(\bigtriangleup\) 的機率大小,選取最大值並找到對應的路徑,依次類推就能找到最有可能的隱藏狀態路徑

    第一天的機率最大值爲 \(\bigtriangleup_1S\),對應路徑爲Sunny,

    次日的機率最大值爲 \(\bigtriangleup_2S\),對應路徑爲Sunny,

    第三天的機率最大值爲 \(\bigtriangleup_3R\),對應路徑爲Rainy。

  5. 合起來的路徑就是Sunny->Sunny->Rainy,這就是咱們所求。

以上是比較通俗易懂的維特比算法,若是須要嚴謹表述,能夠查看《數學之美》這本書的第26章,講的就是維特比算法,很詳細。附:《數學之美》下載地址,點擊下載

3.1.3 第三個問題解法

鮑姆-韋爾奇算法(Baum-Welch Algorithm) (約等於EM算法),詳細講解請見:監督學習方法與Baum-Welch算法

4. 馬爾可夫網絡

4.1 因子圖

wikipedia上是這樣定義因子圖的:將一個具備多變量的全局函數因子分解,獲得幾個局部函數的乘積,以此爲基礎獲得的一個雙向圖叫作因子圖(Factor Graph)。

通俗來說,所謂因子圖就是對函數進行因子分解獲得的一種機率圖。通常內含兩種節點:變量節點和函數節點。咱們知道,一個全局函數經過因式分解可以分解爲多個局部函數的乘積,這些局部函數和對應的變量關係就體如今因子圖上。

舉個例子,如今有一個全局函數,其因式分解方程爲:

\[g(x_1,x_2,x_3,x_4,x_5)=f_A(x_1)f_B(x_2)f_C(x1,x2,x3)f_D(x_3,x_4)f_E(x_3,x_5)\]

其中fA,fB,fC,fD,fE爲各函數,表示變量之間的關係,能夠是條件機率也能夠是其餘關係。其對應的因子圖爲:

4.2 馬爾可夫網絡

咱們已經知道,有向圖模型,又稱做貝葉斯網絡,但在有些狀況下,強制對某些結點之間的邊增長方向是不合適的。使用沒有方向的無向邊,造成了無向圖模型(Undirected Graphical Model,UGM), 又被稱爲馬爾可夫隨機場或者馬爾可夫網絡(Markov Random Field, MRF or Markov network)。

設X=(X1,X2…Xn)和Y=(Y1,Y2…Ym)都是聯合隨機變量,若隨機變量Y構成一個無向圖 G=(V,E)表示的馬爾可夫隨機場(MRF),則條件機率分佈P(Y|X)稱爲條件隨機場(Conditional Random Field, 簡稱CRF,後續新的博客中可能會闡述CRF)。以下圖所示,即是一個線性鏈條件隨機場的無向圖模型:

在機率圖中,求某個變量的邊緣分佈是常見的問題。這問題有不少求解方法,其中之一就是把貝葉斯網絡或馬爾可夫隨機場轉換成因子圖,而後用sum-product算法求解。換言之,基於因子圖能夠用sum-product 算法高效的求各個變量的邊緣分佈。

詳細的sum-product算法過程,請查看博文:從貝葉斯方法談到貝葉斯網絡

5. 條件隨機場(CRF)

一個通俗的例子

假設你有許多小明同窗一天內不一樣時段的照片,從小明提褲子起牀到脫褲子睡覺各個時間段都有(小明是照片控!)。如今的任務是對這些照片進行分類。好比有的照片是吃飯,那就給它打上吃飯的標籤;有的照片是跑步時拍的,那就打上跑步的標籤;有的照片是開會時拍的,那就打上開會的標籤。問題來了,你準備怎麼幹?

一個簡單直觀的辦法就是,無論這些照片之間的時間順序,想辦法訓練出一個多元分類器。就是用一些打好標籤的照片做爲訓練數據,訓練出一個模型,直接根據照片的特徵來分類。例如,若是照片是早上6:00拍的,且畫面是黑暗的,那就給它打上睡覺的標籤;若是照片上有車,那就給它打上開車的標籤。

乍一看能夠!但實際上,因爲咱們忽略了這些照片之間的時間順序這一重要信息,咱們的分類器會有缺陷的。舉個例子,假若有一張小明閉着嘴的照片,怎麼分類?顯然難以直接判斷,須要參考閉嘴以前的照片,若是以前的照片顯示小明在吃飯,那這個閉嘴的照片極可能是小明在咀嚼食物準備下咽,能夠給它打上吃飯的標籤;若是以前的照片顯示小明在唱歌,那這個閉嘴的照片極可能是小明唱歌瞬間的抓拍,能夠給它打上唱歌的標籤。

因此,爲了讓咱們的分類器可以有更好的表現,在爲一張照片分類時,咱們必須將與它相鄰的照片的標籤信息考慮進來。這——就是條件隨機場(CRF)大顯身手的地方!這就有點相似於詞性標註了,只不過把照片換成了句子而已,本質上是同樣的。

如同馬爾可夫隨機場,條件隨機場爲具備無向的圖模型,圖中的頂點表明隨機變量,頂點間的連線表明隨機變量間的相依關係,在條件隨機場中,隨機變量Y 的分佈爲條件機率,給定的觀察值則爲隨機變量 X。下圖就是一個線性連條件隨機場。

條件機率分佈P(Y|X)稱爲條件隨機場

6. EM算法、HMM、CRF的比較

  1. EM算法是用於含有隱變量模型的極大似然估計或者極大後驗估計,有兩步組成:E步,求指望(expectation);M步,求極大(maxmization)。本質上EM算法仍是一個迭代算法,經過不斷用上一代參數對隱變量的估計來對當前變量進行計算,直到收斂。注意:EM算法是對初值敏感的,並且EM是不斷求解下界的極大化逼近求解對數似然函數的極大化的算法,也就是說EM算法不能保證找到全局最優值。對於EM的導出方法也應該掌握。

  2. 隱馬爾可夫模型是用於標註問題的生成模型。有幾個參數(π,A,B):初始狀態機率向量π,狀態轉移矩陣A,觀測機率矩陣B。稱爲馬爾科夫模型的三要素。馬爾科夫三個基本問題:

    機率計算問題:給定模型和觀測序列,計算模型下觀測序列輸出的機率。–》前向後向算法

    學習問題:已知觀測序列,估計模型參數,即用極大似然估計來估計參數。–》Baum-Welch(也就是EM算法)和極大似然估計。

    預測問題:已知模型和觀測序列,求解對應的狀態序列。–》近似算法(貪心算法)和維比特算法(動態規劃求最優路徑)

  3. 條件隨機場CRF,給定一組輸入隨機變量的條件下另外一組輸出隨機變量的條件機率分佈密度。條件隨機場假設輸出變量構成馬爾科夫隨機場,而咱們平時看到的大可能是線性鏈條隨機場,也就是由輸入對輸出進行預測的判別模型。求解方法爲極大似然估計或正則化的極大似然估計。

  4. 之因此總把HMM和CRF進行比較,主要是由於CRF和HMM都利用了圖的知識,可是CRF利用的是馬爾科夫隨機場(無向圖),而HMM的基礎是貝葉斯網絡(有向圖)。並且CRF也有:機率計算問題、學習問題和預測問題。大體計算方法和HMM相似,只不過不須要EM算法進行學習問題。

  5. HMM和CRF對比:其根本仍是在於基本的理念不一樣,一個是生成模型,一個是判別模型,這也就致使了求解方式的不一樣。

7. 參考文獻

  1. 條件隨機場的簡單理解
  2. 如何輕鬆愉快地理解條件隨機場(CRF)
  3. 《數學之美》
  4. 監督學習方法與Baum-Welch算法
  5. 從貝葉斯方法談到貝葉斯網絡

8. 詞性標註代碼實現

HMM詞性標註,GitHub:點擊進入

做者:@mantchs

GitHub:https://github.com/NLP-LOVE/ML-NLP

歡迎你們加入討論!共同完善此項目!羣號:【541954936】NLP面試學習羣

相關文章
相關標籤/搜索