Kaldi语音识别技术(八) ----- 整合HCLG

news2025/7/16 0:11:35

Kaldi语音识别技术(八) ----- 整合HCLG

文章目录

  • Kaldi语音识别技术(八) ----- 整合HCLG
    • HCLG 概述
    • 组合LG.fst
        • 可视化 LG.fst
    • 组合CLG.fst
        • 可视化CLG.fst
    • 生成H.fst
    • 组合HCLG.fst
      • 生成HaCLG.fst
      • 生成HCLG.fst

HCLG 概述

HCLG= min(det(H o min(det(C o min(det(L o G)))))

将四者逐层合并,即可得到最后的图。其中, o表示组合,det表示确定化,min表示最小化。

WFST的融合一般是从大到小,即先将G与L进行融合,再一次融合C、H,每次融合都要进行确定化(determinisation)和最小化(minimisation),最小化是指将WFST转换为一个状态节点和边更少的等价WFST,提高搜索的效率。HCLG的组合可以参考 kaldi/wsj/s5/utils/mkgraph.sh

在这里插入图片描述

组合LG.fst

  • fsttablecompose

用法:

fsttablecompose 
Composition algorithm [between two FSTs of standard type, in tropical
semiring] that is more efficient for certain cases-- in particular,
where one of the FSTs (the left one, if --match-side=left) has large
out-degree

Usage:  fsttablecompose (fst1-rxfilename|fst1-rspecifier) (fst2-rxfilename|fst2-rspecifier) [(out-rxfilename|out-rspecifier)]

使用实列:

cd ~/kaldi && mkdir HCLG
fsttablecompose ~/kaldi/data/L/lang/L_disambig.fst ~/kaldi/data/G/normal/G.fst | fstdeterminizestar --use-log=true | fstminimizeencoded | fstpushspecial | fstarcsort --sort_type=ilabel > ~/kaldi/data/HCLG/LG.fst

在这里插入图片描述

fstisstochastic 这是一个诊断步骤,他打印出两个数字,最小权重和最大权重

fsttablecompose 将两个fst(L.fst、G.fst)合并成一个fst(LG.fst),将前端输出字符对应上后端输入即可,合并后前端输入作为合并后fst之输入,后端输出作为合并后输出;

fstdeterminizestar 做确定化(从一个状态接收同一个输入后只会跳转到一个状态),消除空转移,降低图的冗余度;

fstminimizeencoded 将fst最小化,将权重尽量前推,尽量利用上语言模型的信息,避免重要路径被剪枝;

fstisstochastic 进行归一化,保证状态上各输出概率之合为1。

可视化 LG.fst

  • fstprint
cd ~/kaldi/data
fstprint --isymbols=./G/normal/phones.txt --osymbols=./G/normal/words.txt ./HCLG/LG.fst > ./HCLG/LG.txt

在这里插入图片描述

  • fstdraw
fstdraw --isymbols=./G/normal/phones.txt --osymbols=./G/normal/words.txt ./HCLG/LG.fst > ./HCLG/LG.dot  # 生成dot文件
dot -Tsvg ./HCLG/LG.dot > LG.svg # 转成svg矢量图(放大不会失真)

所需时间很长,不进行尝试。

组合CLG.fst

fstcomposecontext

用法:

fstcomposecontext 
Composes on the left with a dynamically created context FST

Usage:  fstcomposecontext <ilabels-output-file>  [<in.fst> [<out.fst>] ]
E.g:  fstcomposecontext ilabels.sym < LG.fst > CLG.fst

使用实列:

cd ~/kaldi/data/HCLG
fstcomposecontext --context-size=1 --central-position=0 --read-disambig-syms=/root/kaldi/data/G/normal/phones/disambig.int --write-disambig-syms=disambig_ilabels.int disambig_ilabels < LG.fst > CLG.fst

参数详解:
–context-size=1 单音素模型
–central-position=0 中间音素位置为0
–read-disambig-syms disambig.int来自生成的L或G过程中生成的phones文件夹中的文件,输入文件LdG-Ngram.fst来自于上一步合并的LdG-Ngram.fst模型。

在这里插入图片描述

在Kaldi中一般不会显式创建出单独的C.fst再和LG 组合,不用fsttablecompose命令,而是使用fstcomposecontext 工具根据LG.fst动态的生成CLG.fst。当然也可以先创建C.fst,然后使用fsttablecompose命令融合,但是这种方式相当耗时。 这里构建出来disambig_ilabels.intdisambig_ilabels 2个文件,用于生成Ha.fst。

可视化CLG.fst

  • fstprint
fstprint fstprint --isymbols=../G/normal/phones.txt --osymbols=../G/normal/words.txt ./CLG.fst > CLG.txt

在这里插入图片描述

  • fstdraw
fstdraw --isymbols=./G/normal/phones.txt --osymbols=../G/normal/words.txt ../CLG.fst > CLG.dot # 再使用dot工具转为图片即可

生成H.fst

make-h-transducer

make-h-transducer是基于HMM拓扑结构构建不带自转移的声学模型Ha.fs

用法:

make-h-transducer 
Make H transducer from transition-ids to context-dependent phones, 
 without self-loops [use add-self-loops to add them]
Usage:   make-h-transducer <ilabel-info-file> <tree-file> <transition-gmm/acoustic-model> [<H-fst-out>]
e.g.: 
 make-h-transducer ilabel_info  1.tree 1.mdl > H.fst

使用实列:

make-h-transducer disambig_ilabels /root/kaldi/data/H/mono/tree /root/kaldi/data/H/mono/final.mdl > Ha.fst

参数详解:
第一个输入参数(disambig_ilabels )为组合CLG.fst时生成的。
第二个输入参数为 GMM训练生成的决策树(tree)。
第三个输入参数为 GMM训练生成的最终模型。(Ha.fst中的a表示没有自环(self-loop))。
在这里插入图片描述

组合HCLG.fst

生成HaCLG.fst

fsttablecompose

fstrmsymbols:去除HaCLG.fst模型中与消歧相关的转移。disambig_tid.int为组合CLG.fst时生成的。

用法:

fsttablecompose 
Composition algorithm [between two FSTs of standard type, in tropical
semiring] that is more efficient for certain cases-- in particular,
where one of the FSTs (the left one, if --match-side=left) has large
out-degree
Usage:  fsttablecompose (fst1-rxfilename|fst1-rspecifier) (fst2-rxfilename|fst2-rspecifier) [(out-rxfilename|out-rspecifier)]

使用实列:

fsttablecompose Ha.fst CLG.fst | fstdeterminizestar --use-log=true | fstrmsymbols disambig_tid.int | fstrmepslocal | fstminimizeencoded | fstpushspecial > HaCLG.fst

在这里插入图片描述

1、为HaCLG.fst模型添加自环

add-self-loops --self-loop-scale=0.1 --reorder=true /root/kaldi/data/H/mono/final.mdl < HaCLG.fst

生成HCLG.fst

2、将HaCLG转换为HCLG

fstconvert --fst_type=const HaCLG.fst >HCLG.fst

在这里插入图片描述


至此,HCLG.fst已经生成,整个kaldi语音识别系统的核心内容已经构建完成,只需要将其进行应用即可!

有问题欢迎私信或者留言探讨,完整的虚拟机克隆后面会放评论区,感谢支持!

推荐文章: Kaldi的HCLG构图过程可视化

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/362393.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

KT1025A蓝牙音频芯片_立讯KC认证FCC测试现场整改记录

目录 一、问题说明简介 测试机构立讯反馈&#xff0c;客户寄的样板进行无线KC【韩国】测试不过&#xff0c;体现在如下两点 蓝牙部分接收杂散不过 蓝牙的发射功率偏低 2.1 单独只给蓝牙部分供电的测试图片--OK 2.2 单独给整板供电--但是使用电池供电 2.3 单独给整板供电-…

2022FALL嵌入式大纲

Jamslade 部分内容有遗漏&#xff0c;可结合 超文本 2022FALL《嵌入式系统原理》期末复习笔记 一起观看 文章目录嵌入式系统片上系统实时系统硬实时系统软实时系统伪指令DMA传输波特率单/半双/全双工通信&#xff1b;对齐/非对齐访问地址译码代码临界区RISCBIOSUARTSPII2CWDTRO…

推荐一款新的自动化测试框架:DrissionPage

今天给大家推荐一款基于Python的网页自动化工具&#xff1a;DrissionPage。这款工具既能控制浏览器&#xff0c;也能收发数据包&#xff0c;甚至能把两者合而为一&#xff0c;简单来说&#xff1a;集合了WEB浏览器自动化的便利性和 requests 的高效率。 一、DrissionPage产生背…

跳跃游戏-力扣55-java动态规划

一、题目描述给定一个非负整数数组 nums &#xff0c;你最初位于数组的 第一个下标 。数组中的每个元素代表你在该位置可以跳跃的最大长度。判断你是否能够到达最后一个下标。示例 1&#xff1a;输入&#xff1a;nums [2,3,1,1,4]输出&#xff1a;true解释&#xff1a;可以先跳…

区间合并计算问题(LC-1326、LC-1024、LC-55、LC-45)

区间合并计算问题 文章目录区间合并计算问题[1326. 灌溉花园的最少水龙头数目](https://leetcode.cn/problems/minimum-number-of-taps-to-open-to-water-a-garden/)贪心[1024. 视频拼接](https://leetcode.cn/problems/video-stitching/)[55. 跳跃游戏](https://leetcode.cn/p…

[JavaEE系列] 详解面试中HTTP协议HTTPS协议

文章目录HTTP不安全HTTPS中的加密算法对称加密非对称加密混合加密HTTPS中的摘要算法HTTPS中的数字证书SSL /TLS握手TCP建立连接&#xff08;三次握手&#xff09;三次握手中常见的面试题&#xff1a;TCP断开连接&#xff08;四次挥手&#xff09;四次挥手中常见的面试题&#x…

比亚迪决定不给日系留“活路”了

本文来源&#xff1a;品驾/ 导读 /比亚迪的战争又打响了。2月10日&#xff0c;比亚迪秦PLUS DM-i2023冠军版正式上市&#xff0c;新车虽然改动不大&#xff0c;但起步价已至99800元&#xff0c;DM-i车型价格首次下探到10万以下这个区间。这场战争有那么可怕吗&#xff1f;有人还…

JSCharting 3.4 JavaScript Crack

JSCharting 利用其 JavaScript 图表库中十多年的真实世界图表和可视化专业知识。JSCharting 拥有超过 150 种图表类型&#xff0c;提供了一整套无缝集成的产品&#xff0c;包括甘特图、组织图表、地图、日历、网格、财务、股票、微型图、迷你图和所有类型的仪表板&#xff0c;用…

【论文简述】SKFlow: Learning Optical Flow with Super Kernels(NeurIPS 2022)

一、论文简述 1. 第一作者&#xff1a;Shangkun Sun 2. 发表年份&#xff1a;2022 3. 发表期刊&#xff1a;NeurIPS 4. 关键词&#xff1a;光流、代价体、遮挡区域、大核卷积、跳跃连接 5. 探索动机&#xff1a;遮挡问题是光流最大的挑战之一。 现有的解决方案&#xff1a…

JavaDoc生成API文档(powernode CD2207)(内含教学视频+源代码)

JavaDoc生成API文档&#xff08;powernode CD2207&#xff09;(内含教学视频源代码) 教学视频源代码下载链接地址&#xff1a;https://download.csdn.net/download/weixin_46411355/87473419 目录JavaDoc生成API文档&#xff08;powernode CD2207&#xff09;(内含教学视频源代…

robotiq 2f 140安装在UR3机械臂后面在gazebo仿真中散架、抖动

robotiq 2f 140安装在UR3机械臂后面在gazebo仿真中散架、抖动 搭建环境&#xff1a; ubuntu: 20.04 ros: Nonetic sensor: robotiq_ft300 gripper: robotiq_2f_140_gripper UR: UR3 通过上一篇博客配置好ur3、力传感器和robotiq夹爪的gazebo仿真环境后&#xff0c;夹爪看起来…

操作系统作业

1、下列关于线程的描述中&#xff0c;错误的是A&#xff0e;内核级线程的调度由操作系统完成B&#xff0e;操作系统为每个用户级线程建立一个线程控制块C&#xff0e;用户级线程间的切换比内核级线程间的切换效率高D&#xff0e;用户级线程可以在不支持内核级线程的操作系统上实…

07- 图像上下采样及图像直方图显示 (OpenCV基础) (机器视觉)

知识重点 高斯金字塔pyrDown向下采样: dst cv2.pyrDown(img) # 每次处理后, 结果图像是原来的1/4.pyrUp 向上采样: dst cv2.pyrUp(img) # 放大图片拉普拉斯金字塔 保留的就是残差: img- PyrUp(PyrDown(img))统计直方图: hist cv2.calcHist([img], [0], None, [25…

element/tree的使用(树的多选以及回显)

获取和设置各有两种方式&#xff1a;通过 node 或通过 key。如果需要通过 key 来获取或设置&#xff0c;则必须设置node-key。 <el-tree:data"data"show-checkboxdefault-expand-allnode-key"id"ref"tree"highlight-current:props"defa…

Oracle格式化五位数字格式时间

首先五位的时间格式一般出现在Excel批量导入时&#xff0c;年月日的时间格式读取时出现可以在excel文件中复现出来&#xff0c;在Excel文件中填写时间格式2023/02/21&#xff0c;然后右键设置单元格格式就选择常规就可以显示为5位的时间格式&#xff0c;也就是说2023/02/21对应…

不要对chatgpt过度反思 第二部分

如果未来&#xff0c;它真的可以引爆下一轮科技革命&#xff0c;只要双方不存在科技代差&#xff0c;就无法阻止科技扩散。 打个比方&#xff0c;如果你本身没有网络基础&#xff0c;没有大数据&#xff0c;她确实和你无关&#xff0c;反之&#xff0c;捅破了那层窗户纸&#x…

5.9 BGP属性-local_pref

配置BGP LOCAL_PREF属性控制选路 1. 实验目的 熟悉BGP LOCAL_PREF属性控制选路的应用场景掌握BGP LOCAL_PREF属性控制选路的配置方法2. 实验拓扑 实验拓扑如图5-9所示: 图5-9:配置BGP LOCAL_PREF属性控制选路 3. 实验步骤 (…

html笔记(一)

一、html简介 什么是HTML&#xff1f; Hyper Text Markup Language 超文本标记语言 超文本&#xff1f;超级文本&#xff0c;例如流媒体&#xff0c;声音、视频、图片等。 标记语言&#xff1f;这种语言是由大量的标签组成。 任何一个标签都有开始标签和结束标签&…

Datawahle组队学习——妙趣横生大数据 Day3

妙趣横生大数据 Day3四、HBase1. 背景2. HBase 概述3. HBase 数据模型相关概念数据坐标概念视图物理视图面向列的存储4. HBase 实现原理HBase 功能组件表和 RegionRegion 定位5. HBase 运行机制系统架构Region服务器的工作原理Store工作原理HLog工作原理实验Datawhale 大数据技…

Redis学习之Jedis(五)

这里写目录标题一、Jedis简介二、Jedis代码实现2.1 新建java工程2.2 导入jar包2.3 编写代码2.4 这里可以换用maven项目三、Jedis简易工具类开发3.1 添加jar包3.2 封装连接参数3.3 加载配置信息3.4 获取连接一、Jedis简介 Jedis提供了Java与Redis的连接服务。 二、Jedis代码实…