构筑了HCLG音频图后,音频是在那个图上找寻两条最优化方向。最优化方向上除去epsilon后的输出条码字符串是单字等级的辨识结论。第三集主要就导出kaldi源代码同时实现。

音频

decode.sh

自动草稿

源代码导出:

自动草稿

操作过程:

自动草稿

Viterbi动态音频

机能:采用如前所述GMM的数学模型对特点展开音频。选用迪克比演算法展开音频,仅造成非线性字符串。造成的任何人lattice都是非线性的,即多于两个音频结论。输出:GMM电学数学模型、HCLG.fst音频图、试验音频电学特点输出:音频结论(词字符串、翻转字符串、lattice)

操作过程之道:

自动草稿

1)音频第三格时,从状况结点0起程,具体来说展开ProcessEmitting处置的升空状况迁移弧,结点0迁移到结点3、2、6。接著ProcessNonemitting沿著实线非升空迁移弧将6散播到同两个关键时刻下的状况结点1。

2)音频第三帧时具体来说转换Token条目,把cur_toks条目变革到pre_toks条目后,将cur_toks置空。接著再展开ProcessEmitting、ProcessNonemitting。

3)随著天数的流逝,帧地展开,抵达最终一格,优先选择最高总计付出的Token,接著因以Token追述最优化方向。

kaldi的gmm-decode-simple同时实现了那个操作过程。

自动草稿

函数解析:

1)decoder.Decode(&gmm_decodable)

解码过程:

Kaldi的音频搜寻(源代码导出) 

Kaldi的音频搜寻(源代码导出) 

Kaldi的音频搜寻(源代码导出) 

● DecodableAmDiagGmmScaled gmm_decodable()

根据声学模型,计算出某一帧的声学分数。声学得分是通过高斯混合概率密度函数计算得到的。

● GetBestPasth()

根据最后一个token进行回溯,得到解码结果。

把结果放到这个词格中,词格中是单一路径。

● GetLinearSymbolSequence(decoded,NULL,&words,NULL)

从线性词格中取出结果,写入到words中。words中是word ID,要根据词典把id真正转化为单词序列,得到最后的结果。

Lattice静态解码

gmm-latgen-faster功能:

解码识别:基于GMM模型生成lattices网格,保留N-best路径。(不能保证viterbi给的最优路径就是真正的对的路径)

源码解析:

Kaldi的音频搜寻(源代码导出) 

Kaldi的音频搜寻(源代码导出) 

过程:

lattice生成的解码结果并非单一路径,而是N-best路径。

在每次令牌传递过程中,lattice也像viterbi解码那样删除旧令牌的方法来生成,而是通过独特的ForwardLink前向链接机制来生成lattice。

前向链接ForwardList与转移弧不同,用来链接前后两帧之间的发射转移弧之间的Token,或同一时刻非发射转移弧之间的Token。

基于WFST的Lattice静态解码过程:

Kaldi的音频搜寻(源代码导出) 

kaldi中的gmm-latgen-faster实现了lattice解码。

Kaldi的音频搜寻(源代码导出) 

函数解析:

Kaldi的音频搜寻(源代码导出) 

其中解码、回溯部分、写入文件部分也包含在这个函数内。

decoder.Decode(&decodable)进行解码。

Kaldi的音频搜寻(源代码导出) 

Kaldi的音频搜寻(源代码导出) 

令牌传递:

LatticeDecode并不是向viterbi解码那样传递令牌本身,而是在创建新令牌后,使用一个前向链接把令牌链接起来。

Kaldi的音频搜寻(源代码导出) 

诊断评分

Kaldi的音频搜寻(源代码导出) 

Kaldi的音频搜寻(源代码导出) 

最后从所有错误率中找到最低的那个错误率。

Kaldi的音频搜寻(源代码导出) 

Kaldi的YesNo实例解码识别错误率0%。

其中 N 是 num总数,C 是 corr 准确数,S 是 sub 替换错误,D 是 Del 是删除错误,I 是 INS 插入错误。

解码结果

Kaldi的音频搜寻(源代码导出)
1.本站所有资源来源于用户上传和网络,如有侵权请邮件联系站长!
2.分享目的仅供大家学习和交流,您必须在下载后24小时内删除!
3.不得使用于非法商业用途,不得违反国家法律。否则后果自负!
4.本站提供的源码、模板、插件等其他资源,都不包含技术服务请大家谅解!
5.如有链接无法下载或失效,请联系管理员处理!
6.本站资源售价只是赞助,收取费用仅维持本站的日常运营所需!