求解最可能的隱狀態(tài)序列是HMM的三個(gè)典型問(wèn)題之一,通常用維特比算法解決。維特比算法就是求解HMM上的最短路徑(-log(prob),也即是最大概率)的算法。
稍微用中文講講思路,很明顯,第一天天晴還是下雨可以算出來(lái):
定義V[時(shí)間][今天天氣] = 概率,注意今天天氣指的是,前幾天的天氣都確定下來(lái)了(概率最大)今天天氣是X的概率,這里的概率就是一個(gè)累乘的概率了。
因?yàn)榈谝惶煳业呐笥讶ド⒉搅?,所以第一天下雨的概率V[第一天][下雨] = 初始概率[下雨] 發(fā)射概率[下雨][散步] = 0.6 0.1 = 0.06,同理可得V[第一天][天晴] = 0.24 。從直覺(jué)上來(lái)看,因?yàn)榈谝惶炫笥殉鲩T(mén)了,她一般喜歡在天晴的時(shí)候散步,所以第一天天晴的概率比較大,數(shù)字與直覺(jué)統(tǒng)一了。
從第二天開(kāi)始,對(duì)于每種天氣Y,都有前一天天氣是X的概率 X轉(zhuǎn)移到Y(jié)的概率 Y天氣下朋友進(jìn)行這天這種活動(dòng)的概率。因?yàn)榍耙惶焯鞖釾有兩種可能,所以Y的概率有兩個(gè),選取其中較大一個(gè)作為V[第二天][天氣Y]的概率,同時(shí)將今天的天氣加入到結(jié)果序列中
算法的代碼可以在github上看到,地址為:
https://github.com/hankcs/Viterbi
運(yùn)行完成后根據(jù)Viterbi得到結(jié)果:
Sunny Rainy Rainy
Viterbi被廣泛應(yīng)用到分詞,詞性標(biāo)注等應(yīng)用場(chǎng)景。
更多建議: