统计自然语言处理(马尔可夫模型)

目的

1.了解什么马尔科夫模型的三个问题
·状态概率的计算(前向算法)
·马尔科夫译码过程(维特比算法)
·马尔科夫参数求解(EM算法 前后向算法)

隐马尔科夫模型(HMM)

这里笔者假设大家大致了解马尔科夫模型,即马尔科夫链的节点状态只于前N个状态相关,现实生活中常常存在一些隐藏的内容,比如3种骰子的例子,图如下:
https://www.cnblogs.com/skyme/p/4651331.html如果没有看过这个图的请戳这里,引用了别人的文章。这是一个网上比较常见的例子。
统计自然语言处理(马尔可夫模型)_第1张图片
很多时候我们知道一些东西,不知道一些东西,所以针对这些已知和未知,大致提出3个隐马尔科夫模型中常见的3个问题。不过在提出3个问题之前,我先来明确一下文中出现的符号体系。
统计自然语言处理(马尔可夫模型)_第2张图片
稍微解释一下,SKπ不用说,A表示隐藏状态之间的转移概率,B表示隐藏状态和观察状态之间的一个关系,这个输出有时候只与隐藏状态本身有关(图中描述为只与t时刻有关),比如骰子的例子。但是还有一些这个概率和隐藏状态的转换也有关系,这里没有想到很好的例子,不过可以简单说成比方说隐藏节点是灯的开关状态,观察点开关的声音,那么这个声音只在状态转换的时候出来,大概是这样的一个意思。好了,现在我们知道了5元组,然后我们看看我们一般都是知道什么求什么?我们经常把这3个问题叫做评估,解码,学习。
1.已知u(π,A,B),求输出符号的概率。
解释:这是一个比较基本的思路,我们得到了表象结果,那么我们需要知道这个结果最大可能的概率是多少,我们可以以此来评定这个HMM模型的好坏,所以通常这个过程叫做评估。在语音识别中这种类型的问题发生在当一大堆数目的马尔科夫模型被使用,并且每一个模型都对一个特殊的单词进行建模时。一个观察序列从一个发音单词中形成,并且通过寻找对于此观察序列最有可能的隐马尔科夫模型(HMM)识别这个单词。(解释部分来自52nlp系列)

2.已知u(π,A,B),求出最有可能的隐藏序列,这个过程通常叫做解码。
解释:这是最感兴趣的一个,就是搜索生成输出序列的隐藏状态序列。在许多情况下我们对于模型中的隐藏状态更感兴趣,因为它们代表了一些更有价值的东西,而这些东西通常不能直接观察到。(解释来自52nlp系列)

3.已知了观察序列,求出最有可能导致这个结果的u(π,A,B)参数。
解释:这是在未知参数的情况下的求解过程,现实生活中往往很多参数我们是无法事先知道的,所以这里反求参数是很有意义的,我们把这个过程叫做学习。

评估解决方案-前向算法

现在如果知道隐藏序列,那么我们可以直接把概率算出来,但是我们不知道,我们可以做的就是把所有的可能出现的组合的概率加起来。思路如下。
统计自然语言处理(马尔可夫模型)_第3张图片
对于海苔和天气的例子,结果如下(默认大家看过这个例子http://www.52nlp.cn/hmm-learn-best-practices-five-forward-algorithm-1没有的请戳这里,52nlp写的很详细)
Pr(dry,damp,soggy | HMM) = Pr(dry,damp,soggy | sunny,sunny,sunny) + Pr(dry,damp,soggy | sunny,sunny ,cloudy) + Pr(dry,damp,soggy | sunny,sunny ,rainy) + … . Pr(dry,damp,soggy | rainy,rainy ,rainy)
但是对于比较长的马尔科夫链来说,这里计算消耗过大(2T+1)*N^(T+1),下面我们采用递归前向算法来解决这个问题!避免复杂度的秘诀是利用动态编程和记忆,因为我们要求最后所有可能概率的和,看下图可知,我们每次都要把所有的概率都走一遍,这样不太科学,我们可以一层一层的来,些最终层的概率求和等价于对于网格中所有可能的路径概率求和,也就求出了给定隐马尔科夫模型(HMM)后的观察序列概率。利用这方法,只需要2N^2*T次乘法计算。
统计自然语言处理(马尔可夫模型)_第4张图片
实现公式如下:
统计自然语言处理(马尔可夫模型)_第5张图片

解码解决方案-维特比算法

同上,这里也有很暴力的解法,算出所有可能的概率,找出最大的那个,这当然不太科学了。所以我们介绍维特比算法,维特比算法我最初是在《通信原理》的卷积码解码中认识到的, viterbi解码算法等效于加权图中最有路径问题的一个动态规划解决方案。随后被证明这是一种ML(Maximum Likelihood)最大似然算法。
与前向算法相似,这里使用递归降低复杂度
  给定一个观察序列和一个隐马尔科夫模型(HMM),我们将考虑递归地寻找最有可能的隐藏状态序列。我们首先定义局部概率delta,它是到达网格中的某个特殊的中间状态时的概率。这些局部概率与前向算法中所计算的局部概率是不同的,因为它们表示的是时刻t时到达某个状态最可能的路径的概率,而不是所有路径概率的总和。就像下图,每个表示的是一条最可能的路径。
  统计自然语言处理(马尔可夫模型)_第6张图片
  这里因为52nlp中描述的非常仔细,这里笔者仅仅提出对我来说比较重要的部分,作为自己的记录(别喷),通过argmax的操作,回溯整个网络,然后我们就可以找到一条最大概率的路径。此处最大max(xxxx) 与 argmax(),一个是记录最大概率一个是记录上一步的路径。此处与前向算法的差异在于一个是求最大,一个是求和。
统计自然语言处理(马尔可夫模型)_第7张图片
提出了思想,暂时理解即可,实现上还是有很多坑的。

学习解决方案-前后向算法

这里我并没有太理解后向的实际意义,书中也并没有太多介绍(也许是我没看出来),但是他给了公式,形式上看上去和前向差不多啦。还有一点要提的就是前后向算法是EM算法的一种特例,http://www.52nlp.cn/hmm-learn-best-practices-seven-forward-backward-algorithm-3这里有做介绍,感兴趣的可以看一下。
统计自然语言处理(马尔可夫模型)_第8张图片
这里确实理解能力有限,关于前向-后向算法和EM算法的具体关系的解释,大家可以参考HMM经典论文《A tutorial on Hidden Markov Models and selected applications in speech recognition》,这里就不详述了。反正我没看懂,但是大致实现应该是有一定的了解了!
统计自然语言处理(马尔可夫模型)_第9张图片

你可能感兴趣的:(自然语言处理,自然语言处理,NLP,概率论)