AI產品經理必修:揭開演算法的面紗(隱含馬爾可夫)

隱馬爾可夫模型目前陸續成功地應用於機器翻譯、拼寫糾錯、手寫體識別、圖像處理、基因序列分析等領域。近20年來,它廣泛應用於股票預測和投資。本文拋棄那些眼花繚亂的數學公式,去看看隱含馬爾可夫模型到底是什麼?怎麼用?

相信只要是涉足人工智慧領域,你都會聽到這樣一個神秘的名字-隱含馬爾可夫模型。是的,看了一圈文章和資料后,除了知道馬爾可夫是個聰明絕頂的人,其他的就啥也不知道了。

正式開講之前,先大概了解一下,這個演算法有哪些主要的應用場景。

一個詞概括,進行預測。

20世界80年代末李開復堅持採用隱馬爾可夫模型的框架,成功的開發了世界上第一個大辭彙量連續語音識別系統sphinx。接下來,隱馬爾可夫模型陸續成功地應用於機器翻譯、拼寫糾錯、手寫體識別、圖像處理、基因序列分析等領域。近20年來,它廣泛應用於股票預測和投資。

今天,我想拋棄那些眼花繚亂的數學公式,去看看隱含馬爾可夫模型到底是什麼?怎麼用?

一、隱含馬爾可夫模型是什麼?

我們還是分成三個階段來了解。

概念一:馬爾可夫假設

隨機過程中各個狀態st的概率分佈,只與它前一個狀態st-1有關。

舉一個例子,我們可以把S1 , S2 ,S3…St…看做北京每天的最高氣溫,這裡面的每個狀態St都是隨機的。理論上,任何一天的最高氣溫St取值都可能和這段時間以前的最高氣溫是相關的。

馬爾可夫這個大神為了簡化問題,做出了如上圖的簡化的假設。回到上面的例子,第二天的最高氣溫只跟昨天有關而與其他日期沒有任何關聯。

概念二:馬爾可夫鏈

符合馬爾可夫假設的隨機過程稱為馬爾可夫過程,也稱為馬爾可夫鏈。

在這個馬爾可夫鏈中,四個圈表示四個狀態,每條邊表示一個可能的狀態轉換,邊上的權值是轉移概率。

例如:某個時刻t的狀態St是m2,則下一個時刻St+1=m3的概率是0.6,用數學符號表示是P(St+1=m3|St=m2)=0.6。

把這個馬爾可夫鏈想象成一台機器,它隨機選擇一個狀態作為初始狀態,然後按照上述規則隨機選擇後續狀態。

結果可能如下:

  • S1=m1S2=m2   S3=m3  S4=m4
  • S1=m2  S2=m4    
  • S1=m3  S2=m3   S3=m4  
  • ……

這樣經過一段時間的運轉,就會產生一個狀態序列S1,S2,S3… St。我們可以數出mi出現的次數,以及mi轉換到mj的轉移概率。基於馬爾可夫假設,每一個狀態只與前一個狀態相關,例如從m3 轉移到m4,不論在此之前是怎麼進入m3,這個概率都是0.3。

概念三:隱含馬爾可夫模型

隱馬爾可夫模型是上述馬爾可夫鏈的一個擴展:任一時刻t的狀態st是不可見的。所以觀察者沒法通過觀察到一個狀態序列s1,s2,s3,…sT-1來推測轉移概率等參數。但是,隱馬爾可夫在每個時刻t會輸出一個符號ot,而且ot和st相關而且僅和st相關。這個被稱為獨立輸出假設。

隱馬爾可夫模型結構如下:

其中包含的狀態s1,s2,s3,s4是一個典型的馬爾可夫鏈。鮑姆把這種模型稱為「隱含」馬爾可夫模型。

那麼,問題來了,什麼是隱患狀態?

從馬爾可夫鏈中,我們看到的都是可見狀態啊。這個問題真的困擾了我很久,我找了大量的資料,發現還是這樣一個經典例子能夠解釋得清楚,請看:

假設我手裡有三個不同的骰子。第一個骰子是我們平常見的骰子(稱這個骰子為D6),6個面,每個面(1,2,3,4,5,6)出現的概率是1/6。第二個骰子是個四面體(稱這個骰子為D4),每個面(1,2,3,4)出現的概率是1/4。第三個骰子有八個面(稱這個骰子為D8),每個面(1,2,3,4,5,6,7,8)出現的概率是1/8。

