维特比算法 (Viterbi algorithm) 是机器学习中应用非常广泛的动态规划算法,在求解隐马尔科夫、条件随机场的预测以及seq2seq模型概率计算等问题中均用到了该算法。实际上,维特比算法不仅是很多自然语言处理的解码算法,也是现代数字通信中使用最频繁的算法。

(1)从点S出发,对于第一个状态X1的各个节点,不妨假定有n1个,计算出S到它们的距离d(S,X1i),其中X1i代表任意状态1的节点。因为只有一步,所以这些距离都是S到它们各自的最短距离。

(2)对于第二个状态X2的所有节点,要计算出从S到它们的最短距离。对于特点的节点X2i,从S到它的路径可以经过状态1的n1中任何一个节点X1i,对应的路径长度就是d(S,X2i) = d(S,X1i) + d(X1i,X2i)。由于j有n1种可能性,我们要一一计算,找出最小值。即:

d(S,X2i) = minI=1,n1 d(S,X1i) + d(X1i,X2i)

这样对于第二个状态的每个节点,需要n1次乘法计算。假定这个状态有n2个节

点,把S这些节点的距离都算一遍,就有O(n1·n2)次计算。

(3)接下来,类似地按照上述方法从第二个状态走到第三个状态,一直走到最后一个状态,就得到了整个网格从头到尾的最短路径。每一步计算的复杂度都和相邻两个状态Si和Si+1各自的节点数目ni,ni+1的乘积成正比,即O(ni·ni+1)

(4)假设这个隐含马尔可夫链中节点最多的状态有D个节点,也就是说整个网格的宽度为D,那么任何一步的复杂度不超过O(D2),由于网格长度是N,所以整个维特比算法的复杂度是O(N·D2)。

分词应用:

我们有一个词典和每个词出现的概率:

词典:["经常"、"经"、“有”、“有意见”、“意见”、“分歧”、“见”、“意”、“见分歧”、“分”]

概率:[0.1、    0.05、 0.1、    0.1、      0.2、     0.2、   0.05、0.05、0.05、    0.1]

-log(x):[2.3、      3、    2.3、    2.3、      1.6、     1.6、     3、     3、      3、      2.3]

如图所示,直观地画出了各个词对应下一个词出现的转移概率,我们的目的是寻找一条最短路径(从节点1-->节点8),也就是将每条线上的权重值进行累加,使得最终的和最小。

在这里,我们定义f(8)为从第一个节点到第8个点的最短路径,同理f(7)为第一个节点到第七个节点,所以,f(8)也可以表述为f(7)+20

简单分析:从图中的1-->3,我们发现,f(1-->2-->3) > f(1-->3),所以我们会选择从1节点到3节点的路径。

递归分析:从图中,我们可以发现,第一个节点是开始端,最短路径应为0,即minf(0)=0;在第二个节点中,只有第一个节点与之相连,所以minf(2)=3;在第三个节点中,存在两条可选的路径,可见从1-->3的路径比1-->2-->3的路径更短,所以minf(3)=2.3;在第四个节点中,只有3-->4的唯一一条路径,所以minf(4)=f(3)+2.3;依次类推.......得到如下表:

所以,我们可以寻得最短路径为1-->3-->6-->8(1经常3有意见6分歧8)

每一个最短路径的节点即为一个分词的断点,所以,分词的最后结果为:

经常|有意见|分歧

