隱馬爾科夫模型 HMM 通常用于處理時(shí)間序列數(shù)據(jù)亡容,數(shù)據(jù)包含長度一樣的隱藏狀態(tài)和觀測序列忍疾,可以通過觀測數(shù)據(jù)預(yù)測出隱藏狀態(tài)沸毁。例如在分詞時(shí)问窃,觀測序列是 ”我喜歡計(jì)算機(jī)“亥鬓,其中每個(gè)字對應(yīng)的隱藏狀態(tài)是 ”SBEBME“。HMM 也可以用于語音識別泡躯,給定一段音頻 (觀測序列)贮竟,識別出里面的每個(gè)文字 (隱藏狀態(tài))。
1. 馬爾科夫模型
假設(shè)系統(tǒng)擁有不同的狀態(tài)较剃,每個(gè)時(shí)刻狀態(tài)都會(huì)發(fā)生變化咕别,我們可以用馬爾科夫模型總結(jié)出系統(tǒng)狀態(tài)變化的規(guī)律。以天氣變化為例写穴,現(xiàn)在有三種天氣 {晴天惰拱,雨天,多云}啊送,和很多天的天氣狀態(tài)序列 D1, D2, D3,..., DM偿短。則我們可以根據(jù)前 n 天的天氣,預(yù)測第 M+1 個(gè)天氣狀態(tài)的概率馋没。
這也稱為 n 階馬爾科夫模型昔逗,即當(dāng)前狀態(tài)僅依賴于前面 n 個(gè)狀態(tài),通常比較常用的是一階馬爾科夫模型篷朵,即當(dāng)前預(yù)測的狀態(tài)僅依賴于前一時(shí)刻的狀態(tài)勾怒。
一階馬爾科夫模型可以定義一個(gè)狀態(tài)轉(zhuǎn)移矩陣 T,T 的行數(shù)和列數(shù)均等于狀態(tài)個(gè)數(shù)声旺,T 描述了從一個(gè)狀態(tài)轉(zhuǎn)移到另一個(gè)狀態(tài)的概率笔链,如下圖所示。
即如果今天是雨天腮猖,則明天是晴天的概率是 0.3鉴扫。除了狀態(tài)轉(zhuǎn)移矩陣,還需要定義一個(gè)初始概率向量 I澈缺,表示第一天時(shí)坪创,每種天氣狀態(tài)的概率。初始概率向量如下:
總的來說姐赡,定義一個(gè)一階馬爾科夫模型需要:
- 狀態(tài):晴天误堡、雨天、多云
- 狀態(tài)轉(zhuǎn)移矩陣 T
- 初始概率向量 I
馬爾科夫模型還有一個(gè)性質(zhì)雏吭,不管今天的天氣如何锁施,在很多天之后的狀態(tài)分布會(huì)收斂到一個(gè)固定的概率分布,稱為穩(wěn)態(tài)分布。例如第一天是晴天悉抵,給定的 T 如上文所示肩狂,則很多天 (n天) 之后的概率分布 p 為:
這是因?yàn)?T 自乘無窮次之后,每一行的數(shù)值都是一樣的姥饰,因此不管第一天天氣如何傻谁,無窮天后的概率分布都是穩(wěn)定的。
2. 隱馬爾科夫模型
2.1 HMM
有的時(shí)候我們只能看到觀察的序列列粪,而不能直接看到隱藏的狀態(tài)审磁,此時(shí)就需要使用隱馬爾科夫模型。例如有一個(gè)被關(guān)在一個(gè)密閉的房間里岂座,沒辦法查看到天氣态蒂,但是可以通過一個(gè)濕度計(jì)查看濕度。
由于濕度 (觀察狀態(tài)) 和天氣 (隱藏狀態(tài)) 之間存在聯(lián)系费什,HMM 可以根據(jù)給出的觀測狀態(tài)序列钾恢,估計(jì)出對應(yīng)的隱藏狀態(tài)序列,同時(shí)可以對未來的隱藏狀態(tài)和觀察狀態(tài)進(jìn)行預(yù)測鸳址。
隱馬爾科夫模型還需要增加一個(gè)發(fā)射概率矩陣 E瘩蚪,E 的行數(shù)等于隱藏狀態(tài)個(gè)數(shù),列數(shù)為觀察狀態(tài)個(gè)數(shù)稿黍,Eij 表示隱藏狀態(tài)為 i 時(shí)疹瘦,觀察狀態(tài)為 j 的概率。
總的來說巡球,定義一個(gè)一階隱馬爾科夫模型以下參數(shù)言沐,這些就是 HMM 的參數(shù):
- 隱藏狀態(tài) S:晴天、雨天辕漂、多云
- 觀察狀態(tài) O:干燥呢灶、適中吴超、潮濕
- 狀態(tài)轉(zhuǎn)移矩陣 T
- 初始概率向量 I
- 發(fā)射概率矩陣 E
2.2 隱馬爾科夫模型的三個(gè)問題
隱馬爾科夫模型比較常見的三個(gè)問題分別是:評估問題钉嘹,解碼問題和學(xué)習(xí)問題。
評估問題:我們已經(jīng)知道模型的參數(shù) (S, O, T, I, E)鲸阻,給定一個(gè)觀測序列 X (例如 干燥跋涣、干燥、潮濕鸟悴、....陈辱、適中),評估問題要計(jì)算出得到這樣一個(gè)觀測序列 X 的概率值细诸。求解評估問題的方法有前向算法和后向算法沛贪。
解碼問題:已經(jīng)知道模型的參數(shù) (S, O, T, I, E),給定一個(gè)觀測序列 X,找出使觀測序列概率最大的隱藏狀態(tài)序列 Y利赋。求解的方法有 Viterbi 算法水评。
學(xué)習(xí)問題:學(xué)習(xí)問題是指在未知模型參數(shù)的時(shí)候,通過數(shù)據(jù)集學(xué)習(xí)出模型的參數(shù) (S, O, T, I, E)媚送。學(xué)習(xí)問題包監(jiān)督學(xué)習(xí)方法和非監(jiān)督學(xué)習(xí)方法中燥,如果我們同時(shí)擁有觀察序列 X 和狀態(tài)序列 Y,則可以采用監(jiān)督學(xué)習(xí)塘偎;如果只有觀測序列 X疗涉,則只能采用非監(jiān)督學(xué)習(xí),非監(jiān)督學(xué)習(xí)的算法有 Baum-Welch 算法吟秩。
3. HMM 中文分詞
HMM 可以用于中文分詞的任務(wù)咱扣,其隱藏狀態(tài)包含 4 種,分別是 SBME峰尝,S 表示單個(gè)字的詞偏窝,而 B 表示多字詞的第一個(gè)字,M 表示多字詞中間的字武学,E 表示多字詞最后一個(gè)字祭往,如下圖所示。
用 HMM 進(jìn)行中文分詞火窒,要通過觀察序列找出最有可能的隱藏狀態(tài)序列硼补,主要涉及學(xué)習(xí)問題和解碼問題。
3.1 中文分詞學(xué)習(xí)問題
可以使用已經(jīng)標(biāo)注好的數(shù)據(jù) (即有觀察序列 X 和隱藏狀態(tài)序列 Y) 的數(shù)據(jù)集進(jìn)行有監(jiān)督學(xué)習(xí)熏矿。數(shù)據(jù)集包含很多句子已骇,每個(gè)句子都有 X 和 Y。那么我們就可以通過統(tǒng)計(jì)得到 HMM 的狀態(tài)轉(zhuǎn)移矩陣票编、發(fā)射矩陣和初始概率向量褪储。
狀態(tài)轉(zhuǎn)移矩陣 T:Tij 表示從狀態(tài) i 轉(zhuǎn)移到狀態(tài) j 的概率,需要統(tǒng)計(jì)數(shù)據(jù)集里面從狀態(tài) i 轉(zhuǎn)移到 狀態(tài) j 的個(gè)數(shù) Aij慧域,然后除以狀態(tài) i 轉(zhuǎn)移到所有狀態(tài)的個(gè)數(shù) Ai鲤竹。
例如我們可以用下面的公式計(jì)算從狀態(tài) B 轉(zhuǎn)到狀態(tài) E 的概率:
中文分詞的時(shí)候是不存在從狀態(tài) B 到狀態(tài) B 的,也不存在 B 到 S昔榴,所以 Count(BB) 和 Count(BS) 都是 0辛藻。
發(fā)射概率矩陣 E:Eij 表示在狀態(tài) i 時(shí)得到觀察值 j 的概率。計(jì)算方法是統(tǒng)計(jì)狀態(tài) i 且觀察值為 j 的個(gè)數(shù) B互订,然后除以狀態(tài) i 的個(gè)數(shù)吱肌。
初始概率向量 I:I 只要統(tǒng)計(jì)每個(gè)句子第一個(gè)狀態(tài),得到第一個(gè)狀態(tài)的概率分布即可仰禽。
3.2 中文分詞解碼問題
在學(xué)習(xí)得到 HMM 的參數(shù)后氮墨,可以通過 HMM 解碼算法 (Viterbi 算法) 求解出句子的隱狀態(tài)纺蛆,最終分詞。具體做法可以參考《統(tǒng)計(jì)學(xué)習(xí)方法》规揪。
4.參考文獻(xiàn)
《統(tǒng)計(jì)學(xué)習(xí)方法》