时序模型大致上分为(ML)版本和(DL)版本
ML:HMM和GRF
DL:RNN/LSTM
今天就讲解一下隐马尔科夫模型HMM算法
HMM结构
由上图可知观测值(x)和隐含状态(z)在这里举个例子说明 x x x和 z z z的关系
例子:假设现在有两枚硬币{A,B}分别有正反两面,这时有两个人:“小明”和”小华”现在将两个人隔开,“小明负责扔硬币”,“小华负责观察硬币的正反面”。但是小华是看不到小明是扔的A还是B,这里的可以观测到的正反面相当于HMM算法中的 x x x,扔的A或者B相当于状态 z z z,这也就是说由状态生成观测值,那么问题来了:
1、假设t时刻小华看到了小明扔的是正面,那么能不能确定这枚硬币是A还是B呢?(inference问题)
2、 t t t时刻小明扔了A硬币,那么 t + 1 t+1 t+1时刻小明会扔A还是B? t t t A硬币出现正反的概率是多少(参数估计问题)
3、能不能计算 p 正 , 反 , 正 , 正 , 饭 p{正,反,正,正,饭} p正,反,正,正,饭
假设我们计算词性标注的问题:
这里的词性就相当于单词的隐含状态 z z z,单词就相当于可观测值 x x x
那么问题1就是:句子中每个单词对应的词性是什么(动词,名词,代词)?
问题2:词性之间的转移关系是什么,每个词性输出的词之间有什么关系?
问题3:给定一组单词,判断它出现的概率
语音识别问题:
可观测值 x x x是一段长的波形,隐含状态 z z z是对应文字
问题1:每段波形对应的文字是什么?
问题2:文字与文字之间的转移关系是什么,文字与的波形之间的关系
问题3:给定一段语音波形,判断它出现的概率
这就是HMM最典型的三个问题,也就是说我们在做nlp任务时,像:词性标注,命名实体识别等等这些任务时,我们的可观测值一般是我们的输入,像句子,文章,音波等,我们的状态一般就是我们的目标:词性,实体,音波对应的文字
HMM参数
那么HMM的就是计算 z 1 z_1 z1与 z 2 z_2 z2之间的关系, z z z与 x x x之间的关系,这两个关系也就是HMM的参数我们设置为 A A A和 B B B
那么 A A A是一个矩阵,如下图,每一行都对应一个状态 z z z其中的值表示下一状态出现的概率,例如下图这一行表示 z i z_i zi,第一个值表示下一个状态出现 z 1 z_1 z1的概率为 0.02 0.02 0.02,第二个值表示下一个状态出现 z 2 z_2 z2的概率为 0.03 。 0.03。 0.03。因此我们称 A A A为:状态转移矩阵
B B B也是一个矩阵,也就是表示 z z z状态下生成 x x x的概率,如下图:
如上图,每一行都对应一个状态 z z z其中的值表示出现 x x x的概率,例如下图这一行表示 z i z_i zi,第一个值表示在状态 z i z_i zi下出现 x 1 x_1 x1的概率为 0.12 0.12 0.12,第二个值表示出现 x 2 x_2 x2的概率为$0.05.
在HMM中我们还设置了一个参数 π \pi π,是一个向量用来表示状态 z i z_i zi成为第一个状态的概率: π = { 0.02 , 0.05 , 0.06 , . . . , 0.08 } \pi=\{0.02,0.05,0.06,...,0.08\} π={ 0.02,0.05,0.06,...,0.08}: z 1 z_1 z1成为第一个状态的概率为(0.02),: z 2 z_2 z2成为第一个状态的概率为(0.05)以此类推。
所以在HMM中有三个参数 A , B , π A,B,\pi A,B,π
解决inference问题
给定模型找到最优的状态 z z z,给定模型也就是我们的参数 A , B , π A,B,\pi A,B,π已经训练好了,我们直接利用可观测值 x x x来进行反推状态 z z z现在有两种方法:
暴力求解
暴力求解:将所有可能性一一列出来,找到那个最优的解
计算过程:
求 x 1 , x 2 , x 3 , x 4 . . . x m x_1,x_2,x_3,x_4...x_m x1,x2,x3,x4...xm对应的状态 z z z
一共n种状态
1、列出可能发生的所有状态序列:
一共n种状态,计算m个观测值x对应的 z z z,则一共有 n m n^m nm个序列
2、对每个序列利用A计算状态转移的概率
例如: p ( z 1 ) ⋅ p ( z 1 ∣ z 2 ) ⋅ p ( z 3 ∣ z 2 ) ⋅ p ( z 4 ∣ z 3 ) ⋅ . . . . p(z_1)\cdot p(z_1|z_2)\cdot p(z_3|z_2)\cdot p(z_4|z_3)\cdot.... p(z1)⋅p(z1∣z2)⋅p(z3∣z2)⋅p(z4∣z3)⋅....
3、再利用B计算每个状态生成对应 x x x的概率
例如: p ( x 1 ∣ z 1 ) ⋅ p ( x 2 ∣ z 2 ) ⋅ p ( x 3 ∣ z 3 ) ⋅ p ( x 4 ∣ z 4 ) ⋅ . . . . p(x_1|z_1)\cdot p(x_2|z_2)\cdot p(x_3|z_3)\cdot p(x_4|z_4)\cdot.... p(x1∣z1)⋅p(x2∣z2)⋅p(x3∣z3)⋅p(x4∣z4)⋅....
4、找到结果最大的那个序列
优点:
一定可以找到全局最优解
缺点:
很明显,计算量太大
维特比算法求解
对于1对1的转移关系的计算,维特比的计算方法还是比较好用的,维特比算法是典型的动态规划思想,如图
如上图在计算 x k + 1 x_{k+1} xk+1对应的 z z z时,要分计算: p ( z j + 1 ∣ z 2 ) ⋅ p ( x k + 1 ∣ z j + 1 ) p( z_{j+1}|z_2)\cdot p( x_{k+1}|z_{j+1}) p(zj+1∣z2)⋅p(xk+1∣zj+1)
但是我们要求的是最优解
在这里我们假设 ϕ k ( i ) \phi_k(i) ϕk(i)表示 x k x_{k} xk时选择 z i z_i zi的最优的路径。例如 ϕ k ( 1 ) \phi_k(1) ϕk(1)指的是在 x k x_{k} xk时选择 z 1 z_1 z1最优的最优路径。那么 ϕ k + 1 ( i ) \phi_{k+1}(i) ϕk+1(i)的计算方式是就是在 x k + 1 x_{k+1} xk+1时选择时 z i z_i zi最好的路径:
ϕ k + 1 ( i ) = m a x { ϕ k ( 1 ) ⋅ p ( z i ∣ z 1 ) ⋅ p ( x k + 1 ∣ z i ) ϕ k ( 2 ) ⋅ p ( z i ∣ z 2 ) ⋅ p ( x k + 1 ∣ z i ) ϕ k ( 3 ) ⋅ p ( z i ∣ z 3 ) ⋅ p ( x k + 1 ∣ z i ) ϕ k ( 4 ) ⋅ p ( z i ∣ z 4 ) ⋅ p ( x k + 1 ∣ z i ) ϕ k ( 5 ) ⋅ p ( z i ∣ z i ) ⋅ p ( x k + 1 ∣ z 5 ) . . . . \phi_{k+1}(i)=max\ \begin{cases}\phi_{k}(1)\cdot p( z_i|z_{1})\cdot p( x_{k+1}|z_{i})\\ \phi_{k}(2)\cdot p( z_i|z_{2})\cdot p( x_{k+1}|z_{i})\\ \phi_{k}(3)\cdot p( z_i|z_{3})\cdot p( x_{k+1}|z_{i})\\\phi_{k}(4)\cdot p( z_i|z_{4})\cdot p( x_{k+1}|z_{i})\\\phi_{k}(5)\cdot p( z_i|z_{i})\cdot p( x_{k+1}|z_{5})\\....\end{cases} ϕk+1(i)=max ⎩⎪⎪⎪⎪⎪⎪⎪⎪⎨⎪⎪⎪⎪⎪⎪⎪⎪⎧ϕk(1)⋅p(zi∣z1)⋅p(xk+1∣zi)ϕk(2)⋅p(zi∣z2)⋅p(xk+1∣zi)ϕk(3)⋅p(zi∣z3)⋅p(xk+1∣zi)ϕk(4)⋅p(zi∣z4)⋅p(xk+1∣z