HMM隐马尔可夫模型

HMM其实有一个发现新词的功能,甚至于有些时候可以不用任何的词库,直接利用已经训练好了的参数。

HMM是怎么来定义和建模的呢,首先可以把它描述为一个隐藏的马尔可夫链,它会形成一个不可观测的状态序列,然后这个状态序列会来各自生成一个可观测序列。

     

这个图它其实就是一个马尔可夫模型,任何一个z都与x有一个相关,这样一个模型我们把它叫做隐马尔科夫模型,因为我们如果是只能观测到x1,x2这些数据而无法观测到z1到zn,因此叫做隐藏状态的马尔可夫模型嘛。我们会把zi这些不可观测的东西把它叫做状态序列,每一个状态呢可以生成一个观察结果。

我们现在来思考这么一个事情哈:

      

如果x是可观测的时候,y和z就是独立的,如果x是不可观测的时候那么y和z就是不独立的,那这样的话我们看哈,z1是不可观测的一个结点,x1这个结点和后面的这些结点就是不独立的,那么x1和x2不独立,我们如果观察到的是x1到xn+1这样一些随机序列的时候,就是前一时刻的那个词,后一时刻的那个词,不是独立的,这样一个模型就不是一个词袋模型,我们在做LDA的时候认为一篇文档当中的词都是独立的,然后我们认为文档当中的词的似然概率等于每一个词各自产生的概率乘起来。所有它是一个词袋模型,但是HMM它的这些可观测的不是独立的,而初始的这么一个模型本身哈,其实更加复合我们的实际问题。先跟大家说一点小事情哈,就是HMM应该如何来进行参数的描述,什么意思呢,大家还记得在最早的时候说过的Logistic回归啊,线性回归啊这样子的模型对吧,我们如果是有了特征x1……xn的时候,怎么样去描述它的这个参数呢,我们用的是θ0……θn这n+1个系数,用各自θi把它加起来,就认为是我们的线性模型嘛。所以我们在去建立以前的这些看似简单的这样的模型的时候哈,其实几乎并不需要去来说明一下它的参数是什么,但是呢我们在做HMM的时候,稍微的麻烦一点,我们来看一看如果想去确定这个模型,需要什么样的参数呢。我们来琢磨琢磨这个事情哈。我们来利用这个图来举例好了哈:

     

我们知道zi这些东西其实是隐藏的状态,我们就不妨认为这些隐状态的取值是1号2号到n号一共有n个不同的可能的取值,然后这个xn呢是一个可观测状态,我们假定它是1号2号到m号一共m个可能的取值,那这样的话我们来考虑一下如果想去描述zn-1到zn这么一个变化,以及描述zn到xn这么一个连接,应该如何去来表达。

          

先来看一下zn-1到zn这么一个不相关性该怎么样描述哈,就是从zn-1到zn的这么一个变化,我们知道它们都有n个取值那就可以列出一个n阶的状态转移概率的矩阵,条件概率的这么一个分布。这个矩阵就是这里边的这个A。

现在再来看第二个,第二个是zn到xn这么一个东西,zn到xn又应该是什么呢?我们知道zn有n个取值,xn又m个取值,这样又可以得到一个n行m列的观测矩阵B,这个观测矩阵其实我们所做的事情哈,如果我们只是建立z1到zn这么一个模型的时候,我们如果可以观测到z1到zn了,这是最好的情况,所以说这里边B这个矩阵它正好m等于n,并且它还是一个单位阵的时候,这个隐马尔科夫模型就退化成了一个标准的一个马尔可夫模型,所以如果B是一个单位阵的时候我们所观测到的值就是隐状态本身。那如此一来这样一个矩阵哈,它其实一定程度上把我们这个z1到zn这些未观测的不可观测状态,做了一个混淆,由于B这么一个矩阵的存在,把我们这些未观测的这些值找不着了,所以B这么一个矩阵又叫做混淆矩阵,就是不知道原始是什么情况了。然后呢我们这样来看哈,从zn到xn,其实是又这么一个不可观测的状态去得到一个可观测的状态,所以说这么一个东西有些时候又叫做发射矩阵。

