Kaldi 语音识别主流程:

语音识别过程

解码网络使用 HCLG.fst 的方式, 它由 4 个 fst 经过一系列算法组合而成。分别是 H.fst、C.fst、L.fst 和 G.fst 4 个 fst 文件:

1. G:语言模型,输入输出类型相同,实际是一个WFSA(acceptor接受机),为了方便与其它三个WFST进行操作,将其视为一个输入输出相同的WFST。2. L:发音词典,输入:monophone,输出:词;3. C:上下文相关,输入:triphone(上下文相关),输出:monophnoe;4. H:HMM声学模型,输入:HMM transitions-ids (对 pdf-id 和 其它信息编码后的 id),输出:triphone。

通过如下组合方式来计算最终输出结果:

HCLG = asl(min(rds(det(H' o min(det(C o min(det(Lo G))))))))

上面的o表示组合,det表示确定化,min表示最小化,rds表示去除消岐符号,asl表示增加自环。

其训练顺序为 G -> L -> C -> H (因 G 语法模型基于统计生成,L 则是在 G 生成过程中使用的基础,而 C 则是基于 L 生成的 phone 上下文关系依据决策树生成的结果)

解码过程中使用 Lattice 来保存识别的候选序列,通过遍历得到得分最靠前的多条候选路径,即 N-best,即为输出文本。Lattice 本质是一个有向无环图( directed acyclic graph )。 图上的每个节点代表一个词的结束时间点,每条边代表一个可能的词,以及该词发生的声学得分和语言模型得分。

参考

语音识别中的lattice与confusion network
kaldi lattice

kaldi 源码分析(七) - HCLG 分析相关推荐

  1. Colly源码解析——结合例子分析底层实现

    通过<Colly源码解析--框架>分析,我们可以知道Colly执行的主要流程.本文将结合http://go-colly.org上的例子分析一些高级设置的底层实现.(转载请指明出于break ...

  2. lodash源码中debounce函数分析

    lodash源码中debounce函数分析 一.使用 在lodash中我们可以使用debounce函数来进行防抖和截流,之前我并未仔细注意过,但是不可思议的是,lodash中的防抖节流函数是一个函数两 ...

  3. Linux内核学习(五):linux kernel源码结构以及makefile分析

    Linux内核学习(五):linux kernel源码结构以及makefile分析 前面我们知道了linux内核镜像的生成.加载以及加载工具uboot. 这里我们来看看linux内核的源码的宏观东西, ...

  4. mybatis源码阅读(七) ---ResultSetHandler了解一下

    转载自  mybatis源码阅读(七) ---ResultSetHandler了解一下 1.MetaObject MetaObject用于反射创建对象.反射从对象中获取属性值.反射给对象设置属性值,参 ...

  5. Alian解读SpringBoot 2.6.0 源码(七):启动流程分析之准备应用上下文

    目录 一.背景 1.1.run方法整体流程 1.2.本文解读范围 二.准备应用上下文 2.1.整体流程 2.2.设置环境 2.3.应用上下文进行后置处理 2.4.应用所有初始化器 2.5.发布应用上下 ...

  6. 从源码和内核角度分析redis和nginx以及java NIO可以支持多大的并发

    有人询问我网上一篇关于"redis为什么单线程这么快"的文章,我建议他不要看了,因为redis是单进程不是单线程,后面的意见不用看了,文章质量肯定不会很好,他也说了自己看了很久源码 ...

  7. Caffe源码中common文件分析

    Caffe源码(caffe version:09868ac , date: 2015.08.15)中的一些重要头文件如caffe.hpp.blob.hpp等或者外部调用Caffe库使用时,一般都会in ...

  8. 朋友问我学习高并发需不需要阅读源码,我是这样分析的!!

    来自:冰河技术 写在前面 最近正在写[高并发专题]的文章,其中,在[高并发专题]中,有不少是分析源码的文章,很多读者留言说阅读源码比较枯燥!问我程序员会使用框架了,会进行CRUD了,是否真的有必要阅读 ...

  9. JUC之CountDownLatch的源码和使用场景分析

    最近工作不饱和,写写文章充充电.何以解忧,唯有Coding.后续更新的文章涉及的方向有:ThreadPoolExecutor.Spring.MyBatis.ReentrantLock.CyclicBa ...

最新文章

  1. std::max,std::min错误:应输入标识符的解决方法
  2. Java JDK 学习笔记:File类
  3. lightoj-1028 Trailing Zeroes (I)
  4. linux指令笔试,Linux笔试常用命令
  5. 【自动驾驶】8. MDC通信架构 + DDS + SOME/IP
  6. python读取word文档结构图_python根据文章标题内容自动生成摘分享的实例
  7. Guava的介绍与使用示例
  8. 前端架构 IMVC 实时热更新模式
  9. javascript - return
  10. Java开发工程简历模板
  11. java压缩图片thumbnails_Java压缩图片、减小图片文件体积大小,Thumbnails使用教程...
  12. ESP8266+电能计量芯片
  13. 天津职称英语及计算机,关于天津职称英语
  14. springboot+mybatis打包时,单元测试类报错
  15. 洛谷P1336 课题选择
  16. 无刷电机FOC控制------转速计算、载波频率相关
  17. 将家人从Gmail,Thunderbird,Outlook等迁移到Google Apps:权威指南
  18. 从985非科班到网易伏羲CV算法岗
  19. PX4和Airsim通信操作流程
  20. 领导力:不要做个“好人”

热门文章

  1. android drawable 比例,Android中的Drawable基础与自定义Drawable
  2. Linux服务跟随启动,Linux—添加开机启动(服务/脚本)
  3. hwpfdocument 获取第一页内容_有人专注搞这3个引流渠道,精准流量获取从此变得简单...
  4. 牛客网数据库SQL实战答案解析上篇
  5. PAT乙级(Basic Level)真题--跟奥巴马一起编程(15)
  6. 脚本安装Rocky版OpenStack 1控制节点+1计算节点环境部署
  7. 使用 TRESTClient 與 TRESTRequest 作為 HTTP Client 之二 (POST 檔案)
  8. Oracle BI11启动失败
  9. 记杨绛先生的经典语句
  10. 唯真才能永久--读《十年》