构建中文分词器 - 隐马尔科夫模型

利用 隐马尔科夫模型(HMM) 的解码能力,能从一个观察序列(字符串序列)解码成另一个隐藏状态序列(分词符号序列)

解释

将训练数据按照 BMES 标记集合转换成隐藏状态序列。一般情况下使用 BMES 标记体系作为隐藏序列的体系。

BMES 标记体系

BMES 分别是 Begin / Middle / End / Single 的缩写,分别代表着所标记的字符是一个词语的 开始字符 / 中间字符 / 结尾字符 / 单个字符(也就是说这个词只由一个字符构成)。

举例来说:

  • 这个词对应的 BMES 标记为 S
  • 我们 这个词对应的 BMES 标记为 BE
  • 老爷爷 这个词对应的 BMES 标记为 BME
  • 风调雨顺 这个词对应的 BMES 标记为 BMME

得到训练数据后,可以统计出 HMM 的两个参数表。得到的 HMM 参数后可以利用 Viterbi 算法解码出隐藏状态序列,再按照隐藏状态序列反向将字符串分割成词语

示例

我们在野生动物园玩 为例, 假设 HMM 解码得到的隐藏状态序列为 BESBMMMES

则会被分成 我们(BE) / (S) / 野生动园(BMMME) / (S)

优化方案

为了增加处理 OOV 的能力,对于没有出现在训练数据集的字符,每个隐藏状态都有一个非常小的 Emission Probability, 这样可以增加模型的鲁棒性。

关联算法

CRF 的基本想法与此算法类似,但性能更加强劲。

参考文献