通俗理解什么是隐马尔科夫模型(hmm)
文章目錄
- 什么是隱馬爾科夫模型
- HMM模型相關(guān)的算法
- 前向算法(forward algorithm)
- 維特比算法(Viterbi algorithm)
- 求解最可能的天氣
- NLP應(yīng)用
- 小結(jié)
參考文章 一文搞懂HMM(隱馬爾可夫模型)
本人博客地址: https://xiaoxiablogs.top
什么是隱馬爾科夫模型
隱馬爾可夫模型(Hidden Markov Model,HMM)是統(tǒng)計(jì)模型,它用來(lái)描述一個(gè)含有隱含未知參數(shù)的馬爾可夫過(guò)程。其難點(diǎn)是從可觀察的參數(shù)中確定該過(guò)程的隱含參數(shù)。然后利用這些參數(shù)來(lái)作進(jìn)一步的分析,例如模式識(shí)別。
用一個(gè)簡(jiǎn)單的例子來(lái)描述:
假設(shè)有3個(gè)不同的骰子,分別為四面(D4)、六面(D6)、八面(D8),每個(gè)面的概率都是相同的,每個(gè)骰子被選中的概率也是相同的。
假設(shè)我們開(kāi)始擲骰子,隨機(jī)從三個(gè)里面選一個(gè),然后擲骰子,我們會(huì)得到一個(gè)數(shù)字,重復(fù)上面的過(guò)程,我們就可以得到一串?dāng)?shù)字。例如我們得到的是1 8 6 4 4 2 3 6 1 4,這串?dāng)?shù)字就是可見(jiàn)狀態(tài)鏈,而我們對(duì)應(yīng)的擲骰子的順序就是隱含狀態(tài)鏈,假設(shè)為D4 D8 D6 D4 D6 D8 D6 D6 D4 D8,我們第一次隨機(jī)的骰子是D4, 而第一次選中每個(gè)骰子的概率是1/3,也就是初始概率, 而第一次選中D4后,第二次選中每個(gè)骰子的概率為1/3,這就是轉(zhuǎn)換概率,如:D4->D8為1/3,即選中D4后再選中D8的轉(zhuǎn)移概率為1/3。
一般來(lái)說(shuō),HMM中說(shuō)到的馬爾科夫鏈其實(shí)就是指隱含狀態(tài)鏈,因?yàn)殡[含狀態(tài)之間存在轉(zhuǎn)換概率
HMM模型相關(guān)的算法
前向算法(forward algorithm)
我們拿到一串可見(jiàn)狀態(tài)鏈,也知道轉(zhuǎn)換概率、輸出概率,如何求解隱含狀態(tài)鏈最可能是什么呢?
我們就可以使用前向算法(forward algorithm)
例如我們得到的數(shù)字為: 1 6 3
我們可以分為以下幾步:
首先,我們只擲一次骰子:
看到結(jié)果為1,產(chǎn)生這個(gè)結(jié)果的總概率可以按照如下計(jì)算,清高率為0.18:
然后我們擲兩次骰子:
看到結(jié)果為1,6.產(chǎn)生這個(gè)結(jié)果的總概率可以按照如下計(jì)算,總概率為0.05:
然后我們擲三次骰子:
看到結(jié)果為1,6,3.產(chǎn)生這個(gè)結(jié)果的總概率可以按照如下計(jì)算,總概率為0.03:
同樣的,我們一步一步的算,有多長(zhǎng)算多長(zhǎng),再長(zhǎng)的馬爾可夫鏈總能算出來(lái)的。這就是前向算法(forward algorithm)
維特比算法(Viterbi algorithm)
HMM(隱馬爾可夫模型)是用來(lái)描述隱含未知參數(shù)的統(tǒng)計(jì)模型,舉一個(gè)經(jīng)典的例子:一個(gè)東京的朋友每天根據(jù)天氣{下雨,天晴}決定當(dāng)天的活動(dòng){公園散步,購(gòu)物,清理房間}中的一種,我每天只能在twitter上看到她發(fā)的推“啊,我前天公園散步、昨天購(gòu)物、今天清理房間了!”,那么我可以根據(jù)她發(fā)的推特推斷東京這三天的天氣。在這個(gè)例子里,顯狀態(tài)是活動(dòng),隱狀態(tài)是天氣。
任何一個(gè)HMM都可以通過(guò)下列五元組來(lái)描述:
:param obs:觀測(cè)序列 :param states:隱狀態(tài) :param start_p:初始概率(隱狀態(tài)) :param trans_p:轉(zhuǎn)移概率(隱狀態(tài)) :param emit_p: 發(fā)射概率 (隱狀態(tài)表現(xiàn)為顯狀態(tài)的概率) states = ('Rainy', 'Sunny')observations = ('walk', 'shop', 'clean')start_probability = {'Rainy': 0.6, 'Sunny': 0.4}transition_probability = {'Rainy' : {'Rainy': 0.7, 'Sunny': 0.3},'Sunny' : {'Rainy': 0.4, 'Sunny': 0.6},}emission_probability = {'Rainy' : {'walk': 0.1, 'shop': 0.4, 'clean': 0.5},'Sunny' : {'walk': 0.6, 'shop': 0.3, 'clean': 0.1}, }求解最可能的天氣
求解最可能的隱狀態(tài)序列是HMM的三個(gè)典型問(wèn)題之一,通常用維特比算法解決。維特比算法就是求解HMM上的最短路徑(-log(prob),也即是最大概率)的算法。
稍微用中文講講思路,很明顯,第一天天晴還是下雨可以算出來(lái):
輸出:
0 1 2 Rainy: 0.06000 0.03840 0.01344 Sunny: 0.24000 0.04320 0.00259 (0.01344, ['Sunny', 'Rainy', 'Rainy'])NLP應(yīng)用
具體到分詞系統(tǒng),可以將天氣當(dāng)成“標(biāo)簽”,活動(dòng)當(dāng)成“字或詞”。那么,幾個(gè)NLP的問(wèn)題就可以轉(zhuǎn)化為:
- 詞性標(biāo)注:給定一個(gè)詞的序列(也就是句子),找出最可能的詞性序列(標(biāo)簽是詞性)。如ansj分詞和ICTCLAS分詞等。
- 分詞:給定一個(gè)字的序列,找出最可能的標(biāo)簽序列(斷句符號(hào):[詞尾]或[非詞尾]構(gòu)成的序列)。結(jié)巴分詞目前就是利用BMES標(biāo)簽來(lái)分詞的,B(開(kāi)頭),M(中間),E(結(jié)尾),S(獨(dú)立成詞)
- 命名實(shí)體識(shí)別:給定一個(gè)詞的序列,找出最可能的標(biāo)簽序列(內(nèi)外符號(hào):[內(nèi)]表示詞屬于命名實(shí)體,[外]表示不屬于)。如ICTCLAS實(shí)現(xiàn)的人名識(shí)別、翻譯人名識(shí)別、地名識(shí)別都是用同一個(gè)Tagger實(shí)現(xiàn)的。
小結(jié)
HMM是一個(gè)通用的方法,可以解決貼標(biāo)簽的一系列問(wèn)題。
總結(jié)
以上是生活随笔為你收集整理的通俗理解什么是隐马尔科夫模型(hmm)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: java删除list元素的几种方式
- 下一篇: Python四大金刚