隱馬爾可夫模型(HMM)實現分詞

「已登出」發表於2017-03-31

隱馬爾可夫模型(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 ,求狀態值序列

訓練過程

假設我們的已標註訓練樣本有以下五條(當然,我們實際使用中訓練資料量是很大的,此處只是為了舉例說明):

我 是 一枚 吃貨

SSBEBE


我 喜歡 吃東西

SBEBME
西


吃 能 給我 帶來 快樂

SSBEBEBE


誰 不讓 我 吃東西

SBESBME
西


我 一定 打死他

SBEBME


StatusSet = {B, E, M, S}

ObservedSet = {我,是,一,枚,吃,貨,喜,歡,東,西,能,給,帶,來,快,樂,誰,不,讓,定,打,死,他 }

InitStatus = {11/33, 11/33, 3/33, 8/33}

TransProbMatrix矩陣:

^BMES
B0.03/118/110.0
M0.00.03/30.0
E5/110.00.01/11
S6/80.00.02/11


EmitProbMatrix矩陣:

^西
B0.00.02/110.0
M0.00.00.00.00.00.00.00.02/3
E0.00.00.01/11
S4/81/110.00.0

太累了,寫一部分吧~

當做完以上工作,模型就已經訓練好了,當需要對一個待分詞序列進行序列標註的時候,可以利用維特比演算法,求出狀態值序列。

Viterbi演算法

累屎了,以後再來填坑~

相關文章