《数学之美》第五章——隐马尔可夫模型
1 通信模型一个典型的通信系统会包含着六要素(发送者,信道,接收者,信息,上下文和编码)。我们可以将通信模型和我们的自然语言处理工作联系起来。例如在语音识别中,我们就相当于通信模型中的发送者,我们说的话就是信息,并利用空气作为信道进行传输,计算机作为接收者去进行分析、理解。在通信中,如何根据接收端的观测信号o1,o2,o3,…来推测信号源发送的信息s1,s2,s3,…呢?只需要从所有的源信息中找到
1 通信模型
一个典型的通信系统会包含着六要素(发送者,信道,接收者,信息,上下文和编码)。
我们可以将通信模型和我们的自然语言处理工作联系起来。
例如在语音识别中,我们就相当于通信模型中的发送者,我们说的话就是信息,并利用空气作为信道进行传输,计算机作为接收者去进行分析、理解。
在通信中,如何根据接收端的观测信号o1,o2,o3,…来推测信号源发送的信息s1,s2,s3,…呢?只需要从所有的源信息中找到最可能产生出观测信号的那一个信息。
利用概率论的知识,就是在已知o1,o2,o3,…的情况下,求得令条件概率P(s1,s2,s3,…|o1,o2,o3,…)达到最大值的那个信息串s1,s2,s2,…,即
其中Arg是参数Argument的缩写,表示能获得最大值对的那个信息串。
利用贝叶斯公式进行变形可将公式5.1变为:
其中P(o1,o2,o3,…| s1,s2,s3,…)表示信息s1,s2,s3,…在传输后变成接收的信号o1,o2,o3,…的可能性;而P(s1,s2,s3,…)表示s1,s2,s3,…本身是一个在接收端合乎情理的信号的可能性;最后P(o1,o2,o3,…)表示在发送端产生信息o1,o2,o3,…的可能性。
因为一旦信息o1,o2,o3,…产生了就不会改变,所以P(o1,o2,o3,…)可以理解为一个常数,因此公式5.2可变形为:
2 隐马尔可夫模型
首先,要了解隐马尔可夫模型,就需要先了解马尔科夫链。
下面举一个比较容易理解的例子进行阐述。我们可以把s1,s2,s3,…,st看成是北京每天的最高气温。这里存在两个维度的不确定性。首先是每天的最高温st是随机的,其次每天的温度st又会和前面几天的温度有关。
基于此,马尔科夫提出了一种简化的假设,即随机过程中各个状态st的概率分布,只与它的前一个状态st-1有关,即P(st|s1,s2,s3,…st-1)=P(st,st-1)。这个就称为马尔科夫假设,符合这个假设的随机过程就称为马尔科夫过程,也称为马尔科夫链。
把这个马尔科夫链想象成一台机器,按照上述规则随机选择后续状态。这样运行一段时间T后,就会产生一个状态序列:s1,s2,s3,…,st。通过这个序列,不难数出某个状态mi的出现次数#(mi),以及从mi转换到mj的次数#(mi,mj),从而估计出转移概率#(mi,mj)/#(mj)。每一个状态只与前一个状态有关。
关于隐马尔可夫模型的简单科普可以看一下这个视频:隐马尔可夫模型科普
隐马尔可夫模型是马尔科夫链的拓展,是指:观察者无法直接观察到一个状态序列s1,s2,s3,…st。但是在隐马尔可夫模型中,每个时刻t会输出一个符号ot,而且ot和st仅和st相关,这个称为独立输出假设。如下图所示。
基于马尔科夫假设和独立输出假设,我们可以计算出某个特定的状态序列s1,s2,s3,…产生出输出符号o1,o2,o3,…的概率。
然后我们就可以将公式5.5代入到公式5.3中进行求解,这样通信的解码问题就得以解决。
至于如何寻找式子中的最大值将会在后面的章节进行介绍。
3 延伸阅读:隐马尔可夫模型的训练
围绕隐马尔可夫模型有三个基本问题:
- 给定一个模型,如何计算某个特定的输出序列的概率;
- 给定一个模型和某个特定的输出序列,如何找到最可能产生这个输出的状态序列;
- 给定足够量的观测数据,如何估计隐马尔可夫模型的参数。
对于第一个问题,对应的算法是Forward-Backward算法。第二个问题采用著名的维特比算法解决,后面章节会讲述。这里主要讨论第三个问题。
利用隐马尔可夫模型解决问题时,我们需要知道P(st|st-1),也称为转移概率。以及需要知道P(ot|st),也称为生成概率。
根据条件概率的公式,我们可以得到:
我们可以通过人工标记的方法得到我们想要的结果,但是这样成本会比较高。这种靠人工标注的数据,称为有监督的训练方法。
基于此,在实际中,更实用的无监督的训练方法。主要使用的是鲍姆-韦尔奇算法。主要思想是这样的:
-
首先找到一组能够产生输出序列O的模型参数。这时我们就有了一个初试的模型,我们称为M0
-
基于第一步,我们可以在此基础上找到一个更好的模型。假设已经解决了第一、二个问题,因此我们可以计算出P(O|M0),而且能够找到这个模型产生O的所有可能的路径以及这些路径的概率。因此,我们可以将其看成**“标注的训练数据”**。
-
根据公式5.6和5.7计算出一组新的模型参数M1,这样就完成一次迭代。可以得到:
-
就一直迭代下去,直到不再明显提高为止。
更多推荐
所有评论(0)