然后呢对于这么一个一个模型,我们如果是知道了前面这条链是怎么变化的,知道了从上到下这个东西怎么变化,就是说还差一个初始的z的分布是什么样子的。因为我们这里边一共不是有n个不同的观察状态吗,它取第一个未观测状态的概率我们认为叫Π1,第二个不可观测的状态叫Π2,最后一个叫Πn,我们可以用Π这么一个向量去做这么一个表达,它是一个一元的n点分布。它表达的是初始的概率分布。因此把这三个东西罗列之后得到就是A,B,Π这么一个东西。

我们现在再来看一个例子哈:

                  

其实隐马尔科夫模型我们做了两个基本的性质嘛,第一个就是如果在第t个时刻它的这个隐状态位于it的时候,其实这是它前边的这个可行的结点嘛,我们知道这个里边如果给定zn-1的时候,显然它这些东西跟这些东西条件独立了,就可以写出这么个东西,如果我们去即使zn也就是第t个时刻的观测值的时候,本来是这些东西跟它相关,给定这个zn就够了,因此哈我们如果在大家建模的时候可以做这两个基本的假设,就有可能讨论一下猜测一下是不是可以用隐马尔科夫模型来去做这个建模哈,我们举一个形式化的例子来说明隐马尔科夫模型本身。

       

我们现在怎么样来选盒子呢,就按照下面的转移概率去选。

            

我们随便按一个概率来选一个盒子,比如说就按照0.2,0.4,0.4的概率来选,可能我们就会抽到某一号盒子,比方说抽到了二号盒子,然后从二号盒子里边随机的闭着眼睛来去闭着眼睛选一个小球,然后呢我们看看颜色,假定是红色,然后把这个红色放回到盒子里边去,接着做下一个盒子的选择,比如说按0.2,0.4,0.4的概率选择了1号盒子,那么下面又怎么样来选盒子呢,就按照这个A来选,比如说如果我这一时刻选中了1号盒子,下一时刻还选中1号盒子的概率是0.5,然后再闭着眼睛抽一个小球看看颜色然后放回去,不断地做这个事情,假定我们做了5回得到了观测序列就是红红白白红,我们的隐状态就是选中的第几号盒子,因为任何一个小球都可能来自不同的盒子。我们用状态Q表示的是未观测的状态的集合,X表示观测到的集合,比如说红色和白色,初始概率分布是按照Π来做的选则,那么混淆矩阵B是怎么来看的呢,其实就是如果选中1号盒子的时候不是又5个红球和白球吗,那么选中它们的概率都是0.5。

那么现在问大家一个问题,如果真的按照这个概率来采样,那么最后得到的观测序列是红红白白红的概率是多少。第二我们如果是得到了红红白白红,它五次采样背后的盒子的选择应该是什么。现在大家想一想如果用HMM做中文分词的时候应该如何建模呢?谁是x谁是z呢?Π,A,B又应该各是什么呢?

          

假定给定这么一个中文文本,现在要对它进行正文分词,该怎么样来建模,我们对观测序列x就是这段文本,每个字是其中一个元素,那么我们的隐变量应该是什么呢?就是说每个字都可能又加斜线的状态和不加斜线的状态。我们用终止字来表示后面应该加斜线分开,用1和0分别表示分开和不分开,比如说在就是一个终止字,如此一来我们就可以建立这么一个模型,z1到zn的观测值分别是x1到xn,这个z只有两种状态,要么是终止字要么是非终止字,这个z只有两个状态,而x可能有很多状态。那么有了这么一个东西之后我们再来考察A又是什么意思呢?A就是指如果这个zi它可以去0号和号,zi+1可以取0号和1号,那么zi取0的时候zi+1取0的概率和取1的概率以及zi取1的时候zi+1取0的概率和取1的概率分别是多少这么一个2阶的矩阵。

  

