viterbi算法_HMM模型和Viterbi算法如何应用于分词
首先感謝以下博主的分享,第一,二個鏈接是講的HMM模型,第三個文章講的是Viterbi算法
結巴分詞3--基于漢字成詞能力的HMM模型識別未登錄詞 - 老頑童2007 - 博客園?www.cnblogs.com一文搞懂HMM(隱馬爾可夫模型) - skyme - 博客園?www.cnblogs.comhttps://blog.csdn.net/lilong117194/article/details/81008651?blog.csdn.net其次講解我個人的淺顯理解, 通過質疑的方式理解這兩者在分詞上的應用。
(一) HMM模型是什么
(1) 首先給出HMM模型的參數:
HMM模型包括5個參數,分別為觀察序列,狀態序列,狀態初始概率,狀態轉移概率,輸出概率。
舉個例子:(圖來源博客園,作者cloudsky)
這里有3個骰子,一個6面體,一個4面體,一個8面體,隨機拿骰子的概率是1/3。
假設隨機拿取骰子3次,得到的序列是(2, 4, 6).
這里的觀察序列就是(2, 4, 6),狀態序列可能是(D6,D4,D8)。 狀態初始概率是(1/3,1/3,1/3),
狀態轉移概率是一個矩陣,指的是從這個狀態到下一個狀態的概率,這里從6面體到6面體概率是1/3,從6面體到4面體概率是1/3,從6面體到8面體概率是1/3。那么就得到了3*3的矩陣。
輸出概率是指如果已知這個狀態,得到某一個特定值的概率。例如,我們知道第二次扔的是一個4面體,那么數字為4的概率是1/4, 即發射概率就為1/4。
(2) HMM模型的假設
- 1.齊次馬爾科夫性假設,即假設隱藏的馬爾科夫鏈在任意時刻t的狀態只依賴于其前一時刻的狀態,與其它時刻的狀態及觀測無關,也與時刻t無關;
P(狀態[t] | 狀態[t-1], 輸出[t-1],...,狀態[1], 輸出 [1]) = P(狀態[t] | 狀態[t-1]) t = 1,2,...,T - 2.輸出獨立性假設,即假設任意時刻的輸出只依賴于該時刻的馬爾科夫鏈的狀態,與其它輸出和狀態無關,
P(輸出[t] | 狀態[T], 輸出[T],...,狀態[1], 輸出 [1]) = P(輸出 [t] | 狀態[t]) t = 1,2,...,T - 3. 輸出獨立性假設 P(輸出1,輸出2,輸出3 | 狀態1,狀態2,狀態3)= P(輸出1| 狀態1) P(輸出2 | 狀態2)* P(輸出3 | 狀態3)
齊次馬可夫性假設通俗的理解就是,假設我們已知前兩次的狀態是D4,D6, 那么第三次狀態是D8的概率只與前一時刻D6有關,和D4沒有關系的,即 P(D8 | D6, D4, 2, 4 )= P(D8 | D6).
輸出獨立性假設的理解即為,假設我們已知前兩次的狀態是D4,D6, P(2 | D6, D4, 2, 4 )=P(2| D4).
(3) HMM模型的數學理解
這里推導的很詳細,就是在講將已知觀測序列的情況下,求解狀態序列的概率轉換為轉移概率和輸出概率的乘積,這里用到了HMM的假設和概率乘積P(ABC)=P(A) P(B |A) P(C |AB)。
舉個小例子:給出狀態序列={陰天,陽光明媚},觀察序列={睡覺,逛街},天氣預報說從陰天轉換為陽光明媚的概率是0.2,從陰天轉換為陰天的概率是0.8,從陽光明媚轉換到陰天概率是0.5,從陽光明媚轉換到陽光明媚概率是0.5,這樣就得到了狀態轉移矩陣;陰天睡覺的概率是0.8,散步是概率是0.2,陽光明媚睡覺的概率是0.1,散步的概率是0.9,這樣就得到了輸出矩陣。
假如我們現在知道了兩天的觀察序列,轉移矩陣和輸出矩陣,我們要推算這兩天的天氣,就可以使用HMM模型啦~
(二) HMM模型,Viterbi算法如何應用到分詞中
上面已經知道了HMM模型是什么,即它有三個假設,能夠將一種問題轉換為另外一種問題的求解(已知觀察序列求解狀態序列的問題轉換為狀態轉移概率乘以輸出概率的乘積)。這句話可真拗口。。。那么HMM模型是如何套到分詞里面的呢?
給出序列標注的定義 (圖片來源于博客老頑童2007)
簡單的來講,就是每個字在詞組中的位置有4種,分別為首,中,尾,單。首指的是位于一個詞的開頭,例如北大中的北。中指的是中間的位置,例如北京大學中的京和大,尾就是末尾,例如學,單指的是一個字,例如我叫敏敏中的我。
那么假如我現在有一段話需要分詞,即觀察序列為=我叫敏敏呀,狀態轉移序列和輸出序列是詞庫中已經知道的,那么我們如果知道了狀態序列,就得到了分詞結果。這里的狀態序列組成的元素就是4-tag,也就是B, M, E, S. 所以這樣HMM的模型就可以套用在分詞里面了。
但是此時又涉及到一個問題,計算量大啊。。。比如語句:去北京大學玩,可以分詞成 去/北京/大學/玩, 和 去/北京大學/玩, 這樣是兩種情況,窮舉出來然后利用詞庫中概率的乘積得到最優值就可以,但是要分詞一篇文章時候,計算量就上去了,所以要解決這個計算量的問題,用到了viterbi算法
所以綜上,HMM模型用于套在語句中,得到狀態序列,此時狀態序列不一定是一個,在得到狀態序列的基礎上,Viterbi算法用于得到最優的狀態序列。
歡迎大家指正,補充呀~
總結
以上是生活随笔為你收集整理的viterbi算法_HMM模型和Viterbi算法如何应用于分词的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 老龄化社会的机遇 投资抓住未来趋势很重要
- 下一篇: opencv计算两数组的乘积_leetc