kaldi 源码分析(七) - HCLG 分析

简介: Kaldi 语音识别主流程:语音识别过程解码网络使用 HCLG.fst 的方式, 它由 4 个 fst 经过一系列算法组合而成。分别是 H.fst、C.fst、L.fst 和 G.fst 4 个 fst 文件:1. G:语言模型,输入输出类型相同,实际是一个WFSA(acceptor接受机),为了方便与其它三个WFST进行操作,将其视为一个输入输出相同的WFST。

Kaldi 语音识别主流程:


img_7857f1415d8334b182af0afa900f1727.png
语音识别过程

解码网络使用 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

目录
相关文章
|
存储 前端开发 JavaScript
AntV X6源码探究简析
AntV是蚂蚁金服全新一代数据可视化解决方案,其中X6主要用于解决图编辑领域相关的解决方案,其是一款图编辑引擎,内置了一下编辑器所需的功能及组件等,本文旨在通过简要分析x6源码来对图编辑领域的一些底层引擎进行一个大致了解,同时也为团队中需要进行基于X6编辑引擎进行构建的图编辑器提供一些侧面了解,在碰到问题时可以较快的找到问题点。
300 0
|
10月前
|
网络架构 内存技术
OpenPose原理解析
Openpose论文原理总结
215 0
|
机器学习/深度学习 分布式计算 关系型数据库
直播预告 | pg4ml 机器学习框架介绍与模型案例
pg4ml 机器学习框架是基于 PostgreSQL v13 实现的、使用 plpgsql 编写的机器学习框架,其核心机制是神经网络构建和模型训练。本次分享包括框架介绍、安装部署、模型案例、未来展望、与云计算、PolarDB结合等内容。
直播预告 | pg4ml 机器学习框架介绍与模型案例
|
机器学习/深度学习
GAN简介及原理分析
GAN简介及原理分析
234 0
GAN简介及原理分析
|
存储 JSON Java
深入浅出FlatBuffers原理
FlatBuffers 是一个开源的、跨平台的、高效的、提供了多种语言接口的序列化工具库。实现了与 Protocal Buffers 类似的序列化格式。主要由 Wouter van Oortmerssen 编写,并由 Google 开源。本文将基于高德地图数据编译增量发布使用了FlatBuffers序列化工具,为大家分享FlatBuffers的原理。
深入浅出FlatBuffers原理
kaldi 源码分析(十) - gmm-init-mono.c分析
一直没有搞明白 hmm-gmm 之间是通过什么联系起来的,花了些时间查代码,看到最直观联系的就是 gmm-init-mono 工具。 gmm-init-mono 基础类 通过上述看到,主要的配置都是 在 topo 文件中, 这里需要将一些常...
1875 0
|
Python Perl
kaldi 源码分析(九) - topo 文件分析
在 egs/wsj/s5/steps/nnet3/chain/gen_topo*.py 与 src/hmm/hmm-topology.cc 文件进行对应 在 gen_topo*.p{l, y} 文件中进行自动创建 topo 文件, 然后在 hmm-topology.cc 文件中的 HmmTopology::Read() 函数中解析 topo 文件生成 HmmTopology 对象。
1543 0
|
机器学习/深度学习 Shell DataX
kaldi 源码分析(八) - DNN训练过程
在 kaldi 训练过程中,DNN 的训练是依赖于 GMM-HMM 模型的,通过 GMM-HMM 模型得到 DNN 声学模型的输出结果(在 get_egs.sh 脚本中可以看到这一过程)。
7868 0
kaldi 源码分析(六) - 指令参数分析
在 kaldi 系统中通常会出现很多参数相关的解析,比如: # 对于 声纹识别 中获取 ivector 特征向量使用如下脚本 steps/online/nnet2/extract_ivectors_online.
2258 0
|
开发工具 IDE
kaldi 源码分析(五) - 开发环境
习惯了使用 ide 开发,做 kaldi 开发使用 vim 虽然也可以,总觉得别扭,所以想找个 IDE 开发,这里使用的是 CLion 作为开发工具。 将项目以 [ Import Project from Source ] 的方式导入到 Clion 里面,然后配置好相关的 CMakeLists.
4163 0