假设随机变量 ( X(t) ) 随时间 ( t (t=t1, t2, t3...tn) ) 变化,若随机变量 ( X ) 满足马尔科夫性,即在任意时刻 ( t_n ),其状态仅依赖于前一时刻的状态,那么称 ( X(t) ) 的变化过程为马尔科夫随机过程。
隐马尔科夫模型(HMM)是一种基于观测变量推测未知变量的概率图模型。其特性包括: - (1) 基于观测变量推测未知变量; - (2) 形状序列满足马尔科夫性; - (3) 观测序列在任意时刻 ( t ) 的状态仅由该时刻隐藏状态决定。
HMM模型可以用来推断变量的概率分布。通过考虑联合概率 ( P(Y, X) ),我们可以推断出 ( Y ) 的分布。由于马尔科夫性质,隐藏状态 ( Y ) 在任意时刻 ( t ) 的状态仅取决于 ( t-1 ) 时刻的状态,观测序列 ( X ) 在任意时刻 ( t ) 的状态仅取决于 ( t ) 时刻的隐藏状态 ( Y )。
例如,中文句子“请问明天的天气怎么样?”是一个可观测的序列,而其分词标记序列(如“请问/明天/深圳/的/天气/怎么样/?”)则是未知的状态序列。分词标记序列可以用 BMES 标签表示: - B 表示开始; - M 表示中间; - E 表示结尾; - S 表示单个字符。
仔细分析联合概率表达式,可以看到它分为三个部分: - (1) 初始状态概率 ( P(y1) ):指序列开头的状态分布。例如,每个句子开头的标记分别为 BMES 的概率。 - (2) 状态转移概率 ( P(yi|y{i-1}) ):指状态序列内部,两个连续状态之间的转移概率。例如,标记序列 BMES 中,某一标记转移到另一个标记的概率。 - (3) 观测概率 ( P(xi|y_i) ):指由某个隐藏状态产生某个观测状态的概率。例如,某一标记为 B 时,观测到某个汉字的概率。
通过前面的介绍,读者可能对 HMM 仍有些模糊。本节将具体介绍 HMM 在分词中的应用,通过完整的实践思路和代码讲解,相信读者能更好地理解 HMM 模型。
假设词序列 ( Y = y1y2...yn ),HMM 分词的任务是根据序列 ( Y ) 推断出其标记序列 ( X = x1x2...xn )。为了实现这一目标,我们需要计算三个关键概率矩阵: - (1) 初始状态概率 ( P(y1) ):统计每个句子开头的标记数量,得到初始概率矩阵。 - (2) 状态转移概率 ( P(yi|y{i-1}) ):统计不同状态之间的转换次数,构建状态转移矩阵。 - (3) 观测概率 ( P(xi|y_i) ):统计由某个隐藏状态产生某个观测状态的次数,构建观测概率矩阵。
训练结束后,我们可以通过以下步骤应用上述概率矩阵进行分词: - (1) 初始化状态概率。 - (2) 逐步递推到后续时刻。 - (3) 最终选择最大概率的状态作为最终状态。 - (4) 回溯最优路径,得到最终的分词标记序列。
通过这种方法,我们可以高效地完成分词任务。例如,“我爱中国”分词的过程可以通过初始状态概率和观测概率矩阵计算得到最优路径,最终得到“我/爱/中国”的分词结果。
HMM 是一种非常适合用于序列标注问题的概率模型。虽然 HMM 引入了马尔科夫假设,使得 T 时刻的状态仅依赖于前一时刻的状态,但语言往往具有上下文相关性,因此 HMM 可能存在局限。读者可以思考如何改进这一模型以适应更复杂的情况。