自然语言处理学习笔记-lecture3-隐马尔科夫模型

马尔科夫模型

状态集合:S={s1,,sN}
观测状态序列:x=x1,,xt,,xT,其中xtS
状态初始化概率:πi=p(x1=si),1iN
状态转移概率:aij=p(xt=sj|xt1=si),1i,jN
计算观测状态序列的概率(假设当前的状态xt的生成只依赖于前一个状态xt1,通常称为二阶马尔科夫模型):

P(x;θ)=t=1Tp(xt|x1,,xt1)p(x1)×t=2Tp(xt|xt1)

其中θ={p(x)|xS}{p(x|x)|x,xS}

模型的学习

目的:学习得到模型的参数θ,也即状态初始化概率和状态转移概率的学习,通过极大似然估计完成参数学习
假设训练集包含D个样本D={x(d)}d=1D,使用极大似然估计来从训练数据中自动获取最优模型参数:

θ^=argmaxθ{L(θ)}

似然函数的对数形式:

L(θ)=d=1DlogP(x(d);θ)=d=1D(logp(x1(d))+t=2T(d)logp(xt(d)|xt1(d)))

其中T(d)表示第d个训练数据的序列长度,模型参数还需要满足一下两个约束条件:

xSp(x)=1x:xSp(x|x)=1

引入拉格朗日乘子法来实现约束条件下的极值求解:

J(θ,λ,γ)=L(θ)λ(xSp(x)1)xSγx(xSp(x|x)1)

其中λ是与状态初始概率约束相关的拉格朗日乘子,γ={γx|xS}是与状态转移概率约束相关的拉格朗日乘子的集合

  • 首先计算状态初始概率p(x)的偏导

J(θ,λ,γ)p(x)=(d=1D(logp(x1(d))+t=2T(d)logp(xt(d)|xt1(d)))λ(xSp(x)1)xSγx(xSp(x|x)1))p(x)=p(x)d=1Dlogp(x1(d))λ=1p(x)d=1Dδ(x1(d),x)λ

其中δ(a,b)的取值当a=b时为1,否则为0
c(x,D)表示训练数据中第一个状态是x的次数:

c(x,D)=d=1Dδ(x1(d),x)

之后计算拉格朗日乘子λ的偏导

J(θ,λ,γ)λ=xSp(x)1

根据上式可以推导:

p(x)=c(x,D)λ

λ=xSc(x,D)所以状态初始化概率的估计公式:

p(x)=c(x,D)xSc(x,D)

  • 计算状态转移概率的偏导

J(θ,λ,γ)p(x|x)=(d=1D(logp(x1(d))+t=2T(d)logp(xt(d)|xt1(d)))λ(xSp(x)1)xSγx(xSp(x|x)1))p(x|x)=p(x|x)d=1Dt=2T(d)logp(xt(d)|xt1(d))γx=1p(x|x)d=1Dt=2T(d)δ(xt1(d),x)δ(xt(d),x)γx

将训练数据中x紧跟着出现在x后面的次数表示为:

c(x,x,D)=d=1Dt=2T(d)δ(xt1(d),x)δ(xt(d),x)

之后计算拉格朗日乘子γx的偏导:

J(θ,λ,γ)γx=xSp(x|x)1

从上式可以推出:

p(x|x)=c(x,x,D)γx

又可以得出γx=xSc(x,x,D),故:

p(x|x)=c(x,x,D)xSc(x,x,D)

计算观测概率

目的:计算观测序列的概率
一个例子:在暗室中不知道外面的天气,但是可以通过触摸地面的潮湿程度来推测外部的天气情况,此时,地面的潮湿程度是观测状态,外面的天气是隐状态
观测状态集合:O={o1,,om}
隐状态集合:S={s1,,sN}
观测状态序列:x=x1,,xt,,xT
隐状态序列:z=z1,,zt,zT
隐状态初始化概率:πi=p(z1=si),1iN
隐状态转移概率:aij=p(zt=sj|zt1=si),1i,jN
观测状态生成概率:bj(k)=p(xt=ok|zt=sj),1jN1kM

隐马尔可夫模型:

P(x;θ)=zP(x,z;θ)=zp(z1)×p(x1|z1)×t=2Tp(zt|zt1)×p(xt|zt)

模型参数θ={p(z)|zS}{p(z|z)|z,zS}{p(x|z)|xOzS}

前向概率

部分观测状态序列x1,,xt与第t个隐状态为si的联合概率称为前向概率:

αt(i)=P(x1,,xt,zt=si;θ)

使用动态规划算法递归计算:

  • 初始化:t=1

α1(i)=πibi(x1),1iN

  • 递归:t=2,,T

αt(j)=(i=1Nαt1(i)aij)bj(xt),1jN

  • 终止:

P(x;θ)=i=1NαT(i)

后向概率

t个隐状态为sj生成部分观测状态序列xt+1,,xT的条件概率称为后向概率,定义为:

βt(i)=P(xt+1,,xT|zt=si;θ)

使用动态规划算法递归计算如下:

  • 初始化:t=T

βT(i)=1,1iN

  • 递归:t=T1,,1

βt(i)=j=1Naijbj(xt+1)βt+1(j),1iN

  • 终止:

