kaldi 源码分析(七) - HCLG 分析
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 分析相关推荐
- Colly源码解析——结合例子分析底层实现
通过<Colly源码解析--框架>分析,我们可以知道Colly执行的主要流程.本文将结合http://go-colly.org上的例子分析一些高级设置的底层实现.(转载请指明出于break ...
- lodash源码中debounce函数分析
lodash源码中debounce函数分析 一.使用 在lodash中我们可以使用debounce函数来进行防抖和截流,之前我并未仔细注意过,但是不可思议的是,lodash中的防抖节流函数是一个函数两 ...
- Linux内核学习(五):linux kernel源码结构以及makefile分析
Linux内核学习(五):linux kernel源码结构以及makefile分析 前面我们知道了linux内核镜像的生成.加载以及加载工具uboot. 这里我们来看看linux内核的源码的宏观东西, ...
- mybatis源码阅读(七) ---ResultSetHandler了解一下
转载自 mybatis源码阅读(七) ---ResultSetHandler了解一下 1.MetaObject MetaObject用于反射创建对象.反射从对象中获取属性值.反射给对象设置属性值,参 ...
- Alian解读SpringBoot 2.6.0 源码(七):启动流程分析之准备应用上下文
目录 一.背景 1.1.run方法整体流程 1.2.本文解读范围 二.准备应用上下文 2.1.整体流程 2.2.设置环境 2.3.应用上下文进行后置处理 2.4.应用所有初始化器 2.5.发布应用上下 ...
- 从源码和内核角度分析redis和nginx以及java NIO可以支持多大的并发
有人询问我网上一篇关于"redis为什么单线程这么快"的文章,我建议他不要看了,因为redis是单进程不是单线程,后面的意见不用看了,文章质量肯定不会很好,他也说了自己看了很久源码 ...
- Caffe源码中common文件分析
Caffe源码(caffe version:09868ac , date: 2015.08.15)中的一些重要头文件如caffe.hpp.blob.hpp等或者外部调用Caffe库使用时,一般都会in ...
- 朋友问我学习高并发需不需要阅读源码,我是这样分析的!!
来自:冰河技术 写在前面 最近正在写[高并发专题]的文章,其中,在[高并发专题]中,有不少是分析源码的文章,很多读者留言说阅读源码比较枯燥!问我程序员会使用框架了,会进行CRUD了,是否真的有必要阅读 ...
- JUC之CountDownLatch的源码和使用场景分析
最近工作不饱和,写写文章充充电.何以解忧,唯有Coding.后续更新的文章涉及的方向有:ThreadPoolExecutor.Spring.MyBatis.ReentrantLock.CyclicBa ...
最新文章
- std::max,std::min错误:应输入标识符的解决方法
- Java JDK 学习笔记:File类
- lightoj-1028 Trailing Zeroes (I)
- linux指令笔试,Linux笔试常用命令
- 【自动驾驶】8. MDC通信架构 + DDS + SOME/IP
- python读取word文档结构图_python根据文章标题内容自动生成摘分享的实例
- Guava的介绍与使用示例
- 前端架构 IMVC 实时热更新模式
- javascript - return
- Java开发工程简历模板
- java压缩图片thumbnails_Java压缩图片、减小图片文件体积大小,Thumbnails使用教程...
- ESP8266+电能计量芯片
- 天津职称英语及计算机,关于天津职称英语
- springboot+mybatis打包时,单元测试类报错
- 洛谷P1336 课题选择
- 无刷电机FOC控制------转速计算、载波频率相关
- 将家人从Gmail,Thunderbird,Outlook等迁移到Google Apps:权威指南
- 从985非科班到网易伏羲CV算法岗
- PX4和Airsim通信操作流程
- 领导力:不要做个“好人”
热门文章
- android drawable 比例,Android中的Drawable基础与自定义Drawable
- Linux服务跟随启动,Linux—添加开机启动(服务/脚本)
- hwpfdocument 获取第一页内容_有人专注搞这3个引流渠道,精准流量获取从此变得简单...
- 牛客网数据库SQL实战答案解析上篇
- PAT乙级(Basic Level)真题--跟奥巴马一起编程(15)
- 脚本安装Rocky版OpenStack 1控制节点+1计算节点环境部署
- 使用 TRESTClient 與 TRESTRequest 作為 HTTP Client 之二 (POST 檔案)
- Oracle BI11启动失败
- 记杨绛先生的经典语句
- 唯真才能永久--读《十年》