zoukankan      html  css  js  c++  java
  • 隐马尔可夫模型

    隐马尔可夫模型解决的序列标注问题,它是一个生成模型。本文先介绍显马尔可夫模型(或者叫马尔可夫链),然后介绍显马尔可夫模型的扩展,即隐马尔可夫模型。显与隐指的是状态序列是否可观测。

    显(可视)马尔可夫模型

    显马尔可夫模型、可视马尔可夫模型、马尔可夫链都是指马尔可夫模型。

    随机过程又称随机函数,是随时间而随机变化的过程。马尔可夫模型描述了一类(这些随机变量并非相互独立,每个随机变量的值依赖于这个序列前面的状态)重要的随机过程。
    随机过程有两层含义:

    1. 它是一个时间的函数,随着时间的改变可改变。
    2. 每个时刻上的函数值是不确定的,是随机的,也就是说,每一时刻上的函数值按照一定的概率而分布。

    马尔可夫模型与有限状态机

    马尔可夫模型又可视为随机的有限状态机,更准确的说马尔可夫模型和隐马尔可夫模型都是有限自动机的扩充。

    马尔可夫模型与n元文法模型

    前面提到在马尔可夫模型中每个随机变量受这个序列前面的状态影响的,如果我们只考虑前面一个状态对后面一个状态出现的概率的影响,这样的链叫做一重马尔可夫链,也就量二元文法模型,如果考虑前面两个状态,这样的叫二重马可尔可夫链,也就是三元文法模型,依此类推,n重马尔可夫链对应n-1元文法模型。


    隐马尔可夫模型

    马尔可夫模型是关于时序的概率模型,描述由一个隐藏的马尔可夫链随机生成不可可观测 的状态随机序列,再由各个状态生成一个观测而产生观测 随机序列的过程。

    相关符号

    高Q是所有可能状态集合,V是氖可能的观测集合

    Q={q_1,q_2\, ... q_N },V={v_1,v_2\, ... v_M }
    

    N是可能的状态数,M是可能的观测数。
    I是长度为T的状态序列,O是对应的观测序列。

    I={i_1,i_2\, ... i_T },O={o_1,o_2\, ... o_T }
    

    A是状态转移矩阵

    A=[a_{ij}]_{M 	imes N}
    

    其中

    a_{ij}=P(i_{t+1}=q_j|i_t=q_i), qquad i=1,2...N;j=1,2...N
    

    表示在时刻t处于状态qi的状态下在时刻t+1转移到状态qj的概率。

    B是观测概率矩阵

    B=[b_j(k)]_{N 	imes M}
    

    其中,

    b_j(k) = P(o_t=v_k|i_t=q_j), qquad k=1,2...M;j=1,2...N
    

    表示在时刻t处于状态qj的条件下生成观测vk的概率。
    (pi)是初始状态概率向量

    pi = (pi_i)
    

    其中

    pi_i=P(i_1=q_i), qquad i=1,2...N
    

    表示时刻t=1处于状态qi的概率。

    马尔可夫模型(lambda)可以用三元符号表示,即

    lambda=(A,B,pi)
    

    2个假设

    1. 齐次马尔可夫假设,即假设隐藏的马尔可夫链在任意时刻t的状态只依赖于其前一时刻的状态,与其它时刻的状态及观测无关,也与时刻t无关。
    P(i_t mid i_{t-1},o_{t-1},...,i_1,o_1) = P(i_t mid i_{t-1}), qquad t=1,2,...,T
    
    1. 观测独立假设,即假设任意时刻的观测只依赖于该时刻的马尔可夫链的状态,与其它观测及状态无关。
    P(o_t mid i_T,o_T,i_{T-1},o_{T-1},...,i_{t+1},o_{t+1},i_t,i_{t-1},o_{t-1}...,i_1,o_1) = P(o_t mid i_{t})
    

    3个要素

    1. 状态转移概率矩阵(输出)(A)
    2. 观测概率矩阵(输入)(B)
    3. 初始状态概率矩阵((pi))

    3上问题

    1. 概率计算问题,给定一个模型(lambda=(A,B,pi))和观测序列(O=(o_1,o_2,...,o_T)),计算在模型(lambda)下观测序列O出现的(P(O mid lambda))
    2. 学习问题,给定足够量的观测数据,如何估计隐马尔可夫模型的参数;即已知观测序列(O=(o_1,o_2,...,o_T)),估计模型参数(lambda=(A,B,pi)),使得的(P(O mid lambda))在该模型观测序列概率最大。即用极大似然估计的方法估计参数。
    3. 预测问题也称解码问题,给定一个模型和某个特定的输出序列,如何找到最可能产生这个输出的状态序列;即已知模型数(lambda=(A,B,pi))和观测序列(O=(o_1,o_2,...,o_T)),求给定观测序列条件概率(P(I mid O)) 最大的状态序列(I(i_1,i_2,...,i_T))。即给定观测序列,求最大可能的对应的状态序列。

    概率计算问题

    直接计算

    前向算法

    定义前向概率 给定隐马尔可夫模型(lambda),定义从开始到时刻t的部分观测序列为(o_1,o_2,...,o_t)且在时刻t的状态为(q_i)的概率为前向概率,记作

    alpha_t(i)=P(o_1,o_2,...,o_t,i=q_i mid lambda)
    

    前向算法步骤:
    (1)初值

    alpha_1(i)=pi_ib_i(o_1), qquad i=1,2...N
    

    (2)递推

    alpha_{t+1}(i)=left[ sum_{j=1}^Nalpha_i(j)a_{ji} 
    ight]b_i(o_{t+1}), qquad i=1,2...N
    

    (3)终止

    P(O mid lambda) = sum_{i=1}^N alpha_T(i)
    

    后向算法

    定义后向概率 给定隐马尔可夫模型(lambda),定义在时刻t状态为(q_i)的条件下,从t+1到T的部分观测序列为(o_{t+1},o_{t+2},...,o_T)的概率为后向概率,记作

    eta_t(i)=P(o_{t+1},o_{t+2},...,o_T mid i_t=q_i,lambda)
    

    后向算法步骤:
    (1)

    eta_T(i)=1, qquad i=1,2...N
    

    (2)对t=T-1,T-2,...,1

    eta_{t}(i)=sum_{j=1}^N a_{ij}b_j(o_{t+1})eta_{t+1}(j), qquad i=1,2...N
    

    (3)

    P(O mid lambda) = sum_{i=1}^N pi_i b_i(o_1)eta_1(i)
    

    可以将观测序列概率P(O|λ)统一写成:

    P(O|lambda)=sum_{i=1}^Nsum_{j=1}^N alpha_t(i)a_{ij}b_j(o_{t+1})eta_{t+1}(j)
    

    此式当,t=1和t=T-1时,分别为

    sum_{i=1}^N alpha_T(i) \
    sum_{i=1}^N pi_i b_i(o_1)eta_1(i)
    

    两个求和符号中的(alpha_t(i)a_{ij}b_j(o_{t+1})eta_{t+1}(j))其实经过概率表示等价于:

    alpha_t(i)a_{ij}b_j(o_{t+1})eta_{t+1}(j)=P(o_1,o_2,...,o_T,i_t=q_i,i_{t+1}=q_j|lambda)
    

    两次求和其实就是将状态qi和状态qj的所有可能取值都取一遍,N是所有可能的状态数。

    一些概率和期望的计算

    1. 定义,给定模型(lambda)和观测(O),在时刻t处于状态qi的概率
    egin{aligned}
    gamma_t(i) & = P(i_t=q_i mid O,lambda) = frac{P(i_t=q_i,O mid lambda)}{P(O mid lambda)} \
    & = frac{P(i_t=q_i,O mid lambda)}{sum_i^N P(i_t=q_i,O mid lambda)} \
    & = frac{alpha_t(i)eta_t(i)}{sum_i^Nalpha_t(i)eta_t(i)}
    end{aligned}
    

    在这里

    egin{aligned}
    P(i_t=q_i,O mid lambda) &= alpha_t(i)=P(o_1,o_2,...,o_t,i=q_i mid lambda) P(o_{t+1},o_{t+2},...,o_T mid i_t=q_i,lambda)  \
    & = alpha_t(i)eta_t(i)
    end{aligned}
    

    通俗的解释为,给定模型(lambda),观测到整个观测序列O且到t时刻的状态为qi的概率,等于给定模型(lambda),到时刻t的观测序列且到t时刻的状态为qi的概率,并且在t时刻的状态为qi的条件下,从t到结束的概率。

    1. 定义,给定模型(lambda)和观测(O),在时刻t处于状态qi,且在t+1处于状态j的概率
    egin{aligned}
    xi_t(i,j) & = P(i_t=q_i,i_{t+1}=q_j mid O,lambda) = frac{P(i_t=q_i,i_{t+1}=q_j,O mid lambda)}{P(O mid lambda)} \
    & = frac{P(i_t=q_i,i_{t+1}=q_j,O mid lambda)}{sum_i^N P(i_t=q_i,O mid lambda)} \
    & = frac{P(i_t=q_i,i_{t+1}=q_j,O mid lambda)}{sum_i^N sum_j^N P(i_t=q_i,i_{t+1}=q_j,O mid lambda)} \
    & = frac{alpha_t(i)a_{ij}b_j(o_{t+1})eta_{t+1}(j)}{sum_i^N sum_j^N alpha_t(i)a_{ij}b_j(o_{t+1})eta_{t+1}(j)} \
    end{aligned}
    

    在这里

    egin{aligned}
    & P(i_t=q_i,i_{t+1}=q_j,O mid lambda) \
    &=alpha_t(i)a_{ij}b_j(o_{t+1})eta_{t+1}(j)\
    &=P(o_1,o_2,...o_t,i_t=q_i|lambda) P(q_j mid q_i) P(o_{t+1} mid q_j) P(o_{t+2},o_{t+3},...,o_T mid i_{t+1}=q_j,lambda)
    end{aligned}
    

    通俗解释是,给定模型(lambda)和观测(O),在时刻t处于状态qi,且在t+1处于状态j的概率,等于给定隐马尔可夫模型(lambda),从开始到时刻t的部分观测序列为(o_1,o_2,...,o_t)且在时刻t的状态为(q_i)的概率,并且在t时刻状态为(q_i)的条件下t+1时刻的状态为(q_j)的概率,并且(q_j)生成(o_{t+1})的概率,并且在时刻t+1状态为(q_j)的条件下,从t+2到T的部分观测序列为(o_{t+2},o_{t+3},...,o_T)的概率。
    此处输入图片的描述
    2. 利用(gamma_t(i))(xi_t(i,j))可以得到一些有用的期望

    (1)在观测O下状态i出现的期望值为

    sum_{t=1}^Tgamma_t(i)
    

    (2)在观测O下由状态i转移的期望值为

    sum_{t=1}^{T-1}gamma_t(i)
    

    (3)在观测O下由状态i转移到j期望值

    sum_{t=1}^{T-1}xi_t(i,j)
    

    学习问题

    预测问题

    维特比算法

    维特比算法的基础概括为以下3点:

    1. 如果概率最大的路径P(最短路径)经过某个点,比如图中的x22,那么这条路径上从起始眯S到s22的这一段子路径Q,一定是S到x22的最短路径。否则,用S到x22的最短路径R替代Q,便构成了一条比P更短的路径,这是显然是矛盾的。
      换句话说,如果概率最大的路径P(最短路径)经过某个点,比如图中的x22,那么是S到x22的最短路径一定是S到E的最短路径的子路径。
    2. 从S到E的路径必定经过第i时刻的某个状态 ,假设第i时刻有k个状态,那么如果记录了从S到第i个状态的所有k个结点的最短路径(指的是从S到各个k的最短路径),最终的最短路径必经过其中的一条。这样,在任何时刻,只要考虑非常有限条最短路径即可。
    3. 结合上述两点,假定当我们从状态i到状态i+1时,从状态i上各个结点的最短路径已经找到,并且记录在这些结点上,那么在计算从起点S到第i+1状态的某个结点(x_{t+1})的最短路径时,只要考虑从S到前一个状态i所有的k个结点的最短路径,以及从这k个结点到(x_{t+1}),j的距离即可

    其实用一句话来说的话,也就是这样的原理。如果概率最大的路径P(最短路径)经过某个点,比如图中的x22,那么是S到x22的最短路径一定是S到E的最短路径的子路径。

    第一步,从S出发,对于第一状态x1的各个节点,不妨假设有n1个,计算出S到它们的距离d(S,(x_{1i})),其中(x_{1i})代表任意状态1的节点。因为只有一步,所以这些距离都是S到它们各自的最短距离。
    第二步,要计算出从S到它们的最短距离。我们知道,对于特定的节点(x_{2i}),从S到它的路径可以经过状态1的n1中任何一个节点(x_{1i}),当然,对应的路径长度就是$d(S,x_{2i}) = d(S,x_{1j}) + d(x_{1j},x_{2i}) $我们要一一计算,找到最小值。

    d(S,x_{2i}) = min d(S,x_{1j}) + d(x_{1j},x_{2i})
    

    也就是说,从S到状态2的最短路径,等于从S到状态1的各个最短路径加上从状态1到状态2的距离中概率最大的一个。也可以说,我们知道S到状态1的n1个最短路径,那么从S到状态2的最短路径就等于这n1条路径到状态2中概率最大的一个。

    HMM与CRF

    《统计自然语言处理》
    HMM是生成式模型,以朴素贝叶斯为基础。
    CRF是判别式模型,以逻辑回归为基础。

    http://blog.csdn.net/xmu_jupiter/article/details/50956389

    原创地址:http://www.thinkinglite.cn/

  • 相关阅读:
    Ajax
    对于本地上关联了远程的git上的项目,删除现有的关联,然后关联新创建的git项目
    UNI-APP_uni-simple-router的快速上手(路由,nui路由拦截)
    js之观察者模式和发布订阅模式区别
    Vue CLI 3.0脚手架如何在本地配置mock数据
    es6解构赋值和扩展运算符
    js Array数组详细操作方法及解析合集
    list排序
    java常用的object数据处理
    java 读写 txt 文件
  • 原文地址:https://www.cnblogs.com/hwyang/p/6431237.html
Copyright © 2011-2022 走看看