Csdn懂个锤子  还不是IT内容!!!

在汉中,即使知道了读音,也就是我们小学学的拼音,要找到准确的对应的汉字还有一些困难,因为汉语中平均一个读音对应十几个汉字,即使你的四声读音非常准,耳朵也听得非常准(南方人其实常常做不到这一点),一个标上了四声声调的读音也对应了六个国标汉字。一音多字这个问题,在语音识别上会产生指数爆炸的灾难性后果。比如一个音对应6个字,从理论上讲,两个音的组合就可能对应36个字的组合,一个长度只有十个字的短句子,10个拼音所对应的全部汉字串,能组合出6的十次方,也就是6000万种可能性。如果句子更长,组合数还会快速增长。

当然,可能有人会说考虑到一些字会组成常用的词,那么情况并不会这么糟糕。这种考虑在语音识别中的确是需要的,通过这种精简,可以大大减少排列组合的数量。但是,即使每一两个拼音,只对应少数几个单字词或者双字词,当句子稍微长一点,组合数量还是大得惊人。我们假定在考虑了组词之后每个拼音平均对应两个字,10个音节(拼音)可能的组合只有一千多种,比6000万种好了很多,但是,如果一句话的长度到了20个音节,可能的组合数量又达到了百万种。语音识别其实是一个任务,就是需要在这上百万的候选中找到最合理、最可能的语句。

上述问题在通信中也会遇到,是一个标准的解码问题,那么怎么解决这个问题呢?将一百万种可能性一一评估显然不是一个好办法。对此维特比想到了一个特别妙的解码办法。为了比较清楚地说明问题,我把一句话的拼音和相应的汉字,做一个编号,按照下面的方式放到一张表中。

假如一个句子有20个音节,每个音节可能对应6个字,那么我们就用一个长为20,深度为6的网格将每个可能的字填入其中。

由于一个句子的音节按顺序从头到尾构成一个时间序列,因此,为了便于描述,我们用t表示音节的时间次序,将第一个音节标记为时间t=1,最后一个音节标记为时间t=20。

接下来,我们把每一个音节可以对应的汉字填入到相应的那一列的六个网格中,并且从1到6挨个标记。比如第一个音节对应的字,编号就是从W11,W12,到W16,第二个拼音对应的字,编号为W21,W22,到W26。编号中第一个数字是时间t,后一个数字是某个拼音所对应的六个候选汉字的序号。因此,到了最后一个拼音,即t=20,相应的字就是W201,W202,到W206。在下面的表格中,我填入了第一个音和第六个音的情况。

所谓的解码就是在这样的网格中,找一条从t=1到t=20的路径,路径中经过的点,就是方格中的一个个字,比如W13,W24,到W201,等等。下图给出了一条路径。当然,对于一个20个音节的句子,这样的路径有三千六百万亿条。解码的过程就是找到一条最合理的路径的过程,我们把它称为寻找最佳路径。

在T1和T2时刻最短路径是6*6种,找出最短路径

对于这样路径密密麻麻的网格,维特比注意到这样一个现象:不论有多少条路径,最佳的那一条路径在某个特定时刻,只有六种可能。比如在t=6(也就是第六个音节)的时刻,必须经过W61,W62,W63......W66,这六个字中的一个。这样一来在第六个音节之前不论有多少条路径,真正有可能是最佳路径的候选路径,只可能有六条候选。

接下来,进入到第七个音节,由于这个音节也对应了6个汉字,和前面六条路径组合出6x6=36种可能性。但是,由于在第七个音节处,最佳的路径也只可能有六种(和t=6的情况一样)。因此,我们只需要对第七个音节的六个候选,W71,W72,W73......W76,每个候选保留一个最佳路径即可,这样一共也是六条。

以此类推,在每个时刻,我们只需要保留六条路径,将这个步骤一直走到t=20最后的时刻。如果对于上述内容你一时难以理解,也没有关系,只要记住,在任何时刻,只要保留六条路径就好。

这种算法是维特比最早发明的,因此被称为维特比算法。对于20个音节,每个音节有6个候选字这种情况,维特比算法将复杂度从6的20次方,即3600万亿,减少到6x6x20=720次,足足减少了20万亿倍。

