1. 程式人生 > >結巴分詞3--基於漢字成詞能力的HMM模型識別未登入詞

結巴分詞3--基於漢字成詞能力的HMM模型識別未登入詞

1 演算法簡介

結巴分詞2--基於字首詞典及動態規劃實現分詞 博文中,博主已經介紹了基於字首詞典和動態規劃方法實現分詞,但是如果沒有字首詞典或者有些詞不在字首詞典中,jieba分詞一樣可以分詞,那麼jieba分詞是如何對未登入詞進行分詞呢?這就是本文將要講解的,基於漢字成詞能力的HMM模型識別未登入詞。

利用HMM模型進行分詞,主要是將分詞問題視為一個序列標註(sequence labeling)問題,其中,句子為觀測序列,分詞結果為狀態序列。首先通過語料訓練出HMM相關的模型,然後利用Viterbi演算法進行求解,最終得到最優的狀態序列,然後再根據狀態序列,輸出分詞結果。

2 例項

2.1 序列標註

序列標註,就是將輸入句子和分詞結果當作兩個序列,句子為觀測序列,分詞結果為狀態序列,當完成狀態序列的標註,也就得到了分詞結果。

以“去北京大學玩”為例,我們知道“去北京大學玩”的分詞結果是“去 / 北京大學 / 玩”。對於分詞狀態,由於jieba分詞中使用的是4-tag,因此我們以4-tag進行計算。4-tag,也就是每個字處在詞語中的4種可能狀態,B、M、E、S,分別表示Begin(這個字處於詞的開始位置)、Middle(這個字處於詞的中間位置)、End(這個字處於詞的結束位置)、Single(這個字是單字成詞)。具體如下圖所示,“去”和“玩”都是單字成詞,因此狀態就是S,“北京大學”是多字組合成的詞,因此“北”、“京”、“大”、“學”分別位於“北京大學”中的B、M、M、E。

2.2 HMM模型

關於HMM模型的介紹,網路上有很多的資源,比如 52nlp整理的 HMM相關文章索引 。博主在此就不再具體介紹HMM模型的原理,但是會對分詞涉及的基礎知識進行講解。

HMM模型作的兩個基本假設:

  • 1.齊次馬爾科夫性假設,即假設隱藏的馬爾科夫鏈在任意時刻t的狀態只依賴於其前一時刻的狀態,與其它時刻的狀態及觀測無關,也與時刻t無關;

    P(states[t] | states[t-1],observed[t-1],...,states[1],observed[1]) = P(states[t] | states[t-1]) t = 1,2,...,T

  • 2.觀測獨立性假設,即假設任意時刻的觀測只依賴於該時刻的馬爾科夫鏈的狀態,與其它觀測和狀態無關,

    P(observed[t] | states[T],observed[T],...,states[1],observed[1]) = P(observed[t] | states[t]) t = 1,2,...,T

HMM模型有三個基本問題:

  • 1.概率計算問題,給定模型 λ=(A,B,π)λ=(A,B,π)