現在,我們開始擲骰子,得到如下結果:

看出來了吧?什麼是隱含狀態?擲出來的數字是可見的,但是每次取哪個骰子,我們是不是不知道?

回到隱含馬爾可夫模型,符號ot就是我們擲出來得數字(1,2,3,4,5,6,7,8),隱患狀態st就是我們擲得骰子(D6,D4,D8)。

現在,我們以擲骰子為例,來總結一下隱患馬爾可夫模型得幾個構成要素:

  • 可見狀態集:D6的可見狀態集(1,2,3,4,5,6),D4的可見狀態集(1,2,3,4),D8的可見狀態集(1,2,3,4,5,6,7,8)
  • 隱患狀態集:上圖中的隱含狀態集為D6,D8,D8,D6,D4……
  • 初始(隱含)狀態轉移概率:比如,第一次拿到D6,D4和D8的概率分別是0.1,0.4,0.5。
  • (隱含)狀態轉移概率:比如,我們可以這樣定義,D6後面不能接D4,D6後面是D6的概率是9,是D8的概率是0.1。
  • (隱含狀態至可見狀態的)輸出概率:就我們的例子來說,六面骰(D6)產生1的輸出概率是1/6。產生2,3,4,5,6的概率也都是1/6,我們同樣可以對輸出概率進行其他定義。比如:我有一個被賭場動過手腳的六面骰子,擲出來是1的概率更大,是1/2,擲出來是2,3,4,5,6的概率是1/10。

二、隱含馬爾可夫模型能解決什麼問題?

通用地講,圍繞HMM有三種類型的問題:

  1. 給定一個模型,如何計算某個特定的輸出序列的概率。(概率計算問題)
  2. 給定一個模型和某個特定的輸出序列,如何找到最可能產生這個輸出的狀態序列。(解碼,預測問題)
  3. 給定足夠的觀測數據,如何估計隱馬爾可夫模型的參數。(非監督學習方法)

目前來說,第二種問題最常用,【中文分詞】【語音識別】【新詞發現】【詞性標註】都有它的一席之地。

隱含馬爾可夫模型的應用

講到這,隱馬爾可夫模型的理論定義和三個問題都介紹完畢,新問題又來了,這個模型到底有什麼用?

接下來請看一下典型的通信系統是什麼樣子的,想必「隱馬爾可夫模型有什麼用」這個問題便不攻自破了。

  1. 發送者(人或者機器)發送信息時,需要採用一種能在媒體中(比如空氣、電線)傳播的信號,比如語音或者電話線的調製信號,這個過程就是廣義上的編碼
  2. 然後通過媒體傳播到接收方,這個過程是通道傳輸
  3. 在接收方,接收者(人或者機器)根據事先約定好的方法,將這些信號還原成發送者的信息,這個過程是廣義上的解碼

其中S1,S2,S3,…表示信息源發出的信號,比如手機發送的信號。O1,O2,O3,…是接收器(比如另一部手機)接收到的信號。通信中的解碼就是根據接收到的信號O1,O2,O3,…,還原出發送的信號S1,S2,S3,…。

這跟自然語言處理又有什麼關係?不妨換個角度來考慮這個問題,所謂的語音識別,就是聽者(機器)去猜測說話者要表達的意思。這就像通信系統中,接收端根據收到的信號去還原出發送端發出的信號。

在通信中,如何根據接收端的觀測信號O1,O2,O3,…來推測信號源發送的信息S1,S2,S3,…呢?只需要從所有的源信息中找到最可能產生出觀測信號的那一個信息。

同樣,很多自然語言處理的應用也可以這樣理解。在從漢語到英語的翻譯中,說話者講的是漢語,但是通道傳播編碼的方式是英語,如果利用計算機,根據接收到的英語信息,推測說話者的漢語意思,就是機器翻譯。

同樣,如果根據帶有拼寫錯誤的語句推測說話者想表達的正確意思,那就是自動糾錯。這樣,幾乎所有的自然語言處理問題都可以等價成通信的解碼問題。