维特比算法学习
參考文章1:
簡直不要太通俗易懂,這篇文章,很值得看
參考文章2:
解釋一些概念性的問題,我把他的一些內容寫下來
維特比(Viterbi)算法的核心是動態規劃。
對于 HMM 而言,其中一個重要的任務就是要找出最有可能產生其觀測序列的隱含序列。一般來說,HMM問題可由下面五個元素描述
對于 HMM 而言,其中一個重要的任務就是要找出最有可能產生其觀測序列的隱含序列。一般來說,HMM問題可由下面五個元素描述:
- 觀測序列(observations):實際觀測到的現象序列
- 隱含狀態(states):所有的可能的隱含狀態
- 初始概率(start_probability):每個隱含狀態的初始概率
- 轉移概率(transition_probability):從一個隱含狀態轉移到另一個隱含狀態的概率
- 發射概率(emission_probability):某種隱含狀態產生某種觀測現象的概率
一個例子來解釋這5個概念:
想象一個鄉村診所。村民有著非常理想化的特性,要么健康要么發燒。他們只有問診所的醫生的才能知道是否發燒。 聰明的醫生通過詢問病人的感覺診斷他們是否發燒。村民只回答他們感覺正常、頭暈或冷。
假設一個病人每天來到診所并告訴醫生他的感覺。醫生相信病人的健康狀況如同一個離散馬爾可夫鏈。病人的狀態有兩種“健康”和“發燒”,但醫生不能直接觀察到,這意味著狀態對他是“隱含”的。每天病人會告訴醫生自己有以下幾種由他的健康狀態決定的感覺的一種:正常、冷或頭暈。這些是觀察結果。 整個系統為一個隱馬爾可夫模型(HMM)。
醫生知道村民的總體健康狀況,還知道發燒和沒發燒的病人通常會抱怨什么癥狀。 換句話說,醫生知道隱馬爾可夫模型的參數。則這些上面提到的五個元素表示如下
其對應的狀態轉移圖如下所示
現在的問題是假設病人連續三天看醫生,醫生發現第一天他感覺正常,第二天感覺冷,第三天感覺頭暈。 于是醫生產生了一個問題:怎樣的健康狀態序列最能夠解釋這些觀察結果。維特比算法解答了這個問題。
首先直觀地看這個問題,在HMM中,一個觀測現象后面的對應的各個狀態都有一個概率值,我們只需要選擇概率值最大的那個狀態即可,但是這個概率值是跟前面一個狀態有關的(馬爾科夫假設),因此不能獨立考慮每個觀測現象。
假如在 NLP 中應用 HMM,則將詞序列看做是觀測到的現象,而詞性、標簽等信息看做是隱含狀態,那么就可以通過維特比算法求解其隱含狀態序列,而這也是 HMM 在分詞,詞性標注,命名實體識別中的應用。其關鍵往往是找出上面提到的初始概率(start_probability)、轉移概率(transition_probability)、發射概率(emission_probability)。
而在通信領域中,假如將收到的編碼信息看作是觀測序列,對應的解碼信息為隱含狀態,那么通過維特比算法也能夠找出概率最大的解碼信息。
需要注意的是維特比算法適用于多步驟多選擇的最優問題,類似于下面的網絡,《數學之美》中將其叫做“籬笆網絡(Lattice)”。每一步都有多個選擇,并且保留了前面一步各個選擇的最優解,通過回溯的方法找到最優選擇路徑。
總結
- 上一篇: 随机数字图片验证码的原理、生成和破解
- 下一篇: gz是什么意思饭圈_网上看不懂的字母缩写