查看原文
其他

干货|通俗理解维特比算法

2017-08-16 忆臻 机器学习算法与自然语言处理

本文假定读者有一定的隐马模型基础!或者大家可以参考这两篇文章。

隐马尔科夫模型-基本模型与三个基本问题隐马尔科夫模型-前向算法

维特比算法说白了就是动态规划实现最短路径,只要知道“动态规划可以降低复杂度”这一点就能轻松理解维特比算法

维特比算法之所以重要,是因为凡是使用隐含马尔可夫模型描述的问题都可以用它来解码,包括今天的数字通信、语音识别、机器翻译、拼音转汉字、分词等。——《数学之美》

下面我通过一个例子来解释讲解一下维特比算法!

词性标注问题            

首先介绍一下什么是词性标注问题,比如我们有一句已经分词好的句子。

dog chase mouse

那么我们就可以进行词性标注为:

其中nn为名词,vv为动词。通过上面例子,我们就很容易看出词性标注的任务。

那么我们来了一句话之后,比如我们的词性字典中有nn,vv,prp(代词),我们怎么能够找到dog

chase mouse 所对应的词性标注呢,如果每一个单词有nn,vv,prp三种可能,那么将会有3*3*3=27种可能,我们如何去挑选呢?

如下图:

我们总共有27条路径,那么如何得到我们Dog chase mouse的最优路径呢?

我们至少可以遍历每一条路径,求出各自的概率值,然后挑选最大的即可,比如我们求第一条路径的时候,可以这么表示:

所求的路径对应如下图红色线条所示:

求第27条路径的时候,我们可以这么表示:

所求的路径对应如下图红色线条所示:

那么我们从上面可以知道,要求一个句子的最优词性标注,我们至少可以遍历所有的路径,然后挑选概率值最大的那条路径即可!!!


但是问题来了!            

给定模型,求给定长度为T的观测序列(这里指的就是Dog Chase Mouse)的概率,直接计算法的思路是枚举所有的长度T(例子中是三个,Dog,Chase,Mouse总共三个单词)的状态序列,计算该状态序列与观测序列的联合概率(隐状态发射到观测),对所有的枚举项求和即可。

在状态种类为N(例子中就是三个,NN,VV,PRP)的情况下,一共有 N^T种排列组合,每种组合计算联合概率的计算量为T,总的复杂度为0(TN^T),这并不可取。

于是维特比算法隆重登场了!!

维特比算法            

好了,到现在为止,我们假定我们已经训练好了一个隐马尔可夫模型了(训练好的意思,也就是单词到词性的发射概率,词性与词性的转移概率都已经在训练数据中学习得到了),来了一句话,Dog Chase Mouse,我如何得到它的词性标注序列?

首先先上一个维特比算法流程图:

是不是非常晕,好吧,我下面争取按自己的话帮助大家理解一遍,再附上相应逻辑的代码!

解释如下:


实现代码如下:


致谢:

郭江师兄

推荐阅读:

精选干货|近半年干货目录汇总----全是通俗易懂的硬货!欢迎阅读!

干货|台湾大学林轩田机器学习基石课程学习笔记3 -- Types of Learning

干货|台湾大学林轩田机器学习基石课程学习笔记2 -- Learning to Answer Yes/No

干货|台大林轩田机器学习基石笔记1 -- The Learning Problem


               欢迎关注公众号学习交流~          


您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存