Python 中文分词库 jieba 中 HMM 模型 及其 viterbi 算法详解
HMM 模型在 jieba 分词流程中的作用 jieba 在经过第一轮以已知词典为基础的分词之后,默认会通过 HMM 模型(隐马尔可夫模型)对第一轮分词后产生的连续的独立单字进行概率拼词,来完成对于未知词(OOV)的预测。 HMM 模型的思路是,通过概率计算为每一个字打上一个位置标签,位置标签有以下四种: B: 即 Begin,意为词的开头 M: 即 Middle,意为词的中间 E: 即 End,意为词的结尾 S: 即 Single,意为单字成词 HMM 模型的核心依托于 viterbi 算法实现 注:为了避免极小 float 概率数值连乘导致下溢,无法比较浮点数大小,所以在计算时全部采用的是 对数概率和 替代 概率连乘 进行运算。下文中 对数概率 统一简写为 概率,不再进行额外说明。 viterbi 算法核心原理 通过预先定义的三张概率表(首字概率、转移概率、发射概率)计算输入的连续单字列表中的各个字在各种标签组合下的概率和最大的作为最优路径完成新词预测。 首字概率:“BMES” 四个标签作为首字的概率,是标签级别概率,这个概率是固定的,所有字统一,定义在 /jieba/finalseg/prob_start.py 文件中) P={'B': -0.26268660809250016, 'E': -3.14e+100, 'M': -3.14e+100, 'S': -1.4652633398537678}转移概率:当前字的某个标签 → 下一个字的某个标签 的概率,同样为标签级别概率,表示标签之前跳转的概率数值,与具体字无关,该数值一样为固定数值,配置在 /jieba/finalseg/prob_trans.py 文件中。 例如:“直聘” 二字中 “直” 为 B 标签, → “聘” 为 E 标签,转移概率即 P(B → E) = -0.510825623765990。 ...