隱馬爾科夫模型 HMM 通常用於處理時間序列數據,數據包含長度一樣的隱藏狀態和觀測序列,可以通過觀測數據預測出隱藏狀態。例如在分詞時,觀測序列是 ”我喜歡計算機“,其中每個字對應的隱藏狀態是 ”SBEBME“。HMM 也可以用於語音識別,給定一段音頻 (觀測序列),識別出裡面的每個文字 (隱藏狀態)。
1. 馬爾科夫模型
假設系統擁有不同的狀態,每個時刻狀態都會發生變化,我們可以用馬爾科夫模型總結出系統狀態變化的規律。以天氣變化為例,現在有三種天氣 {晴天,雨天,多雲},和很多天的天氣狀態序列 D1, D2, D3,..., DM。則我們可以根據前 n 天的天氣,預測第 M+1 個天氣狀態的概率。
這也稱為 n 階馬爾科夫模型,即當前狀態僅依賴於前面 n 個狀態,通常比較常用的是一階馬爾科夫模型,即當前預測的狀態僅依賴於前一時刻的狀態。
一階馬爾科夫模型可以定義一個狀態轉移矩陣 T,T 的行數和列數均等於狀態個數,T 描述了從一個狀態轉移到另一個狀態的概率,如下圖所示。
即如果今天是雨天,則明天是晴天的概率是 0.3。除了狀態轉移矩陣,還需要定義一個初始概率向量 I,表示第一天時,每種天氣狀態的概率。初始概率向量如下:
總的來說,定義一個一階馬爾科夫模型需要:
- 狀態:晴天、雨天、多雲
- 狀態轉移矩陣 T
- 初始概率向量 I
馬爾科夫模型還有一個性質,不管今天的天氣如何,在很多天之後的狀態分佈會收斂到一個固定的概率分佈,稱為穩態分佈。例如第一天是晴天,給定的 T 如上文所示,則很多天 (n天) 之後的概率分佈 p 為:
這是因為 T 自乘無窮次之後,每一行的數值都是一樣的,因此不管第一天天氣如何,無窮天后的概率分佈都是穩定的。
2. 隱馬爾科夫模型
2.1 HMM
有的時候我們只能看到觀察的序列,而不能直接看到隱藏的狀態,此時就需要使用隱馬爾科夫模型。例如有一個被關在一個密閉的房間裡,沒辦法查看到天氣,但是可以通過一個溼度計查看溼度。
由於溼度 (觀察狀態) 和天氣 (隱藏狀態) 之間存在聯繫,HMM 可以根據給出的觀測狀態序列,估計出對應的隱藏狀態序列,同時可以對未來的隱藏狀態和觀察狀態進行預測。
隱馬爾科夫模型還需要增加一個發射概率矩陣 E,E 的行數等於隱藏狀態個數,列數為觀察狀態個數,Eij 表示隱藏狀態為 i 時,觀察狀態為 j 的概率。
總的來說,定義一個一階隱馬爾科夫模型以下參數,這些就是 HMM 的參數:
- 隱藏狀態 S:晴天、雨天、多雲
- 觀察狀態 O:乾燥、適中、潮溼
- 狀態轉移矩陣 T
- 初始概率向量 I
- 發射概率矩陣 E
2.2 隱馬爾科夫模型的三個問題
隱馬爾科夫模型比較常見的三個問題分別是:評估問題,解碼問題和學習問題。
評估問題:我們已經知道模型的參數 (
S, O, T, I, E),給定一個觀測序列 X (例如 乾燥、乾燥、潮溼、....、適中),評估問題要計算出得到這樣一個觀測序列 X 的概率值。求解評估問題的方法有前向算法和後向算法。解碼問題:已經知道模型的參數 (S, O, T, I, E),給定一個觀測序列 X,找出使觀測序列概率最大的隱藏狀態序列 Y。求解的方法有 Viterbi 算法。
學習問題:學習問題是指在未知模型參數的時候,通過數據集學習出模型的參數 (S, O, T, I, E)。學習問題包監督學習方法和非監督學習方法,如果我們同時擁有觀察序列 X 和狀態序列 Y,則可以採用監督學習;如果只有觀測序列 X,則只能採用非監督學習,非監督學習的算法有 Baum-Welch 算法。
3. HMM 中文分詞
HMM 可以用於中文分詞的任務,其隱藏狀態包含 4 種,分別是 SBME,S 表示單個字的詞,而 B 表示多字詞的第一個字,M 表示多字詞中間的字,E 表示多字詞最後一個字,如下圖所示。
用 HMM 進行中文分詞,要通過觀察序列找出最有可能的隱藏狀態序列,主要涉及學習問題和解碼問題。
3.1 中文分詞學習問題
可以使用已經標註好的數據 (即有觀察序列 X 和隱藏狀態序列 Y) 的數據集進行有監督學習。數據集包含很多句子,每個句子都有 X 和 Y。那麼我們就可以通過統計得到 HMM 的狀態轉移矩陣、發射矩陣和初始概率向量。
狀態轉移矩陣 T:Tij 表示從狀態 i 轉移到狀態 j 的概率,需要統計數據集裡面從狀態 i 轉移到 狀態 j 的個數 Aij,然後除以狀態 i 轉移到所有狀態的個數 Ai。
例如我們可以用下面的公式計算從狀態 B 轉到狀態 E 的概率:
中文分詞的時候是不存在從狀態 B 到狀態 B 的,也不存在 B 到 S,所以 Count(BB) 和 Count(BS) 都是 0。
發射概率矩陣 E:Eij 表示在狀態 i 時得到觀察值 j 的概率。計算方法是統計狀態 i 且觀察值為 j 的個數 B,然後除以狀態 i 的個數。
初始概率向量 I:I 只要統計每個句子第一個狀態,得到第一個狀態的概率分佈即可。
3.2 中文分詞解碼問題
在學習得到 HMM 的參數後,可以通過 HMM 解碼算法 (Viterbi 算法) 求解出句子的隱狀態,最終分詞。具體做法可以參考《統計學習方法》。
4.參考文獻
《統計學習方法》
閱讀更多 NLP與人工智能 的文章