本系列中文十年回顧中講了時至今日,中文分詞中對效果影響最大的是未登錄詞的識別。今天要講的就是基于HMM算法的中文分詞,可以用來發掘為登錄詞。
從中文分詞角度理解HMM
中文分詞,就是給一個漢語句子作為輸入,以“BEMS”組成的序列串作為輸出,然后再進行切詞,進而得到輸入句子的劃分。其中,B代表該字是詞語中的起始字,M代表是詞語中的中間字,E代表是詞語中的結束字,S則代表是單字成詞。
下面是一個用字符標注方法進行識別的一個例子
小明碩士畢業于中國科學院計算所
BEBEBMEBEBMEBES
BE/BE/BME/BE/BME/BE/S
小明/碩士/畢業于/中國/科學院/計算/所
上面的例子就是一個給定觀察序列,得到狀態序列,在HMM中就是一個解碼過程。
HMM簡介
定義: HMM (隱馬爾可夫模型) 是關于時序的概率模型, 描述由一個隱藏的馬爾可夫鏈隨機生成不可觀察的狀態序列,再有狀態序列生成一個觀測序列的過程。
HMM有以下5個要素:
觀測序列-O:小明碩士畢業于中國科學院計算所
狀態序列-S:BEBEBMEBEBMEBES
初始狀態概率向量-π:句子的第一個字屬于{B,E,M,S}這四種狀態的概率
狀態轉移概率矩陣-A:如果前一個字位置是B,那么后一個字位置為BEMS的概率各是多少
觀測概率矩陣-B:在狀態B的條件下,觀察值為耀的概率,取對數后是-10.460
備注:示例數值是對概率值取對數之后的結果,為了將概率相乘的計算變成對數相加,其中-3.14e+100作為負無窮,也就是對應的概率值是0
三類問題
當通過五元組中某些已知條件來求未知時,就得到HMM的三類問題:
- 似然度問題:參數(O,π,A,B)已知的情況下,求(π,A,B)下觀測序列O出現的概率
- 解碼問題:參數(O,π,A,B)已知的情況下,求解狀態值序列S。(viterbi算法)
- 學習問題:參數(O)已知的情況下,求解(π,A,B)。(Baum-Welch算法)
中文分詞屬于解碼問題, 就是對給定的觀察序列,求解對應的最優狀態的問題。
我們希望找到 s_1,s_2,s_3,... 使 P (s_1,s_2,s_3,...|o_1,o_2,o_3....) 達到最大。
意思是,當我們觀測到信號 o_1,o_2,o_3,... 時,我們要根據這組信號推測出發送的句子 s_1,s_2,s_3,....,顯然,我們應該在所有可能的句子中找最有可能性的一個。
HMM 的兩個假設:
-
有限歷史假設:si 只由si-1 決定
-
獨立輸出假設:第 i 時刻的接收信號 oi 只由狀態 si 決定
基于上面的兩個假設,解碼問題可以推導如下:
Viterbi 算法
Viterbi算法:是一種動態規劃算法。它用于尋找最有可能產生觀測事件序列的維特比路徑——隱含狀態序列,特別是在馬爾可夫信息源上下文和隱馬爾可夫模型中。
定義在t時刻, 狀態為i的所有單路徑中最大的值為:
則在t+1時刻有:
則利用上面的兩個公式就可以完成解碼了。