前言:隱含馬爾可夫模型是一個數學模型,到目前為之,它一直被認為是實現快速精確的語音辨識系統的最成功的方法。複雜的語音辨識問題通過隱含馬爾可夫模型能非常簡單地被表述、解決,讓我不由由衷地感歎數學模型之妙。
自然語言是人類交流資訊的工具。很多自然語言處理問題都可以等同於通訊系統中的解碼問題 -- 一個人根據接收到的資訊,去猜測發話人要表達的意思。這其實就象通訊中,我們根據接收端收到的訊號去分析、理解、還原發送端傳送過來的資訊。以下該圖就表示了一個典型的通訊系統:
其中 s1,s2,s3...表示資訊源發出的訊號。o1, o2, o3 ... 是接受器接收到的訊號。通訊中的解碼就是根據接收到的訊號 o1, o2, o3 ...還原出發送的訊號 s1,s2,s3...。
其實我們平時在說話時,腦子就是一個資訊源。我們的喉嚨(聲帶),空氣,就是如電線和光纜般的通道。聽眾耳朵的就是接收端,而聽到的聲音就是傳送過來的訊號。根據聲學訊號來推測說話者的意思,就是語音辨識。這樣說來,如果接收端是一台電腦而不是人的話,那麼電腦要做的就是語音的自動識別。同樣,在電腦中,如果我們要根據接收到的英語資訊,推測說話者的漢語意思,就是機器翻譯;
如果我們要根據帶有拼字錯誤的語句推測說話者想表達的正確意思,那就是自動錯誤修正。
那麼怎麼根據接收到的資訊來推測說話者想表達的意思呢?我們可以利用叫做“隱含馬爾可夫模型”(Hidden
Markov Model)來解決這些問題。以語音辨識為例,當我們觀測到語音訊號 o1,o2,o3 時,我們要根據這組訊號推測出發送的句子 s1,s2,s3。顯然,我們應該在所有可能的句子中找最有可能性的一個。用數學語言來描述,就是在已知 o1,o2,o3,...的情況下,求使得條件機率
P (s1,s2,s3,...|o1,o2,o3....) 達到最大值的那個句子 s1,s2,s3,...
當然,上面的機率不容易直接求出,於是我們可以間接地計算它。利用貝葉斯公式並且省掉一個常數項,可以把上述公式等價變換成
P(o1,o2,o3,...|s1,s2,s3....) * P(s1,s2,s3,...)
其中
P(o1,o2,o3,...|s1,s2,s3....) 表示某句話 s1,s2,s3...被讀成 o1,o2,o3,...的可能性, 而
P(s1,s2,s3,...) 表示字串 s1,s2,s3,...本身能夠成為一個合乎情理的句子的可能性,所以這個公式的意義是用發送訊號為 s1,s2,s3...這個數列的可能性乘以 s1,s2,s3...本身可以一個句子的可能性,得出機率。
(讀者讀到這裡也許會問,你現在是不是把問題變得更複雜了,因為公式越寫越長了。別著急,我們現在就來簡化這個問題。)我們在這裡做兩個假設:
第一,s1,s2,s3,... 是一個馬爾可夫鏈,也就是說,si 只由 si-1 決定 (詳見系列一);
第二, 第 i 時刻的接收訊號 oi 只由發送訊號 si 決定(又稱為獨立輸出假設, 即 P(o1,o2,o3,...|s1,s2,s3....) = P(o1|s1) * P(o2|s2)*P(o3|s3)...。
那麼我們就可以很容易利用演算法 Viterbi 找出上面式子的最大值,進而找出要識別的句子
s1,s2,s3,...。
滿足上述兩個假設的模型就叫隱含馬爾可夫模型。我們之所以用“隱含”這個詞,是因為狀態 s1,s2,s3,...是無法直接觀測到的。
隱含馬爾可夫模型的應用遠不只在語音辨識中。在上面的公式中,如果我們把 s1,s2,s3,...當成中文,把 o1,o2,o3,...當成對應的英文,那麼我們就能利用這個模型解決機器翻譯問題; 如果我們把 o1,o2,o3,...當成掃描文字得到的映像特徵,就能利用這個模型解決印刷體和手寫體的識別。
P (o1,o2,o3,...|s1,s2,s3....) 根據應用的不同而又不同的名稱,在語音辨識中它被稱為“聲學模型” (Acoustic Model), 在機器翻譯中是“翻譯模型” (Translation Model) 而在拼字校正中是“錯誤修正模型” (Correction Model)。 而P (s1,s2,s3,...)
就是我們在系列一中提到的語言模型。
在利用隱含馬爾可夫模型解決語言處理問題前,先要進行模型的訓練。 常用的訓練方法由伯姆(Baum)在60年代提出的,並以他的名字命名。隱含馬爾可夫模型在處理語言問題早期的成功應用是語音辨識。七十年代,當時 IBM 的 Fred
Jelinek (賈裡尼克) 和卡內基·梅隆大學的 Jim and Janet Baker (貝克夫婦,李開複的師兄師姐)
分別獨立地提出用隱含馬爾可夫模型來識別語音,語音辨識的錯誤率相比人工智慧和模式比對等方法降低了三倍 (從 30% 到 10%)。 八十年代李開複博士堅持採用隱含馬爾可夫模型的架構, 成功地開發了世界上第一個大詞彙量連續語音辨識系統 Sphinx。
我最早接觸到隱含馬爾可夫模型是幾乎二十年前的事。那時在《隨機過程》(清華“著名”的一門課)裡學到這個模型,但當時實在想不出它有什麼實際用途。幾年後,我在清華跟隨王作英教授學習、研究語音辨識時,他給了我幾十篇文獻。 我印象最深的就是賈裡尼克和李開複的文章,它們的核心思想就是隱含馬爾可夫模型。複雜的語音辨識問題居然能如此簡單地被表述、解決,我由衷地感歎數學模型之妙。