P(x;θ)=i=1Nπibi(x1)β1(i)

计算最优隐状态序列-Viterbi算法

目的:在给定一个观测状态序列x=x1,,xt,,xT和模型参数θ的条件下求出最优的隐状态序列

z^=argmaxz{P(z|x;θ)}=argmaxz{P(x,z;θ)P(x;θ)}=argmaxz{P(x,z;θ)}=argmaxz{zp(z1)×p(x1|z1)×t=2Tp(zt|zt1)×p(xt|zt)}

假设δi=maxjheads(i){ωjiδj}是从结点1到结点i的最大路径取值,ψi=argmaxjheads(i){ωjiδj}

Viterbi算法

  • 初始化:

δ1(i)=πib1(x1),ψ1(i)=0

  • 递归:t=2,,T

δt(j)=max1iN{δt1(i)aij}bj(xt)ψt(j)=argmax1iN{δt1(i)aij}bj(xt)

  • 结束:

P^=max1iN{δT(i)}z^T=argmax1iN{δT(i)}

  • 回溯:t=T1,,1

z^t=ψt+1(z^t+1)

模型的学习-前向后向算法

目的:估计模型参数,我们知道的是观测序列,隐状态序列是不确定的,所以参数的主要挑战是需要对指数级的隐状态序列进行求和
给定训练集D={x(d)}d=1D,使用极大似然估计来获得模型的最优参数:

θ^=argmaxθ{L(θ)}

Expectation-Maximization(简称EM)算法被广泛用于估计隐状态模型的参数。令X表示一组观测数据,Z表示未观测数据,也就是隐状态序列:EM算法在以下两个步骤中迭代运行:

  • E步:确定对数似然的期望值

Q(θ|θold)=EZ|X;θold[logP(X,Z;θ)]

  • M步:计算最大化该期望值的参数

θnew=argmaxθ{Q(θ|θold)}

那么使用EM算法来训练隐马尔可夫模型,在E步实际使用的目标函数定义如下:

J(θ,λ,γ,ϕ)=d=1DEZ|X(d);θold[logP(x(d),Z;θ)]λ(zSp(z)1)zSγz(zSp(z|z)1)zSϕz(xOp(x|z)1)

通过计算偏导,可以得到公式:

p(z)=c(z,D)zSc(z,D)p(z|z)=c(z,z,D)zSc(z,z,D)p(x|z)=c(z,x,D)xOc(z,x,D)

其中c()表示计数函数,c(z,D)是在训练集D上第一个隐状态是z的次数的期望值,c(z,z,D)是在训练集上隐状态z出现在隐状态z的次数的期望值,c(z,x,D)是训练集上隐状态z生成观测状态x的次数的期望值。
上述的期望值定义如下:

c(z,D)d=1DEZ|X;θold[δ(z1,z)]c(z,z,D)d=1DEZ|X;θold[t=2T(d)δ(zt1,z)δ(zt,z)]c(z,x,D)d=1DEZ|X;θold[t=1T(d)δ(zt,z)δ(xt(d),x)]

期望基于隐状态的后验概率P(z|x(d);θold),计算期望的过程涉及指数级数量的计算,下面以隐状态转换次数的期望为例:

EZ|X;θold[δ(zt1,z)δ(zt,z)]=zP(z|x(d);θold)δ(zt1,z)δ(zt,z)=zP(x(d),z;θold)P(x(d);θold)δ(zt1,z)δ(zt,z)=1P(x(d);θold)zP(x(d),z;θold)δ(zt1,z)δ(zt,z)=P(x(d),zt1=z,zt=z;θold)P(x(d);θold)

上式的分母可以使用前向概率来计算,下面是分母的计算:

P(x,zt1=si,zt=sj;θ)=P(x1,,xt1,zt1=si;θ)×P(zt=sj|zt1=si;θ)×P(xt|zt=sj;θ)×P(xt+1,,xT|zt=sj;θ)=αt1(i)aijbj(xt)βt(j)

估计隐状态初始化概率

p(z)=c(z,D)zSc(z,D)=d=1DP(x(d),z1=z;θold)d=1DP(x(d);θold)π¯i=d=1Dα1(i)β1(i)d=1Di=1NαT(d)(i)

估计隐状态转换概率

p(z|z)=c(z,z,D)zSc(z,z,D)=d=1Dt=2T(d)P(x,zt1=z,zt=z;θold)d=1Dt=2T(d)P(x,zt1=z;θold)a¯ij=d=1Dt=2T(d)αt1(i)aijbj(xt(d))βt(j)d=1Dt=2T(d)αt1(i)βt(j)

估计观测状态生成概率

p(x|z)=c(z,x,D)xOc(z,x,D)=d=1Dt=1T(d)δ(xt(d),x)P(x(d),zt=z;θold)d=1Dt=1T(d)P(x(d),zt=z;θold)b¯i(k)=d=1Dt=1T(d)δ(x(d),ok)αt(i)βt(i)d=1Dt=1T(d)αt(i)βt(i)

posted @   eryo  阅读(74)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· .NET10 - 预览版1新功能体验(一)
点击右上角即可分享
微信分享提示