Skip to content

Latest commit

 

History

History
166 lines (104 loc) · 5.33 KB

File metadata and controls

166 lines (104 loc) · 5.33 KB

HMM

三个参数

我们这个HMM模型,含有三种参数,定义如下: $$ \lambda =(\pi,A,B) $$ 注解:

首先 $$ \pi: 这里不是我们的圆周率那个符号,而是代表的是初始概率矩阵,具体看下面的讲解 $$ 其次 $$ A:代表的是状态转移概率矩阵,具体看下面的讲解 $$ 最后 $$ B:代表的是发射概率矩阵,具体看下面的讲解 $$

现在引入数学符号,首先定义观测变量为符号: $$ o: o_{1},o_{2},o_{3},o_{4}......o_{t}... $$ 观测变量的值域,也就是观测变量的取值范围: $$ V={v_{1},v_{2},...v_{M}} $$ 也就是观测变量我们有M个取值结果。

同理我们可以得到状态变量为: $$ i: i_{1},i_{2},i_{3}...i_{t}... $$ 状态变量的值域,也就是状态变量的取值范围: $$ Q={q_{1},q_{2}...g_{N}} $$ 也就是说,我们的状态变量有N个不同的取值。

我们定义A为状态转移概率矩阵,公式定义为: $$ A=[a_{ij}],其中a_{ij}=P(i_{t+1}=q_{j}|i_{t}=q_{i}) $$ 注解:这里我们的状态转移概率矩阵很容易理解,就是说我们上面不是定义了状态变量为符号 $$ i $$ ,其中状态有N种取值范围。我们以词向标注为例,这里我们假设我们的N有四种方式,分别为[名词,动词,谓词,形容词]。那么A这个矩阵中的每个元素就是其中一个状态转移到另一个状态的概率,比如名词之后接动词(也就是名词转移为动词)的概率,比如动词之后接谓词(也就是动词转移为谓词)的概率,依次类推。

我们定义B为发射矩阵 $$ B=[ b_{j}(k)], 其中b_{j}(k)=P(o_{t}=v_{k}|i_{t}=q_{j}) $$ 注解:这里简单记住,发射矩阵就是上面状态发射到下面的概率,注意看箭头的方向。

这个时候,我们再去看 $$ \pi :这个符号代表的就是 i_{1}={q_{1},q_{2}...q_{n}}时的状态概率{q_{1},q{2}...q_{n}} $$

两个假设:

  1. 马尔科夫假设:当前时刻的状态变量只与t-1时刻有关,而和别的变量无关。 $$ p(i_{t+1}|i_{t},i_{t-1}...i_{1},o_{t},o_{t-1}...o_{1})=p(i_{t+1}|i_{t}) $$

  2. 齐次性假设,可以理解为时间平移不变

image-20201221164438044

  1. 观测独立假设:当前的观测变量只与当前时刻的状态变量有关,而和其他无关

$$ p(o_{t}|i_{t},i_{t-1},...i_{1},o_{t-1},...o_{1})=p(o_{t}|i_{t}) $$

三个需要解决的问题

HMM 需要解决的问题。

首先求值问题:已经知道三种参数的情况下,那么我一句话出现的概率多大:我爱中共产党

简单讲就是已知 $$ \lambda $$ 求 $$ o_{1},o_{2}...o{n} $$ 这句话出现的概率有多大。

我们常用的算法是前向后向算法。前向算法后向算法解决的问题是求在给定三个参数的情况下求观测序列出现的概率 注意一定是求得观测序列,也就是放在序列标注中,是求我们本身文字序列出现的概率。

第二个问题,就是参数如何求? $$ 也就是如何求得:\lambda $$ 我们使用EM算法求得这个参数

EM算法是在估计HMM三个参数的办法。当然之前有谈到如果我们有观测序列和对应的隐藏序列,那么我们直接从数据中去统计就可以了。但是现实情况是我们很难获取标注序列,也就是隐藏序列。这个时候我们就需要使用到EM算法去预估。

也就是,如果没有标注序列,我们使用EM算法,如果有了标注序列我们直接从语料中统计出来就可以了。

第三个问题就是解码问题,也就是要找到一个状态序列,可以使得 $$ I=argmaxP(I|O) $$ 也就是解决当前这个句子最有可能的序列标注结果是什么样子的。

HMM最可能的额隐藏状态序列求解使用维特比算法。

使用一句话话可以很精辟的总结出来维特比的过程:

在每一时刻,计算当前时刻落在每种隐状态的最大概率,并记录这个最大概率是从其哪一个时刻那个隐状态转移过来的,然后再从结尾达到最大概率的那个隐状态回溯,就有可能得到最优路径。

维特比使用动态规划,解决寻找全局最优路径的问题。

CRF

全局归一化避免偏置

对于CRF我们的目标函数是让正确的标注序列出现的概率在所有路径汇总是最大的。所以分母我们是针对的所有路径。而不是在每一个时刻去计算最优值。因为在某一个时刻计算的最优可能在整体路径上并不是最优。

分数并不是概率

在bilstm-crf中,我们包括转移分数,发射分数,我们都是分数而不是概率。并且我们是做了log操作的,所以在计算某个路径的分数的时候我们并不是概率相乘而是分数相加。

损失函数

损失函数其实本质很简单,就是正确路径概率最大,拆分之后我们会对应两个部分一个是一元分值,就是在某个时刻成为某个实体标签的分数。一个是二元分值,就是标签之间的转移分数。

解码-维特比

在每一时刻,计算当前时刻落在每种隐状态的最大概率,并记录这个最大概率是从其哪一个时刻那个隐状态转移过来的,然后再从结尾达到最大概率的那个隐状态回溯,就有可能得到最优路径。