机器学习中的隐马尔可夫模型

2025年6月24日 | 阅读 8 分钟

隐马尔可夫模型(HMM)是一种概率模型,常用于机器学习中,例如语音识别、自然语言处理和生物信息学等任务。它们之所以成为建模数据序列的流行选择,是因为即使数据嘈杂或不完整,它们也能有效地捕捉数据的底层结构。在本文中,我们将对隐马尔可夫模型进行全面概述,包括其数学基础、应用和局限性。

什么是隐马尔可夫模型?

隐马尔可夫模型(HMM)是一种概率模型,它由一系列隐状态组成,每个隐状态都会生成一个观测值。隐状态通常是不可直接观察的,HMM的目标是根据观测值序列来估计隐状态序列。HMM由以下组成部分定义:

  • 一组 N 个隐状态,S = {s1, s2, ..., sN}。
  • 一组 M 个观测值,O = {o1, o2, ..., oM}。
  • 一个初始状态概率分布,? = {?1, ?2, ..., ?N},它指定了开始于每个隐状态的概率。
  • 一个转移概率矩阵,A = [aij],定义了从一个隐状态移动到另一个隐状态的概率。
  • 一个发射概率矩阵,B = [bjk],定义了从给定隐状态发射一个观测值的概率。

HMM背后的基本思想是,隐状态生成观测值,而观测到的数据用于估计隐状态序列。这通常被称为前向-后向算法。

隐马尔可夫模型的应用

现在,我们将探讨HMM的一些关键应用,包括语音识别、自然语言处理、生物信息学和金融。

  • 语音识别
    HMM最著名的应用之一是语音识别。在该领域,HMM用于对构成语音的不同声音和音素进行建模。在这种情况下,隐状态对应于不同的声音或音素,而观测值是由语音生成的声学信号。目标是根据观测到的声学信号来估计隐状态序列,该序列对应于语音的转录。HMM之所以特别适用于语音识别,是因为即使数据嘈杂或不完整,它们也能有效地捕捉语音的底层结构。在语音识别系统中,HMM通常在大量的语音信号数据集上进行训练,然后估计出的HMM参数用于实时转录语音。
  • 自然语言处理
    HMM的另一个重要应用是自然语言处理。在该领域,HMM用于词性标注、命名实体识别和文本分类等任务。在这些应用中,隐状态通常与文本的底层语法或结构相关联,而观测值是文本中的单词。目标是根据观测到的单词来估计隐状态序列,该序列对应于文本的结构或含义。HMM在自然语言处理中有用,因为即使数据嘈杂或模糊,它们也能有效地捕捉文本的底层结构。在自然语言处理系统中,HMM通常在大量的文本数据集上进行训练,然后估计出的HMM参数用于执行各种NLP任务,例如文本分类、词性标注和命名实体识别。
  • 生物信息学
    HMM在生物信息学中也得到广泛应用,用于对DNA、RNA和蛋白质序列进行建模。在这种情况下,隐状态对应于不同类型的残基,而观测值是残基序列。目标是根据观测到的残基序列来估计隐状态序列,该序列对应于分子的底层结构。HMM在生物信息学中有用,因为即使数据嘈杂或不完整,它们也能有效地捕捉分子的底层结构。在生物信息学系统中,HMM通常在大量分子序列数据集上进行训练,然后估计出的HMM参数用于预测新分子序列的结构或功能。
  • 融资
    最后,HMM也已在金融领域中使用,用于对股票价格、利率和货币汇率进行建模。在这些应用中,隐状态对应于不同的经济状态,例如牛市和熊市,而观测值是股票价格、利率或汇率。目标是根据观测到的价格、费率或汇率来估计隐状态序列,该序列对应于底层经济状态。HMM在金融中有用,因为即使数据嘈杂或不完整,它们也能有效地捕捉底层经济状态。在金融系统中,HMM通常在大量金融数据集上进行训练,然后估计出的HMM参数用于对未来市场趋势做出预测或开发投资策略。

隐马尔可夫模型的局限性

现在,我们将探讨HMM的一些关键局限性,并讨论它们如何影响基于HMM的系统的准确性和性能。

  • 建模能力有限
    HMM的一个关键局限性在于其建模能力相对有限。HMM旨在对数据序列进行建模,其中数据的底层结构由一组隐状态表示。然而,数据的结构可能非常复杂,而HMM的简单结构可能不足以准确地捕捉所有细节。例如,在语音识别中,语音声音与相应的声学信号之间的复杂关系可能无法被HMM的简单结构完全捕捉。
  • 过拟合
    HMM的另一个局限性是,它们可能容易过拟合,尤其是在隐状态数量很大或训练数据量有限时。过拟合发生在模型过度拟合训练数据而无法泛化到新数据时。当模型应用于实际数据时,这可能导致性能下降并产生高错误率。为了避免过拟合,重要的是仔细选择隐状态的数量,并使用适当的正则化技术。
  • 鲁棒性不足
    HMM在面对数据中的噪声和变异性方面也受到其鲁棒性的限制。例如,在语音识别中,语音产生的声学信号可能受到各种失真和噪声的影响,这使得HMM难以准确估计数据的底层结构。在某些情况下,这些失真和噪声可能导致HMM做出错误的决策,从而导致性能下降。为了解决这些局限性,通常需要使用额外的处理和滤波技术,例如降噪和归一化,在将数据输入HMM之前对其进行预处理。
  • 计算复杂性
    最后,HMM的计算复杂性也可能限制其应用,尤其是在处理大量数据或使用复杂模型时。HMM的计算复杂性源于需要估计模型的参数以及计算给定模型下数据的似然度。对于大型模型或高频采样的A数据来说,这可能非常耗时且计算成本高昂。为了解决此限制,通常需要使用并行计算技术或使用可降低模型计算复杂性的近似方法。

使用 Python 实现 HMM

作为参考,我们将使用 Python 代码实现用于词性标注的隐马尔可夫模型。

导入库

导入数据

输出

Hidden Markov Model in Machine Learning

计算数据中标签和单词的总数。这将在以后派上用场。

输出

Hidden Markov Model in Machine Learning

我们无法使用“训练测试拆分”来正确分割数据,因为这样做会导致某些句子成分包含在训练集中,而其他成分包含在测试集中。我们改为使用“GroupShuffleSplit”。

输出

Hidden Markov Model in Machine Learning

在检查了拆分数据后,一切似乎都井井有条。

验证训练集中的标签和单词数量。

输出

Hidden Markov Model in Machine Learning

标签数量足够,但单词数量(29k 对 35k)不足。

因此,我们必须随机地向训练数据集中添加一些 UNKNOWN 单词,之后我们必须重新计算单词列表并生成数字到单词的映射。

输出

Hidden Markov Model in Machine Learning

可以使用 Baum-Welch 算法通过使用 Baum-Welch 算法来训练隐马尔可夫模型。但是,训练的唯一输入是数据集(单词)。

我们无法将状态映射回词性标签。

因此,我们必须确定“hmmlearn”的模型参数。

初始化 HMM

我们必须首先将某些单词更改为“UNKNOWN”一词,因为它们可能永远不会出现在训练集中。

然后将“test data”分割成“samples”和“lengths”并发送到 HMM。

输出

Hidden Markov Model in Machine Learning

输出

Hidden Markov Model in Machine Learning

输出

Hidden Markov Model in Machine Learning

HMM模型的准确率非常高,约为 96%。