基于HTK的连续语音识别系统搭建学习笔记(一)

放假之前,就已经对HTK上完成连续语音识别的实验充满兴趣。于是找了很多资料,准备在放假的时候好好学习,仔细琢磨,HTK博大精深,光学习和完成孤立词识别肯定是不够。从今天开始,开始同步学习和记录基于HTK的连续语音识别系统搭建工作,这一学习笔记主要记录学习过程,具体自己的实践后面会继续,本次学习的参考资料主要以:苏统华的《应用HTK搭建语音拨号系统》为主,同时,使用HTK BOOK作为参考进行相关知识点的查阅。


言归正传:


该系统能够识别连续说出的数字串和若干组姓名。建模是针对子词(sub-word, eg. 音素),具有一定的可扩充性。当加入一个新名字时,只需修改发音字典和任务语法即可。模型为连续混合高斯输出,运用语音决策树聚类形成的绑定状态式三音素。


1.数据准备

需要录制训练数据和测试数据。为进行校准,还需要数据的标注文本。这里用任务语法(task grammar)产生真值文本(ground truth)。为了处理训练数据,需要定义一个语音集合和一个字典用以涵盖训练和测试数据中涉及的单词。

[step 1]任务语法定义

创建文件:gram

创建位置:根目录下

文件内容:


上面的语法是高层表示,必须通过HParse转成HTK可用的底层表示。

运行:

HParse gram wdnet

生成:wdnet

生成位置:根目录

生成内容:


[step 2]字典定义

创建文件夹:dict lists

创建文件:BEEP语音字典(网上可以下载)beep beep.ded(空) names(手工制作的专有人名的发音,包括SEND-START,SEND-END) name.ded

放入位置:dict

创建文件:global.ded

创建位置:根目录下

文件内容:


此例中利用BEEP语音字典,除去其中的重音符,并在每个发音后加入sp(short pause,小停顿)。如果有哑音标志,就用MP命令把sil和sp合并成sil。

创建文件:wlist

创建位置:lists

创建内容:


执行:

HDMan -m -w .\lists\wlist -g global.ded -n .\lists\monophones1 -l dlog .\dict\dict1 .\dict\beep .\dict\names

生成文件:monophones1 (用于用到的音素列表)

生成位置:lists 

生成文件:dlog(参数文件记录过程)

生成位置:根目录

生成文件:dict1

生成位置:dict

注1 :实际上,这里应该手工修改 dict1 ,为SENT-END 和SENT-START 加上无输出标志,
为了展示队后面步骤地影响,这里故意不添加。


注:HDMan工具的具体详细解释以及使用可以参看HTK BOOK P262 

[step 3]录制语音数据

创建文件夹:labels

HSGen工具可以生成符合task grammar的句子,用来指导录音(HTK BOOK里叫sentence prompts):

执行:

HSGen -l -n 140 wdnet.\dict\dict1>.\labels\trainprompts

执行:

HSGen -l -n 15 wdnet .\dict\dict1>.\labels\testprompts

根据上述指令文件,录制相应的140个训练用语音数据文件和15个测试用语音数据文件。

生成文件:trainprompts testprompts

一个录制的例子如下: 
HSLab .\data\Train\speech\S0001 

注:随本文的压缩包没有包括这些数据文件,但包括了它们对应的特征文件,所以对整个实验没有什么影响。

[step 4]标注数据,得到真值文件

创建文件夹:scripts labels 

创建文件:prompts2mlf(HTK scripts目录下自带)

创建位置:scripts

Perl脚本prompts2mlf(在scripts目录下HTK自带)可以把录音文本截成单词级真值文件。

执行:

perl .\scripts\prompts2mlf.\labels\trainwords.mlf .\labels\trainprompts

perl .\scripts\prompts2mlf.\labels\testwords.mlf .\labels\testprompts

注:要在每个lab路径之前加上“*/”

生成文件:trainwords.mlf testwords.mlf

生成位置:labels

标注编辑器HLEd可把单词级真值文本(wordlevel MLF)转成音素级真值文本(phonelevel MLF):

创建文件:mkphones0.led

创建位置:根目录

创建内容:


EX命令表示按照字典dict1进行展开,IS表示在每个话语的前后插入标志,DE一行表示phones0.mlf中单词间不用sp隔开。

执行:

HLEd -l * -d .\dict\dict1 -i .\labels\phones0.mlf mkphones0.led .\labels\trainwords.mlf

生成文件:phones0.mlf

生成位置:labels

注:HLEd工具的详细讲解可以参考HTK BOOK P284






  • 4
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
您好!对于基于HTK或Kaldi框架完成语音识别、说话人识别或语音合成的训练及测试,我可以为您提供一些基本的指导。 1. 语音识别: - 使用HTKHTK是一个经典的HMM工具包,用于语音识别任务。您可以使用HTK进行语音特征提取、建立HMM模型、进行训练和识别。它提供了一些工具和脚本来处理数据和配置模型。您可以通过学习HTK的文档和示例来了解具体的步骤和操作。 - 使用Kaldi:Kaldi是一个开源的语音识别工具包,提供了一套丰富的工具和库,以及一系列的示例和文档。您可以使用Kaldi进行声学特征提取、建立DNN-HMM模型、进行训练和识别。Kaldi还支持更先进的技术,如深度学习和神经网络。 2. 说话人识别: - 使用HTKHTK也可以用于说话人识别任务。通常,说话人识别需要建立说话人特定的模型,并使用特征向量来训练这些模型。HTK提供了一些工具和功能来处理说话人特征和模型。 - 使用Kaldi:Kaldi也支持说话人识别任务。您可以使用Kaldi来提取说话人特征,建立说话人模型,并进行训练和识别。Kaldi提供了一些示例和工具来帮助您完成这些任务。 3. 语音合成: - 使用HTKHTK通常用于语音识别和说话人识别,而不是语音合成。如果您想要进行语音合成任务,可以考虑其他工具或库,如Festival或Merlin。 - 使用Kaldi:Kaldi本身不提供语音合成的功能。但是,您可以使用其他开源的语音合成工具,如Tacotron、WaveNet或DeepVoice等,并结合Kaldi进行声学特征提取、建立模型和后期处理。 请注意,以上只是基于HTK和Kaldi框架的一些基本指导。实际上,这些任务非常复杂且需要深入的专业知识和经验。如果您是初学者,建议您先学习相关的语音信号处理和机器学习知识,并阅读相关的文献和教程。祝您成功完成您的项目!如果您有更多问题,我会尽力回答。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值