HMM及维特比算法
參考
HMM:https://blog.csdn.net/sinat_25346307/article/details/79119366
Viterbi算法:https://blog.csdn.net/shenxiaoming77/article/details/79228378
?
一、HMM定義? 以詞性標(biāo)注為例說明
圖1 詞性標(biāo)注任務(wù)1、問題:如圖1所示,已知x,求x的詞性標(biāo)注y。
? ? 該問題轉(zhuǎn)化為數(shù)學(xué)語言即為:在已知x的條件下計(jì)算得y的最大概率,如公式(1)所示
| (1) |
? ? ?由條件概率公式可得公式(2)
| (2) |
? ?由于x是已知的,所以公式(2)中的p(x)可以省去,故公式(2)可以用公式(3)
| (3) |
? ? 在HMM中,我們實(shí)際使用公式(4)的形式來求解,公式(3)使用條件概率公式可得公式(4)
| (4) |
?
2、HMM是一種有監(jiān)督學(xué)習(xí),需要有訓(xùn)練數(shù)據(jù)訓(xùn)練參數(shù)。
? ? 圖2為一條訓(xùn)練數(shù)據(jù),已知句子x的詞性y,其中PN為名詞,V為動詞,D為冠詞,N為名詞。
圖2已知句子x的詞性y可得P(y)公式(5)
| ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ??? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? | (5) |
則可得公式(6)
| ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?? | (6) |
將其一般化,可將第一步的概率P(y)稱為轉(zhuǎn)移概率(transition probability),第二步的概率稱為輸出概率(emission probability)。其概率值都可以通過訓(xùn)練數(shù)據(jù)得到。
第1步P(y)?轉(zhuǎn)移概率可表示為公式(7)
| (7) |
第2步輸出概率可表示為公式(8)
| (8) |
將公式(7)(8)帶入公式(4)即為HMM模型,如公式(9)所示。
| ? ? ? ? ? ? ? ? | (9) |
?
?
二、HMM具體舉例,使用Viterbi算法
1、問題
假設(shè)已知:
? ? ? ? ? ? ? ? ? ?第1天小明感覺正常。
? ? ? ? ? ? ? ? ? 第2天小明感覺有點(diǎn)冷。
? ? ? ? ? ? ? ? ? 第3天小明覺有點(diǎn)頭暈。
? ? ? 小明的身體觀察序列x為:正常、冷、頭暈
? ? ? 小明身體的隱藏狀態(tài)有2種分別為:健康、發(fā)燒
求已知x的情況下,推斷出小明每一天的身體狀態(tài)呢?
?
2、轉(zhuǎn)化為數(shù)學(xué)語言
? ? ?正常、冷、頭暈分別用0、1、2表示;健康、發(fā)燒分別用A、B表示。
? ? 則小明的觀察序列x為:0,1,2
? ?小明身體的隱藏狀態(tài)有2種分別為:A、B
?
已知概率:
1)初始概率
| ? ? ? ? ? ? ? ? ? ? ?? |
| ? ? ? ? ? ? ? ? ? ? ? |
2)轉(zhuǎn)移概率
| ? ? ? ? ? ? ? ? |
| ? ? ? ? ? ? ?? |
3)輸出概率
| ? ? ? ? ? ? ? |
| ? ? ? ? ? ? ? |
?
3、問題進(jìn)一步具體化
求:推斷出小明每一天的身體狀態(tài)呢?
已知:觀察序列x和HMM模型。HMM模型即為初始概率、轉(zhuǎn)移概率、輸出概率。
?
4、求解,使用維特比算法
1)第1天 l=1, 取值為0,??的取值為A或B
? ? ? ?由HMM模型公式(9)可得到公式(10)
| (10) |
? ? ? ? ? ? 注意:這里實(shí)際為
? ? ? ?當(dāng)時, 帶入公式(10)可得到公式(11)
| ? ? ? ?? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? | (11) |
? ? ? ?當(dāng)時, 帶入公式(10)可得到公式(12)? ? ? ? ? ? ? ? ? ? ? ? ?
| ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?? ? ? ? ? ? ? ? ? ? ? ? ? ? ?? | (12) |
?
2)第2天 l=2,取值為1,??的取值為A或B
? ? ? ? ? ?由HMM模型公式(9)可得到公式(13)
| (13) |
? ? ? ?1、)當(dāng)時,公式(13)可化為公式(14)
| ? ? ? ? ? ? ? ? ? ?? ? ? ? ? ? ? ? ???? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?? | (14) |
? ? ? ? ? ? ? ?公式(14)中的可取A或B,此時由公式(9)可得公式(15)
| ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?? ? ? ? ? ? ? ? ? ? ? ? ?? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?? | (15) |
? ? ? ? ? ? ? ? 由公式(15)可看出,當(dāng)取A時,概率最大,記錄此條路徑。
這里在解釋一下:
?????? 當(dāng)前觀測值為1,假定當(dāng)前隱含狀態(tài)為健康A(chǔ),求當(dāng)前的聯(lián)合概率分布?。首先從昨天的狀態(tài)到當(dāng)前的健康A(chǔ)狀態(tài)有兩種路徑(昨天的狀態(tài)還沒確定,而只是先計(jì)算出每個狀態(tài)的概率分布): 昨天健康A(chǔ) ----> 今天健康A(chǔ),?? 昨天發(fā)燒 B-----> 今天健康A(chǔ)。 這兩個路徑分別的概率為 0.3 * 0.7 以及 0.04 * 0.4, 可以看到 當(dāng)前如果為健康A(chǔ)時,昨天為健康A(chǔ)的概率更大,因此我們選定昨天健康 A----> 今天健康A(chǔ) 這條路徑,即記錄下當(dāng)前為健康A(chǔ)時,昨天也為健康A(chǔ)狀態(tài), 然后求得當(dāng)前的聯(lián)合概率分布?= (0.3 * 0.7 ) * 0.4即如下:
??= max{0.3*0.7, 0.04*0.4} * 0.4=0.3* 0.7 * 0.4=0.084
此時我們需要記錄概率最大的路徑的前一個狀態(tài),即0.084路徑的前一個狀態(tài),我們在小本本上記下,第二天健康A(chǔ)時,第一天的狀態(tài)也為健康A(chǔ)。
? ? ? ? 2、)當(dāng)時,公式(13)可化為公式(16)
| ? ? ? ? ? ? ? ? ? ?? ? ? ? ? ? ? ? ?? ? ? ? ? ? ? ? ? ? ?? ? ? ? ? ? ? ? ? ?? | (16) |
? ? ? ? ? ? ? ? ?公式(16)中的可取A或B,此時由公式(9)可得公式(17)
| ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ??? ? ?? ? ? ? ? ? ? ? ? ? ? ??? ? ? ?? ? ? ? ? ? ? ? ? ? ? ? ?? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?? ? ? | (17) |
? ? ? ? ? ? 由公式(17)可看出,當(dāng)取A時,概率最大,記錄此條路徑。
? ? ? ? ? ? ? ? ? ?一樣的道理,從昨天的狀態(tài)到當(dāng)前的發(fā)燒B狀態(tài)也有兩種路徑:? 昨天健康A(chǔ) ----> 今天發(fā)燒B,?? 昨天發(fā)燒B -----> 今天發(fā)燒B,這兩個路徑分別的概率為 0.3 * 0.3以及 0.04 * 0.6, 可以看到 當(dāng)前如果為發(fā)燒B時,昨天為健康A(chǔ)的概率更大,因此我們選定昨天健康A(chǔ) ----> 今天發(fā)燒B 這條路徑,即記錄下當(dāng)前為發(fā)燒B時,昨天也為健康B狀態(tài), 當(dāng)前的聯(lián)合概率分布= (0.3 * 0.3 ) * 0.3, 即如下:
= max{0.3*0.3,? 0.04*0.6} * 0.3=0.027,
同樣的在0.027這個路徑上,第二天為發(fā)燒B時,第一天也是健康A(chǔ)的。
?
3) 第3天 l=3, 取值為2,?的取值為A或B
? ? ? ? ? ?由HMM模型公式(9)可得到公式(18)
| ? ? ? ? ? ? ? ? ? ? ?? ? ? ? ?? ? ? ??? | (18) |
? ? ? ? ??1、)?的取值為A,公式(18)可化為公式(19)
| ? ? ? ? ? ? ? ? ? ? ? ? ?? ? ? ?? | (19) |
? ? ? ? ? ? ? ? ? ?公式(19)中的可取A或B,此時由公式(9)可得公式(20)
| ??????????? ??????????????? ? ? ? ? ? ? ? ? ? ? ?? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?? ? ? ? ? ? ? ? ? ? ? ? ? ?? ? ? ? ? ? ? ? ? ? ? ??? ?? | (20) |
? ? ? ? ? ? ? ?由公式(20)可看出,當(dāng)取A時,取A時;概率最大,記錄此條路徑。
?
? ? ? ? ? ? ? ? 2、)? 的取值為B,公式(18)可化為公式(21)
| ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?? ???????????????????? | (21) |
? ? ? ? ? ? ? ? ? ? ?公式(21)中的可取A或B,此時由公式(9)可得公式(22)
| ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ???? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? | (22) |
? ? ? ? ? ? ? ? ? ? ? 由公式(22)可看出,當(dāng)取B時,取A時;概率最大,記錄此條路徑。
4)到第三天是最后一天, 此時看第三天為發(fā)燒B時狀態(tài)概率最大,即為最優(yōu)狀態(tài),即P(最優(yōu))=0.01512,這樣我們可以得到最優(yōu)路徑的終點(diǎn),是發(fā)燒B狀態(tài)。
? ? ? ? ? ? ?由最優(yōu)狀態(tài)開始回溯。根據(jù)前面所記錄的, 在求得第三天發(fā)燒的時候,我們記錄的第二天最大概率的狀態(tài)為健康A(chǔ),因此確定第二天為健康A(chǔ)狀態(tài),繼續(xù)回溯,當(dāng)?shù)诙鞛榻】礎(chǔ)狀態(tài)時,我們記錄的第一天是健康A(chǔ)的。這樣,我們的狀態(tài)序列逆推出來了。即為:健康A(chǔ),健康A(chǔ),發(fā)燒B;這就是小明這3天的身體狀態(tài)。
?
5)別人也給出了一個HMM概率圖 可以參考下:
圖3?? HMM概率圖?
?
總結(jié)
- 上一篇: Pytorch RNN(详解RNN+to
- 下一篇: HMM和CRF 条件随机场详解