前言
在网上看了很多关于马尔可夫模型的资料,有很多文章写得不错,在此记录自己学习过程中的笔记
一 HMM隐马尔可夫模型
隐马尔可夫模型(Hidden Markov Model, HMM)是关于时序的概率模型,描述由一个隐藏的马尔可夫链随机生成不可观测的状态随机序列,再由各个状态生成一个观测而产生观测随机序列的过程。隐藏的马尔可夫链随机生成的状态的序列,称为状态序列;每个状态生成一个观测,而由此产生的观测的随机序列,称为观测序列。序列的每一个位置又可以看作是一个时刻。
隐马尔可夫模型由初始概率分布、状态转移概率分布以及观测概率分布确定。
一个简单的例子
假设我们有3颗不同的骰子。第一个是6面体、第二个是4面体、第三个是8面体,对应每一面数值分别为(1,2,3,4,5,6)、(1,2,3,4)、(1,2,3,4,5,6,7,8),出现概率分别为
我们开始掷骰子,我们从这三个骰子里挑选一个骰子的概率为。我们掷骰子的数值在1~8之间。当不停的掷骰子我们会得到一串数字序列。例如(掷骰10次):1、6、3、5、2、7、3、5、 2、4。
上图可以看出马尔可夫模型为节点为隐含状态,边为转移概率的有向图模型,接下来我们通过这个例子介绍几个概念。
可见状态链(观测序列):掷骰子得到的这串数字对应概念中我们可观察的参数。
隐含状态链(状态序列):在这个掷骰子的例子中隐含状态链为我们掷的骰子的序列(有多种可能)。隐含状态(骰子)之间存在转换概率,D4的下一个状态D4、D6、D8的概率都是。
转换概率(状态转移概率):隐含状态转换(骰子改变)的概率
输出概率(发射状态):尽管可见状态之间没有转换概率,但是隐含状态和可见状态之间有一个概率叫做输出概率。就我们的例子来说,六面体掷出1的概率为,四面体掷出1的概率为,八面体掷出1的概率为。
当然转换概率和输出概率我们都是随意更改的,比如输出概率方面我们对骰子做点手脚可以让例如六面体掷出1的概率为,其它数字的概率为。转换概率方面我们可以放入比如在2颗D6、4颗D4、4颗D8中选择筛子,然后有放回的选择筛子,转换概率D6为0.2, D4为0.4,D8为0.4。
使用维特比算法(Viterbi algorithm)进行分词根据观测序列推断出状态序列
观察值序列:小明硕士毕业于中国科学院计算所
隐含状态集:隐含状态指的是每个字的状态。 有词语的开头、词语的中间字、词尾、单个字,这里的隐含状态集有4个状态对应的英文字母{B,M,E,S}
输入:小明硕士毕业于中国科学院计算所
输出:BEBEBMEBEBMEBES(BE/BE/BME/BE/BME/BE/S =小明/硕士/毕业于/中国/科学院/计算/所)
1、定义V[id][字的状态] = 概率,注意这里的概率,前几个的字的状态都确定下来了(概率最大),这里的概率就是一个累乘的概率了。
2、因为第一个字为‘小’,所以第一个字的概率V[1][B]= 初始概率[B] *发射概率[B][‘小’],同理可得V[1][M]、V[1][E]、V[1][S]选择其中概率最大的一个加入到结果序列。
3、从第二个字开始,对于字的状态Y,都有前一个字的状态是X的概率* X转移到Y的概率 * Y状态下输出字为‘明’的概率。因为前一个字的状态Y有四种可能,所以Y的概率有四个,选取其中较大一个作为V[2][字的状态]的概率,同时加入到结果序列中。
4、比较V[15][B]、V[15][M]、V[15][E]、V[15][S],找出较大的哪一个对应的序列,就是最终结果。