隱馬爾可夫模型(HMM)實現分詞
隱馬爾可夫模型(HMM)實現分詞
最近在調研分詞的一些工作,又重新看了一遍HMM,發現原來之前看過的,竟然給忘的乾乾淨淨!之前看的,真是餵了狗了,於是決定把這次的理解記錄下來,俗話說,好記性不如賴筆頭嘛。第一次寫部落格,以下純屬個人理解,如果有誤,請指正~
模型的定義
HMM(Hidden Markov Model)是關於時序的概率圖模型,由一個隱藏的不可觀測的狀態隨機序列,再由各個狀態生成一個觀測值而產生觀測隨機序列的過程。
隱藏的狀態序列稱為狀態序列(state sequence),生成的觀測隨機序列稱為觀測序列(observation sequence)
隱馬爾可夫模型的圖結構:
[y1, y2 …. yi, yn] 是狀態序列,[x1, x2 …. xi, xn]是觀測序列,yi 表示在 i 時刻的狀態值, xi 表示在 i 時刻的觀測值。
怎麼確定一個模型?
HMM有兩個假設:
1)任一時刻的狀態只依賴前一時刻的狀態
2)任意時刻的觀測值,只與該時刻的狀態值有關
從網路圖中看的話,即,xi 只與 yi 有關, yi 只與 y(i-1)有關
那麼問題來了,我們怎麼確定一個模型呢?確定一個HMM模型,我們需要知道什麼樣的資訊?
1)首先我們得知道,yi 和 xi 都能取什麼樣的值吧,也就是狀態集合和觀測值集合。
2)有了狀態集合,我們回到假設1,任意時刻的狀態只依賴前一時刻的狀態,那我們是不是需要知道每個狀態之間的轉換概率?這個概率就被稱為狀態轉移概率。
3)狀態之間的轉移概率有了,那麼我們是不是還需要知道模型在初始時刻各狀態出現的概率?就是所謂的初始狀態概率。
4)回到假設2,任意時刻的觀測值,只與該時刻的狀態值有關,那麼我們是不是要知道,在一個狀態下,所對應的各個觀測值的概率?就是所謂的觀測概率(也稱發射概率)。
好了,有了以上資訊,我們就可以確定一個HMM模型了。
總結一下,確定一個HMM模型,我們需要知道這個五元組:
StatusSet: 狀態值集合
ObservedSet: 觀察值集合
TransProbMatrix: 轉移概率矩陣
EmitProbMatrix: 發射概率矩陣
InitStatus: 初始狀態分佈
中文分詞
試想一下,怎麼把分詞這個場景用HMM建模?
我們可以認為,每個字(觀測值)有一個對應的狀態(狀態值),狀態集合我們用「B, E, M, S」表示。
B:一個詞的開始
E:一個詞的結束
M:一個詞的中間
S:單字成詞
例如:
S S B M M M M M E B E
我是中華人民共和國國民
我們可以根據這句話的狀態序列將句子切分為:
我 是 中華人民共和國 國民
在此處,我們已經將分詞的問題,轉換為求狀態序列的問題
這時我們就可以把分詞的問題,具體化為:已知 StatusSet,ObservedSet, TransProbMatrix,EmitProbMatrix,InitStatus ,求狀態值序列
訓練過程
假設我們的已標註訓練樣本有以下五條(當然,我們實際使用中訓練資料量是很大的,此處只是為了舉例說明):
我 是 一枚 吃貨
S | S | B | E | B | E |
---|---|---|---|---|---|
我 | 是 | 一 | 枚 | 吃 | 貨 |
我 喜歡 吃東西
S | B | E | B | M | E |
---|---|---|---|---|---|
我 | 喜 | 歡 | 吃 | 東 | 西 |
吃 能 給我 帶來 快樂
S | S | B | E | B | E | B | E |
---|---|---|---|---|---|---|---|
吃 | 能 | 給 | 我 | 帶 | 來 | 快 | 樂 |
誰 不讓 我 吃東西
S | B | E | S | B | M | E |
---|---|---|---|---|---|---|
誰 | 不 | 讓 | 我 | 吃 | 東 | 西 |
我 一定 打死他
S | B | E | B | M | E |
---|---|---|---|---|---|
我 | 一 | 定 | 打 | 死 | 他 |
StatusSet = {B, E, M, S}
ObservedSet = {我,是,一,枚,吃,貨,喜,歡,東,西,能,給,帶,來,快,樂,誰,不,讓,定,打,死,他 }
InitStatus = {11/33, 11/33, 3/33, 8/33}
TransProbMatrix矩陣:
^ | B | M | E | S |
---|---|---|---|---|
B | 0.0 | 3/11 | 8/11 | 0.0 |
M | 0.0 | 0.0 | 3/3 | 0.0 |
E | 5/11 | 0.0 | 0.0 | 1/11 |
S | 6/8 | 0.0 | 0.0 | 2/11 |
EmitProbMatrix矩陣:
^ | 我 | 是 | 一 | 枚 | 吃 | 貨 | 喜 | 歡 | 東 | 西 | 能 | 給 | 帶 | 來 | 快 | 樂 | 誰 | 不 | 讓 | 定 | 打 | 死 | 他 |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
B | 0.0 | 0.0 | 2/11 | 0.0 | |||||||||||||||||||
M | 0.0 | 0.0 | 0.0 | 0.0 | 0.0 | 0.0 | 0.0 | 0.0 | 2/3 | ||||||||||||||
E | 0.0 | 0.0 | 0.0 | 1/11 | |||||||||||||||||||
S | 4/8 | 1/11 | 0.0 | 0.0 |
太累了,寫一部分吧~
當做完以上工作,模型就已經訓練好了,當需要對一個待分詞序列進行序列標註的時候,可以利用維特比演算法,求出狀態值序列。
Viterbi演算法
累屎了,以後再來填坑~
相關文章
- 隱馬爾可夫模型(HMM)中文分詞隱馬爾可夫模型HMM中文分詞
- 隱馬爾科夫模型(HMM)分詞研究馬爾科夫模型HMM分詞
- HMM隱馬爾可夫模型HMM隱馬爾可夫模型
- 隱馬爾可夫模型(HMM)詳解隱馬爾可夫模型HMM
- 隱馬爾科夫模型HMM(一)HMM模型馬爾科夫模型HMM
- 【HMM】隱馬爾科夫模型HMM馬爾科夫模型
- HMM隱馬爾可夫模型來龍去脈(二)HMM隱馬爾可夫模型
- 隱馬爾可夫模型隱馬爾可夫模型
- 用hmmlearn學習隱馬爾科夫模型HMMHMM馬爾科夫模型
- 隱馬爾可夫模型詳解隱馬爾可夫模型
- 10_隱馬爾可夫模型隱馬爾可夫模型
- ML-隱馬爾可夫模型隱馬爾可夫模型
- 機器學習之隱馬爾可夫模型機器學習隱馬爾可夫模型
- 隱馬爾可夫模型 | 賽爾筆記隱馬爾可夫模型筆記
- 隱馬爾可夫模型及應用隱馬爾可夫模型
- 中文分詞的探索,CRF(條件隨機場)和HMM(隱馬爾可夫模型)用於分詞的對比,以及中文分詞的評估中文分詞CRF條件隨機場HMM隱馬爾可夫模型
- 隱馬爾科夫模型HMM(三)鮑姆-韋爾奇演算法求解HMM引數馬爾科夫模型HMM演算法
- 一個隱馬爾科夫模型的應用例項:中文分詞馬爾科夫模型中文分詞
- NLP-隱馬爾可夫模型及使用例項隱馬爾可夫模型
- 隱馬爾科夫模型HMM(四)維特比演算法解碼隱藏狀態序列馬爾科夫模型HMM維特比演算法
- 隱馬爾可夫模型的Viterbi解碼演算法隱馬爾可夫模型Viterbi演算法
- 馬爾可夫鏈模型(轉載)馬爾可夫模型
- 用簡單易懂的例子解釋隱馬爾可夫模型隱馬爾可夫模型
- 隱馬爾科夫模型HMM(二)前向後向演算法評估觀察序列概率馬爾科夫模型HMM演算法
- 維特比演算法和隱馬爾可夫模型的解碼維特比演算法隱馬爾可夫模型
- 隱馬爾科夫模型python實現簡單拼音輸入法馬爾科夫模型Python
- 使用馬爾可夫模型自動生成文章馬爾可夫模型
- 域結構進化的馬爾可夫模型馬爾可夫模型
- 隱馬爾科夫模型前向後向演算法馬爾科夫模型演算法
- CVPR 2021 | 時間序列疾病預測的因果隱馬爾可夫模型隱馬爾可夫模型
- 【機器學習】--隱含馬爾科夫模型從初識到應用機器學習馬爾科夫模型
- [譯] 用 Python 實現馬爾可夫鏈的初級教程Python馬爾可夫
- 理解馬爾可夫決策過程馬爾可夫
- 從語言建模到隱馬爾可夫模型:一文詳述計算語言學隱馬爾可夫模型
- 2022-05-17-馬爾科夫鏈之傳統馬爾可夫鏈馬爾科夫馬爾可夫
- 機器學習知識點(十)馬爾可夫鏈機器學習馬爾可夫
- R資料分析:縱向分類結局的分析-馬爾可夫多型模型的理解與實操馬爾可夫多型模型
- 馬爾科夫鏈的穩態分佈馬爾科夫