1 算法簡介
在 結(jié)巴分詞2--基于前綴詞典及動(dòng)態(tài)規(guī)劃實(shí)現(xiàn)分詞 博文中,博主已經(jīng)介紹了基于前綴詞典和動(dòng)態(tài)規(guī)劃方法實(shí)現(xiàn)分詞,但是如果沒有前綴詞典或者有些詞不在前綴詞典中,jieba分詞一樣可以分詞,那么jieba分詞是如何對未登錄詞進(jìn)行分詞呢?這就是本文將要講解的,基于漢字成詞能力的HMM模型識(shí)別未登錄詞。
利用HMM模型進(jìn)行分詞,主要是將分詞問題視為一個(gè)序列標(biāo)注(sequence labeling)問題,其中,句子為觀測序列,分詞結(jié)果為狀態(tài)序列。首先通過語料訓(xùn)練出HMM相關(guān)的模型,然后利用Viterbi算法進(jìn)行求解,最終得到最優(yōu)的狀態(tài)序列,然后再根據(jù)狀態(tài)序列,輸出分詞結(jié)果。
2 實(shí)例
2.1 序列標(biāo)注
序列標(biāo)注,就是將輸入句子和分詞結(jié)果當(dāng)作兩個(gè)序列,句子為觀測序列,分詞結(jié)果為狀態(tài)序列,當(dāng)完成狀態(tài)序列的標(biāo)注,也就得到了分詞結(jié)果。
以“去北京大學(xué)玩”為例,我們知道“去北京大學(xué)玩”的分詞結(jié)果是“去 / 北京大學(xué) / 玩”。對于分詞狀態(tài),由于jieba分詞中使用的是4-tag,因此我們以4-tag進(jìn)行計(jì)算。4-tag,也就是每個(gè)字處在詞語中的4種可能狀態(tài),B、M、E、S,分別表示Begin(這個(gè)字處于詞的開始位置)、Middle(這個(gè)字處于詞的中間位置)、End(這個(gè)字處于詞的結(jié)束位置)、Single(這個(gè)字是單字成詞)。具體如下圖所示,“去”和“玩”都是單字成詞,因此狀態(tài)就是S,“北京大學(xué)”是多字組合成的詞,因此“北”、“京”、“大”、“學(xué)”分別位于“北京大學(xué)”中的B、M、M、E。
2.2 HMM模型
關(guān)于HMM模型的介紹,網(wǎng)絡(luò)上有很多的資源,比如 52nlp整理的 HMM相關(guān)文章索引 。博主在此就不再具體介紹HMM模型的原理,但是會(huì)對分詞涉及的基礎(chǔ)知識(shí)進(jìn)行講解。
HMM模型作的兩個(gè)基本假設(shè):