我们现在重新来审视一下隐马尔科夫模型它到底在做什么,第一个我们如果是已经有了这个A,B,Π,不管这个A是2*2还是4*4的,B是2*65535的还是4*65535的,Π是一个两行的还是一个4行的,它总是一个参数嘛,比如说我们对中文分词给定了ABΠ这三个参数,我们还给了一个观测的序列,我们希望来计算一下这个观测的序列它本身出现的概率有多大,但这并不是主要要做的事情,其实最主要的事情是后面两个,就是如果是我们有了观测序列o1到oT,比如说我们给了若干个文本,然后呢我们想去看一下哪个参数应该是最优的参数,相当于我们给定了这个观测O的时候,看哪一个参数\lambda它的这个后验概率最大,而这样一个做法我们往往是用极大似然估计或者其它某种方案去做,也就是考察一下哪一个\lambda可以使得这个O它的概率最大,这个\lambda就是我们要做的,事实上如果说未知i1到iT的时候,我们用EM算法,如果已知就用极大似然估计。现在不管是用哪种算法,这个参数都已经算出来了,我们现在呢又拿到了一段新的文本想来计算一下,当然不是算这个文本本身的概率有多大了,而是算一下在给定的参数情况下看看这个O它所有可能的那个隐状态到底是什么,换句话讲就是给我们一段中文文本,我们想看一下它的分词结果是什么,其实就是根据已经编好码的那个结果做一个解码。

我们现在来看一下第一个问题就是概率计算的问题,在这个问题里边我们来聊三个算法,先来看一下暴力计算

   

就是首先按照概率公式我们可以做什么呢,就是给定了参数看看这个O的概率到底有多大。

现在基于动态规划的思路去来定义它的状态然后去来做一下它的这个概率的计算。

事实上对于这么一个问题,我们有这个隐藏的状态q1到qt到qt+1到qT,我们有可观测状态y1到yt到yt+1到yT,然后我们可以从中间某个状态把它给断开,然后这个状态可能可以取某一个状态,就让它取第i个状态好了,那么说它取第i个状态的时候就要求y1到yt都能够被观测到,这样子的概率我们记作αt(i),就是第t个时刻要求看到的隐状态叫i,这个东西叫做前向概率,就是从第1号到第t号的某一个要求这些都观测到,要求隐状态位于第i号上,我们也可以顺手给出后向概率就是第t个时刻让它取i号状态,然后呢如果是在这个前提之下观测到后面的yt+1到yT,它的这个概率叫做βt(i)。好了,有这么个说法的时候我们不妨来看一下这个东西:

          

就是要求第t个时刻的隐状态在第i号上,然后他的这个观测值o1到ot它的联合概率我们叫做前向概率,这么做有什么好处呢,就是算到αT(i)的时候,就是P(o1,……,oT,iT|\lambda),我们要求算的东西是什么,是P(o1,……,oT|\lambda),我们只去关心o1,……,oT,不关心它的隐状态位于第几号上,所以说我们一旦求出αT(i)的时候,αT(1)+αT(2)+……+αT(n)这个东西加完就是所谓的P(O|\lambda),我们只要这个东西,就是把它加n次。

现在真正的来讲一下学习算法了,参数的学习过程,如果是我们对序列包括了观测序列和状态序列,就是观测值有了,而未知的状态也有,就可以去做有监督学习,那如果只要观测序列本身,那就用EM算法做非监督学习。这里边我们用一下结论哈,事实上只这样子的,我们可以利用频率的极限是概率直接给出这个参数估计。为什么,我们来考虑一下哈,因为你给了我们这个{O1,I1}……{Os,Is},那我们算一下前一个状态时i,后一个状态时j的转移概率,我们在去算它的这个频率的时候。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值