当前位置: 首页 > news >正文

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

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-degreeUsage:  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 FSTUsage:  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构图过程可视化

相关文章:

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

Kaldi语音识别技术(八) ----- 整合HCLG 文章目录Kaldi语音识别技术(八) ----- 整合HCLGHCLG 概述组合LG.fst可视化 LG.fst组合CLG.fst可视化CLG.fst生成H.fst组合HCLG.fst生成HaCLG.fst生成HCLG.fstHCLG 概述 HCLG min(det(H o min(det(C o min(det(L o G&#xff09;)))) 将…...

day17_异常

今日内容 上课同步视频:CuteN饕餮的个人空间_哔哩哔哩_bilibili 同步笔记沐沐霸的博客_CSDN博客-Java2301 零、 复习昨日 一、作业 二、异常 三、自定义异常 零、 复习昨日 见晨考 一、作业 package com.qf.homework;import java.text.ParseException; import java.text.Simpl…...

vue中把node-sass换成dart-sass方式(解决办法)

目录 一、替换原因 二、art-sass和node-sass的区别 三、替换方法 一、替换原因 因为node-sass和node.js版本关联太紧了&#xff0c;如果这两个版本不匹配&#xff0c;就会起冲突&#xff0c;导致项目无法运行。 ps&#xff1a;值得一提的是node版本和要运行的项目使用的依…...

深入浅出深度学习Pytroch

本文将以通俗易懂的方式&#xff0c;深入浅出地为您揭开深度学习模型构建与训练的面纱&#xff1a; 深度学习数据data模型model损失函数loss优化optimizer可视化visualizer深度学习 数据data 模型model 损失函数loss 优化optimizer 可视化visualizer深度学习数据data模型m…...

CCNP350-401学习笔记(451-500题)

451、what is the function of the LISP map resolver? A. to send traffic to non-LISP sites when connected to a service provider that does not accept nonroutable EIDs as packet sources B. to connect a site to the LISP-capabie part of a core network, publish …...

3年功能测试经验,面试想拿到15k很难吗?

一直觉得经验多&#xff0c;无论在哪都能找到满意的工作&#xff0c;但是现实却是给我打了一个大巴掌&#xff01;事后也不会给糖的那种... 个人情况 大概介绍一下个人情况&#xff0c;男&#xff0c;本科&#xff0c;三年多测试工作经验&#xff0c;一毕业因为不成熟的经验以…...

【7/101】101次面试之测试技术面试题

01、什么是兼容性测试&#xff1f;兼容性测试侧重哪些方面&#xff1f;答&#xff1a;兼容性测试是一种软件测试类型&#xff0c;它的主要目的是确保一个应用程序在不同的操作系统、不同的浏览器、不同的设备、不同的网络环境等各种环境下能够正常运行&#xff0c;并且不会产生…...

【蓝桥杯每日一题】前缀和算法

&#x1f34e; 博客主页&#xff1a;&#x1f319;披星戴月的贾维斯 &#x1f34e; 欢迎关注&#xff1a;&#x1f44d;点赞&#x1f343;收藏&#x1f525;留言 &#x1f347;系列专栏&#xff1a;&#x1f319; 蓝桥杯 &#x1f319;我与杀戮之中绽放&#xff0c;亦如黎明的花…...

【C#基础】C# 常用数据结构

序号系列文章4【C#基础】C# 变量和常量的使用5【C#基础】C# 运算符总结6【C#基础】C# 常用语句讲解文章目录前言数据结构的概念1&#xff0c;数组 &#xff08;Array&#xff09;1.1&#xff0c;声明并初始化赋值1.2&#xff0c;访问数组元素1.3&#xff0c;Array 类的使用2&am…...

MySql 及MyBatis数据的批量操作

1、Mybatis操作 1、批量更新 <update id"updateCtcc" parameterType"java.util.List">update ctcc set scan1 where id in<foreach collection"list" item"item" index"index" open"(" close")&qu…...

无代码表格数据库——一个企业数字化新物种

商业活动的“非标”地带在现实商业活动中存在大量未被明确界定、规范和标准化的灰色地带&#xff0c;它们不像电信、金融、财会、证券经纪、保险、建筑设计、工程造价等具有高度专业性的业务板块一样有强制的行业标准、规范甚至从业资格证书加持&#xff0c;下文统称其为非标业…...

第十三届蓝桥杯国赛 C++ C组 F 题、Python B组 E 题——近似GCD(AC)

目录1.近似GCD1.题目描述2.输入格式3.输出格式4.样例输入5.样例输出6.数据范围7.原题链接2.解题思路3.Ac_code1.C2.Python1.近似GCD 1.题目描述 小蓝有一个长度为 nnn 的数组 A(a1,a2,⋯,an)A\left(a_{1}, a_{2}, \cdots, a_{n}\right)A(a1​,a2​,⋯,an​), 数组的子数组被定…...

分享5款小众良心软件,好用到让人惊艳

目前win7渐渐退出视野&#xff0c;大部分人都开始使用win10了&#xff0c;笔者在日常的工作和使用中&#xff0c;为了能够让效率的大提升&#xff0c;下载了不少软件&#xff0c;以下的软件都是个人认为装机必备&#xff0c;而且都是可以免费下载&#xff0c;且没有插件的。 1…...

WAF是什么?一篇文章带你全面了解WAF

WAF是什么&#xff1f;一篇文章带你全面了解WAF 文章目录WAF是什么&#xff1f;一篇文章带你全面了解WAFWAF是什么&#xff1f;一、WAF的工作原理二、WAF的分类三、WAF的特点四、如何选择和部署WAFWAF是什么&#xff1f; Web应用程序防火墙&#xff08;Web Application Firewa…...

django项目实战八(django+bootstrap实现增删改查)进阶验证码

目录 一、安装第三方 1、pillow 2、第三方字体文件 二、实现生成验证码 1、创建code.py 2、url 3、修改auth.py 4、修改account.py 5、修改login.html 三、验证码校验 1、验证码写入到session 2、修改form下的LoginForm类新增code字段 3、修改login.html 4、修改acco…...

IP 协议

1.IP协议报头如下图:版本号 代表的是当前的IP协议的版本,此处的版本一共有两个取值:v4和v6.本文着重针对v4版本进行解析.首部长度 代表的是整个IP报头的长度,这个报头长度是可变长的,可变长的原因在于报头中的选项,这个属性是一个可有可无的属性,会改变报头长度,它的单位是32bi…...

好用的SQL工具盘点:从学习到工作总有一款适合你

标题一.入坑阶段&#xff08;学习入门&#xff09;&#xff1a; 这个阶段一般就是小白&#xff0c;想学习SQL语言&#xff0c;然后到处找软件&#xff0c;找免费破解版找半天&#xff0c;找到了半天安装不下来&#xff0c;还可能把自己电脑搞中毒。 其实对于小白来说&#xf…...

Memcache介绍

Memcache介绍 Memcache是一个分布式内存对象缓存系统&#xff0c;其功能是为应用程序提供快速和可伸缩的数据存储。memcache使用简单&#xff0c;定义了相对少数几种操作&#xff08;set&#xff0c;add&#xff0c;replace&#xff0c;get&#xff0c;flush_all等&#xff09…...

PTA:C课程设计(1)

山东大学&#xff08;威海&#xff09;2022级大一下C习题集&#xff08;1&#xff09;1-7-1 求幂级数展开的部分和1-7-2 查询水果价格1-7-3 猜数字游戏1-7-4 特殊a串数列求和1-7-5 成绩统计分析表1-7-6 换硬币1-7-7 验证“哥德巴赫猜想”1-7-1 求幂级数展开的部分和 #include&…...

第二十篇 ResNet——模型讲解

​ 摘要 ResNet(Residual Neural Network)由微软研究院的Kaiming He等四名华人提出,通过使用ResNet Unit成功训练出了152层的神经网络,并在ILSVRC2015比赛中取得冠军,在top5上的错误率为3.57%,同时参数量比VGGNet低,效果非常明显。 模型的创新点在于提出残差学习的思…...

LeetCode经典算法题:矩阵中省份数量经典题目+三角形最大周长java多种解法详解

LeetCode经典算法题&#xff1a;矩阵中省份数量经典题目三角形最大周长java多种解法 文章目录1 省份数量题目描述解题思路与代码解法一&#xff1a;深度优先解法二&#xff1a;广度优先解法三&#xff1a;并查集2 三角形的最大周长题目描述解题思路与代码贪心算法&#xff1a;1…...

Vue3通透教程【一】Vue3现状—必然趋势?

文章目录&#x1f31f; 专栏介绍&#x1f31f; Vue默认版本&#x1f31f; 拥抱Vue3的UI&#x1f31f; Vue3显著优势&#x1f31f; 小彩蛋&#x1f31f; 写在最后&#x1f31f; 专栏介绍 凉哥作为 Vue 的忠诚粉丝输出过大量的 Vue 文章&#xff0c;应粉丝要求开始更新 Vue3 的相…...

打破数据孤岛,Apache Doris 助力纵腾集团快速构建流批一体数仓架构|最佳实践

福建纵腾网络有限公司&#xff08;简称“纵腾集团”&#xff09;成立于 2009 年&#xff0c; 以“全球跨境电商基础设施服务商”为企业定位&#xff0c;聚焦跨境仓储与物流&#xff0c; 为全球跨境电商商户、出口贸易企业、出海品牌商提供海外仓储、商业专线物流、定制化物流等…...

什么是真正的骨传导耳机,骨传导耳机原理

骨传导耳机大多采用后挂耳/夹耳佩戴方式&#xff0c;但现在很多人分不清哪些是骨传导耳机&#xff0c;哪些是气传导耳机。看完这篇教会你辨别哪些是真正的骨传导耳机。 骨传导耳机采用固体传声方式&#xff0c;整个耳机机身都没有传声音孔的设计&#xff0c;主要通过耳机振子发…...

[MySQL]基本数据类型及表的基本操作

哈喽&#xff0c;大家好&#xff01;我是保护小周ღ&#xff0c;本期为大家带来的是 MySQL 数据库常用的数据类型&#xff0c;数据表的基本操作&#xff1a;创建、删除、修改表&#xff0c;针对修改表的结构进行了讲解&#xff0c;随后是如何向数据表中添加数据&#xff0c;浅浅…...

华为OD机试 - 好朋友(Python) | 机试题+算法思路+考点+代码解析 【2023】

好朋友 题目 在学校中 N个小朋友站成一队 第i个小朋友的身高为height[i] 第i个小朋友可以看到第一个比自己身高更高的小朋友j 那么j是i的好朋友 (要求:j > i) 请重新生成一个列表 对应位置的输出是每个小朋友的好朋友的位置 如果没有看到好朋友 请在该位置用0代替 小朋友…...

SAP ABAP用程序给用户增加SAP_ALL权限

给用户增加SAP_ALL的权限&#xff0c;报表可对basis与abap开发人员对用户权限管理的思路&#xff0c;谢绝用于其它用途&#xff0c;后果自负。 REPORT ZTESTCREATEUSER. data: l_USR04 LIKE USR04 , l_UST04 LIKE UST04 , l_PROFS LIKE USR04-PROFS , l_…...

stm32f407探索者开发板(二十)——独立看门狗实验

文章目录一、独立看门狗概述1.1 独立看门狗二、常用寄存器和库函数配置2.1 独立看门狗框图2.2 键值寄存器IWDG_KR2.3 预分频寄存器IWDG_PR2.4 重装载寄存器IWDG_RLR2.5 状态寄存器IWDG_SR2.6 IWDG独立看门狗操作库函数三、手写独立看门狗实验3.1 操作步骤3.2 iwdg.c3.3 iwdg.h3…...

C语言进阶(五)—— 多维数组

1. 一维数组 元素类型角度&#xff1a;数组是相同类型的变量的有序集合内存角度&#xff1a;连续的一大片内存空间在讨论多维数组之前&#xff0c;我们还需要学习很多关于一维数组的知识。首先让我们学习一个概念。1.1 数组名考虑下面这些声明&#xff1a;int a; int b[10];我们…...

06_MySQL多表查询

多表查询&#xff0c;也称为关联查询&#xff0c;指两个或更多个表一起完成查询操作。前提条件&#xff1a;这些一起查询的表之间是有关系的&#xff08;一对一、一对多&#xff09;&#xff0c;它们之间一定是有关联字段&#xff0c;这个关联字段可能建立了外键&#xff0c;也…...