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