放假之前,就已经对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