• HMM隐马尔可夫模型用于序列标注


    HMM隐马尔可夫模型用于序列标注


    前言

    在这里插入图片描述

    一、什么问题用HMM?

    使用HMM模型时我们的问题一般有这两个特征:

    • 我们的问题是基于序列的,比如时间序列,或者状态序列。NLP中常见的机器翻译、词性标注、分词等任务都可以看作是序列化问题。
    • 我们的问题中有两类数据,一类序列数据是可以观测到的,即观测序列;而另一类数据是不能观察到的,即隐藏状态序列,简称状态序列。比如,在机器翻译中,我们可以将源语言文本看作是观测序列,目标语言文本看作是状态序列;又比如,词性标注中,词序列是观测序列,词性序列是状态序列。

    二、HMM是什么模型?

    生成模型是指对联合概率建模,判别模型是对条件概率建模 ,HMM模型属于生成模型,因为HMM模型中没有建立决策边界,而是直接对联合概率分布建模。当给定观测序列时,我们使用前向算法计算每条状态序列的概率,选取概率最大的状态序列路径作为序列标注的结果
    在这里插入图片描述
    HMM基于两个重要假设:

    • 齐次马尔可夫假设:马尔可夫性质指的是每个状态值取决于前面有限个状态
      例如当前的词性仅依赖于前一个词性是什么。例如,动词后常接名词
    • 观测独立性假设:任意时刻的观测状态,仅仅依赖于当前隐藏状态。
      当前词仅与当前词性有关举例来说,当给定一个词“苹果”,我们根据训练集统计得知名词词性发射至“苹果”的概率远大于其它词性,所以我们可以预测当前词倾向于是名词。

    三、HMM用于序列标注训练流程

    在这里插入图片描述

    1. 极大似然估计法(有监督)

    在这里插入图片描述
    在这里插入图片描述

    2.Baum-Welch算法(无监督学习)

    在这里插入图片描述
    如果你有机器学习的基础,那你很可能学习过K-Means算法,这是一种无监督的聚类算法。它本质上就是一种EM算法。对于给定的许多个无标签的样本点,K-Means可以将他们聚成任意n个类别。具体的做法是先随机选取数据集中的n个点作为聚类的质心点,计算每个点到每个质心点的距离,将他们归类到距离最小的类别下;然后对于每一个类别,重新计算其质心点;我们反复迭代进行上述的归类和质心计算的步骤,直到质心不再变化。随机初始化和重置质心的过程其实就是EM算法的E步,计算样本点到质心的距离并将其聚类到最近的质心的过程其实就是EM算法的M步。

    K-Means算法直接对样本点进行归类,而不是计算每个类别的概率,所以属于Hard EM。Hard EM和 Soft EM的区别和我之前在吴恩达的深度学习课程上看到的 SoftMax和HardMax的区别很像,个人感觉本质是一样。

    总结一下,当我们的样本没有给定标注数据,即只有句子没有词性时,我们可以对需要学习的三个参数矩阵进行随机初始化(np.rand),初步确定模型,然后极大化数据的某种似然,调整得到新的参数矩阵,通过不断地迭代,参数矩阵将逐渐收敛,当它们的变化范围缩小到某个可以被接受的阈值时,我们可以停止迭代,将当前的参数矩阵用于预测。

    需要注意的是,EM算法无法保证全局最优解,和梯度下降算法非常类似,他们能够稳定达到全局最优的条件都是似然函数(损失函数)是一个凸函数。(PS:似然函数和损失函数的关系我个人认为非常紧密,后面会专门写一篇blog说一下这个问题)

    前向后向算法的使用,主要是因为对于网格中的每一个状态,它既计算到达此状态的“前向”概率(给定当前模型的近似估计),又计算到达此状态的“后向”概率(给定当前模型的近似估计)。 这些都可以通过利用递归进行加速计算。使用前向算法和后向算法的相互合作,我们可以得到很多有用的信息,并可以将它们运用在EM算法过程中的极大化似然估计上。(PS:这里的Forward算法和后面Viterbi算法中的Forward算法并不完全相同,这里是 sum-product ,你可以看作是神经网络中的正向传播过程,对于传至当前状态的概率进行求和;而后者是 max-product,对于传至当前状态的概率取最大值 )

    这里顺带说一句,前向算法还可以用于计算序列的概率,从而选择模型。如果我们训练了多个词性标注的HMM模型,那么对于一个需要标注的句子,我们可以通过前向算法计算它在不同模型中可能出现的概率,然后选取最大概率的模型用于预测。

    3. 隐马尔可夫模型的预测(解码)过程

    在这里,我们使用一种叫做维特比(viterbi)算法的动态规划算法进行状态序列的解码,也就是词性序列的预测。

    维特比算法是一种动态规划求解篱笆网络(Lattice)的最优路径问题的方法。通俗看懂维特比
    在这里插入图片描述
    简单阐述一下就是:状态矩阵中,当前节点的值等于上一层各节点的值乘以对应的转移路径的权值所得结果中的最优值(max-product),同时,我们还建立一个回溯矩阵,保存状态矩阵中每个节点的值是由上一层的哪个节点转移而来。当前向传播计算到最后一层时,我们选取最后一层的节点中的最优值,并通过回溯矩阵反向回溯得到对应的最优序列。特别地,在隐马尔可夫模型中,我们在前向传播计算每个节点最优值的时候,还需要考虑发射概率。

    通过维特比算法,我们可以较快的利用训练好的模型去预测一个句子的最大概率词性序列,并输出。
    在实际运用模型的过程中,我们还会发现这样的一个问题:训练得到的参数矩阵很可能是较为稀疏的,例如从一个词性从未发射到某个单词过。同时,训练集的规模有限,不可能包含所有的词和词性。由于状态矩阵的转移涉及概率的累乘,上述未登录的情况将导致发射或转移或初始概率为0,进而使得前向传播计算出的整条序列地概率为0
    为了解决零概率问题,我们需要还引入平滑方法,例如Laplace平滑等
    平滑参考

    总结

    至此可以了解HMM的详细训练和解码流程

  • 相关阅读:
    宁夏回族自治区工程技术系列专业技术职称评审条件
    PyTorch的安装与使用
    [Python]Django 数据库数据的增删改查
    C树和森林的研究学习随记【一】
    EN 1504-5混凝土结构保护和修理用产品混凝土喷射—CE认证
    月薪9000招不到人?为什么这届年轻人不愿进工厂了?
    [计算机网络]IP协议
    ML之PFI(eli5):基于mpg汽车油耗数据集利用RF随机森林算法和PFI置换特征重要性算法实现模型特征可解释性排序
    【Java Web】论坛帖子添加评论
    哈希表的查找与插入及删除
  • 原文地址:https://blog.csdn.net/fs1341825137/article/details/126017652