维特比算法浅析,如何理解时序的动态规划相关推荐

  1. 维特比算法的java实现_维特比算法通俗明白

    维特比算法说白了就是动态规划实现最短路径,只要知道"动态规划可以降低复杂度"这一点就能轻松理解维特比算法维特比算法是一个特殊但应用最广的动态规划算法,利用动态规划,可以解决任何一个 ...

  2. 基于维特比算法的概率路径

    简介: 维特比算法(Vieterbi algorithm)是一种动态规划算法,探索出很多预测天气的方法,这种基于经验的预测方式,是一种基于历史数据的概率模型. 思想 维特比算法的思想是假设某一个数据的 ...

  3. viterbi,维特比算法通俗理解

    维特比算法说白了就是动态规划实现最短路径,只要知道"动态规划可以降低复杂度"这一点就能轻松理解维特比算法 维特比算法是一个特殊但应用最广的动态规划算法,利用动态规划,可以解决任何一 ...

  4. 维特比算法 python_用python实现与理解HMM-维特比算法

    HMM-维特比算法理解与实现(python) 解码问题 给定观测序列 \(O=O_1O_2...O_T\) ,模型 \(\lambda (A,B,\pi)\) ,找到最可能的状态序列 \(I^∗=\{ ...

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

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

  6. 维特比算法(Viterbi algorithm) 的理解

    维特比算法实际是动态规划解隐马尔科夫模型预测问题,用动态规划求概率最大路径,这时一条路径就是一个状态序列. 根据动态规划原理,最优路径在时刻t,如果最优路径 通过节点Node_t_k, 那么这一路径从 ...

  7. 维特比算法 python_维特比算法理解与实现(Python)

    前言 写这篇文章就是想以通俗易懂的方式解析维特比算法,最后给出Python代码的实现.下面的公式和原理均出自<统计学习方法>. 算法的原理 算法的原理1.PNG 算法的原理2.PNG 上面 ...

  8. 条件随机场(CRF) - 4 - 学习方法和预测算法(维特比算法)

    声明: 1,本篇为个人对<2012.李航.统计学习方法.pdf>的学习总结,不得用作商用,欢迎转载,但请注明出处(即:本帖地址). 2,由于本人在学习初始时有很多数学知识都已忘记,所以为了 ...

  9. viterbi维特比算法和隐马尔可夫模型(HMM)

    阅读目录 隐马尔可夫模型(HMM) 回到目录 隐马尔可夫模型(HMM) 原文地址:http://www.cnblogs.com/jacklu/p/7753471.html 本文结合了王晓刚老师的ENG ...

最新文章

  1. THINKPAD笔记本Fn组合键介绍
  2. c语言220程序,《C语言程序实例大全》原代码220例
  3. 通过代码动态创建Windows服务
  4. 显存文本模式详解 ———《x86汇编语言:从实模式到保护模式》读书笔记补遗02
  5. Blazor+Dapr+K8s微服务之开发环境调试
  6. 【机器视觉学习笔记】双线性插值实现图片任意角度旋转(C++)
  7. boost signal2 trackable
  8. apk反编译、smali修改、回编译笔记
  9. 【论文理解】Learning in the Frequency Domain
  10. Mysql数据库远程授权
  11. 均匀分布 卡方分布_高等数理统计—第一章 统计分布基础
  12. 仿宋GB_2312字体在wps,office中的安装下载使用
  13. HTML5期末大作业:个人网站设计——简单响应式个人博客HTML模板(8页面) HTML+CSS+JavaScript...
  14. html如何设置banner,css设置banner图自适应的方法
  15. 30天自制操作系统 第2天
  16. 我们不改需求了,给你们立字据!
  17. Microsoft系统端口及服务对应汇总
  18. iOS下载APP之后直接跳转到信任界面
  19. 中风(脑卒中)研究意义和背景
  20. 有哪些好用的日程计划管理软件?

热门文章

  1. selenium自动化测试框架——建议收藏
  2. php专业软件是什么意思,软件主要是什么的总称
  3. linux运行run文件显示cannot execute binary file
  4. cn2线路有什么优点
  5. constant用法
  6. QEE学习 在视图模板中使用自定义的辅助类
  7. python进行excle表格脱敏批处理
  8. 序列化和反序列化【积少成多的知识点】
  9. 自定义布局和自定义流水布局(CollectionViewLayout和CollectionViewFlowLayout)实例
  10. 对vue3新特性Tree-Shaking进行详细介绍