文章结构
- HMM 基本概念
- HMM 与分词关系
- 如何用 HMM 分词
在 自然语言处理 -分词初窥 我们介绍了基于词典的(最大匹配)分词方法,这种方法依赖于现有的词典库,对于新词(也称未登录词,out of vocabulary, OOV),则无法准确的进行分词。针对 OVV 问题,本文着重阐述下如何利用 HMM 实现基于字的分词方法。
利用 HMM 模型进行分词,主要是将分词问题视为一个序列标注(sequence labeling)问题。基本的思想就是根据观测值序列找到真正的隐藏状态值序列。在中文分词中,一段文字的每个字符可以看作是一个观测值,而这个字符的词位置(BEMS)可以看作是隐藏的状态。使用 HMM 的分词,通过对切分语料库进行统计,可以得到模型中 5 个要素:起始概率矩阵,转移概率矩阵,发射概率矩阵,观察值集合,状态值集合。结合这些要素,分词问题最终转化成求解隐藏状态序列概率最大值的问题,求解这个问题的一个常用方法是 Viterbi 算法。
隐马尔可夫模型(Hidden Markov Model,HMM)
HMM 包含如下五元组:
- 状态值集合 S = { s 1 , s 2 , . . . , s n } \mathcal{S}=\{s_1, s_2, ..., s_n\} S={ s1,s2,...,sn},其中 n n n 为可能的状态数;
- 观测值集合 $\mathcal{O}={o_1, o_2, …,o_m} $,其中 m m m 为可能的观测数;
- 转移概率矩阵 T = [ t i j ] T=[t_{ij}] T=[tij] ,其中 t i j t_{ij} tij 表示从状态i转移到状态j的概率;
- 发射概率矩阵(也称之为观测概率矩阵) E = [ e j k ] E=[e_{jk}] E=[ejk],其中 e j k e_{jk} ejk 表示在状态 j 的条件下生成观测状态 k 的概率;
- 初始状态分布 π \pi π。
HMM 的三个问题
- 概率计算问题,给定模型 λ = ( A , B , π ) \lambda = (A, B, \pi) λ=(A,B,π) 和观测序列 O = ( o 1 , . . . , o T ) O = (o_1, ..., o_T) O=(o1,...,oT),怎样计算在模型 λ \lambda λ 下观测序列 O O O 出现的概率 P ( O ∣ λ ) P(O|\lambda) P(O∣λ)。可使用 Forward-backward 算法求解。
- 学习问题,已知观测序列 O O O,估计模型 λ = ( A , B , π ) \lambda = (A, B, \pi) λ=(A,B,π) 的参数,使得在该模型下观测序列的概率 P ( O ∣ λ ) P(O|\lambda) P(O∣λ) 尽可能大,即用极大似然估计的方法估计参数。
- 解码(decoding)问题,已知观测序列 O O O 和模型 λ = ( A , B , π ) \lambda = (A, B, \pi) λ=(A,B,π),求对给定观测序列条件概率 P ( S ∣ O ) P(S|O) P(S∣O) 最大的状态序列 S = ( s 1 , . . . , s T ) S = (s_1, ..., s_T) S=(s1,...,sT),即给定观测序列,求最有可能的对应的状态序列。
HMM 分词预备知识
在之前的文章中我们简要介绍了基于字分词的方法是如何将分词转换为序列标注问题。在 HMM 分词中,我们将状态值集合 S \mathcal{S} S 置为 {‘B’, ‘M’, ‘E’, ‘S’},分别表示词的开始、结束、中间(begin、end、middle)及字符独立成词(single);观测序列即为中文句子。比如,“今天天气不错” 通过 HMM 求解得到状态序列 “B E B E B E”,则分词结果为“今天/天气/不错”。
形式化的,分词任务对应的问题可表述为:对于观测序列 C = { c 1 , . . . , c n } C=\{c_1,...,c_n\} C={ c1

本文介绍了如何利用HMM模型解决自然语言处理中的分词问题。通过将分词视为序列标注问题,使用Viterbi算法求解隐藏状态序列概率最大值,详细探讨了HMM的模型要素、学习问题和解码问题,并提供了实际的分词效果分析。
最低0.47元/天 解锁文章
2039

被折叠的 条评论
为什么被折叠?