维特比算法(Viterbi)相关推荐

  1. HMM——维特比算法(Viterbi algorithm)

    1. 前言 维特比算法针对HMM第三个问题,即解码或者预测问题,寻找最可能的隐藏状态序列: 对于一个特殊的隐马尔可夫模型(HMM)及一个相应的观察序列,找到生成此序列最可能的隐藏状态序列. 也就是说给 ...

  2. 语音识别学习日志 2019-7-17 语音识别基础知识准备6 {维特比算法(Viterbi Algorithm)}

    HMM 维特比算法(Viterbi Algorithm)详细解释参考:http://www.52nlp.cn/hmm-learn-best-practices-six-viterbi-algorith ...

  3. 维特比算法(viterbi)原理以及简单实现

    维特比算法 看一下维基百科的解释,维特比算法(Viterbi algorithm)是一种动态规划算法.它用于寻找最有可能产生观测事件序列的维特比路径--隐含状态序列,特别是在马尔可夫信息源上下文和隐马 ...

  4. C语言维特比算法,viterbi维特比算法

    维特比算法:使用动态规划,找出最短路径 以下以图的形式来解释: 图的节点按列组织,每列的节点数量可以不一样,每一列的节点只能和相邻列的节点相连,不能跨列相连,节点之间有着不同的距离,距离的值就不在图上 ...

  5. 维特比算法Viterbi Algorithm

     1.简介 维特比算法是一个特殊但应用最广的动态规划算法,它是针对篱笆网络的有向图(Lattice)的最短路径问题而提出的.凡是使用隐含马尔可夫模型描述的问题都可以用维特比算法来解码,包括今天的数 ...

  6. 机器学习:维特比算法(Viterbi Algorithm)

    一.维特比算法(Viterbi Algorithm)讲解方式01:篱笆网络(Lattice)的最短路径问题 已知下图的篱笆网络,每个节点之间的数字表示相邻节点之间的距离,举个例子来说,如果我走,这个距 ...

  7. em算法怎么对应原有分类_[PRML]序列数据 HMM维特比算法及扩展

    序列数据相关文章:1.马尔可夫模型2.隐马尔可夫模型简介3.HMM最大似然4.HMM前向后向算法5.HMM和积算法与尺度因子 1 维特比算法 在隐马尔可夫模型的许多应用中,潜变量有一些有意义的解释,因 ...

  8. NLP-基础任务-中文分词算法(2)-基于词典:基于N-gram语言模型的分词算法【基于词典的分词方法】【利用维特比算法求解最优路径】【比机械分词精度高】【OOV:基于现有词典,不能进行新词发现处理】

    例子:"经常有意见分歧" 词典:["经常","有","意见","意","见",& ...

  9. 维特比算法 python_HMM-维特比算法理解与实现(python)

    解码问题 给定观测序列 \(O=O_1O_2...O_T\),模型 \(\lambda (A,B,\pi)\),找到最可能的状态序列 \(I^∗=\{i^∗_1,i^∗_2,...i^∗_T\}\) ...

最新文章

  1. 分布式锁之三:Redlock实现分布式锁
  2. 社区资源 | NeurIPS 2020预讲会回放资料(含PPT)
  3. c语言节点导入数据编程,编程小白。用C语言计算SR E2E ARQ模式下节点的数据分析...
  4. android studio安装在其他盘,Android Studio配置移动到D盘(亲测)
  5. Linux各个文件夹的作用~~~非常实用!!
  6. SQL Server CONVERT() 函数,Date 函数
  7. mysql 5.5 压力测试,mysql 压力测试
  8. 电子书epub格式,在电脑上打开/浏览软件
  9. 【python】编程语言入门经典100例--11
  10. 魔趣9上手体验(更新药丸版)(坚果pro2)
  11. 计算机通信与网络实验西电,西安电子科技大学计算机通信与网络CH04 数字传输.pdf...
  12. aptana php,aptana 3 + xdebug php
  13. 线程的stop方法和interrupt方法
  14. 吉他演奏中的速度与节拍
  15. 基于Python实现的作家风格识别
  16. 自我检查,看清自己 看清自己什么皮肤。
  17. Spring XML 和 注解形式指定init 、destory方法
  18. 一分钟完全关闭Antimalware Service Executable(windows defender)任务管理器程序
  19. 【面试】面试反问环节
  20. 多种方法进行去基线处理

热门文章

  1. 删除oracle卸载后window服务中残留的oracle服务
  2. Tuxera NTFS2023Mac电脑免费U盘硬盘读写工具
  3. 虚拟机windows7安装启动MYSQL5.7
  4. 安卓与单片机进行usb hid通信
  5. 大数据分析-第六章 分类
  6. 值传递和引用传递的区别
  7. 计算机网络实验报告西南科技大学,西南科技大学计算机网络 实验一.doc
  8. 4.如何避免缓存穿透、缓存击穿、缓存雪崩
  9. 跟曹操学做事,向孔子学做人!
  10. 普天二代身份证读卡器SDK调用流程注意事项和错误代码