HTK下实现数字的语音识别的步骤Word文档格式.docx
《HTK下实现数字的语音识别的步骤Word文档格式.docx》由会员分享,可在线阅读,更多相关《HTK下实现数字的语音识别的步骤Word文档格式.docx(40页珍藏版)》请在冰豆网上搜索。
step3:
RecordingtheData
step4:
CreatingtheTranscriptionFiles
step5:
CodingtheData
(二)
建立单声道的HMM模型
step6:
CreatingFlatStartMonophone
step7:
FixingtheSilenceModels
step8:
RealigningtheTrainingData
(三)创建绑定状态的三音素HMM模型
step9:
MakingTriphonesfromMonophones
step10:
MakingTied-StateTriphones
(四)识别器的评估
step11:
RecognisingtheTestData
下面我们将分步骤对整个系统进行分析:
需要录制训练数据和测试数据。
为进行校准,还需要数据的标注文本。
这里用任务语法(taskgrammar)产生真值文本(groundtruth)。
为了处理训练数据,需要定义一个语音集合和一个字典用以涵盖训练和测试数据中涉及的单词。
step1thetaskgrammar
任务语法以包含变量的正则表达式形式定义,存储在文件gram里:
上面的语法是高层表示,必须通过HParse转换成HTK的底层表示如图:
底层表示存于文件wdnet中:
HParsegramwdnet中:
step2theDictionary
利用BEEP语音词典,除去其中的重音符,并在每个发音后加入sp(shortpause).如果有哑音标志,就用MP命令把sil和sp合并成sil.这些处理命令放在global.ded的脚本中。
执行HDMan生成与任务相关的发音词典dict1:
HDMan-m-w.\lists\wlist-n.\lists\monophones1-ldlog.\dict\dict1.\dict\beep.\dict\names
上面的names文件是手工制作的专有人名的发音(包括SEND-START,SEND-END),文件wlist是出现在任务语法中的所有单词的有序列表,文件monophones1是用到的音素的列表,dlog为参数文件。
这里应该手工修改dict1,为SENT-END和SENT-START加上无输出标志:
为了避免在dlog里出现烦人的wanning,那就在names和beep同一目录下分别建立同名的编辑脚本,内容为空即可。
step3recordingthedata
HSGen工具可以生成符合taskgrammar的句子,用来指导录音(HTKbook里叫sentence
prompts):
HSGen-l-n140wdnet.\dict\dict1>
.\labels\trainprompts
HSGen-l-n15wdnet.\dict\dict1>
.\labels\testprompts
根据上述指令文件,录制相应的140个训练用语音数据文件和15个测试用语音数据文
件。
一个录制的例子如下:
HSLab.\data\Train\speech\S0001
step4creatingthetranscriptionfiles
Perl脚本prompts2mlf可以把录音文本截成单词级真值文件。
例如:
perl.\scripts\prompts2mlf.\labels\trainwords.mlf.\labels\trainprompts
perl.\scripts\prompts2mlf.\labels\testwords.mlf.\labels\testprompts
标注编辑器HLEd可把单词级真值文本(wordlevelMLF)转成音素级真值文本(phonelevelMLF):
HLEd-l*-d.\dict\dict1-i.\labels\phones0.mlfmkphones0.led.\labels\trainwords.mlf
编辑脚本mkphones0.led的内容如下:
EX命令表示按照字典dict1进行展开,IS表示在每个话语的前后插入标志,DE一行表示phones0.mlf中单词间不用sp隔开。
step5codingthedata
这里所用特征为MFCC。
工具HCopy可以实现提取特征的工作。
HCopy-T1-C.\config\config1-Scodetr.scp
其中,配置文件config1要设置转换参数,另一脚本文件(scriptfile)codetr.scp指定训练及输入和输出文件列表。
执行结果,HCopy对codetr.scp文件左侧的语音数据按config的配置提取特征并存入codetr.scp文件右侧特征文件中。
训练文件就会存于train.scp中。
(二)创建单音素的HMM模型
step6creatingflatstartmonophone
HCompV:
统计训练数据的均值和方差
HERest:
对HMM模型进行训练
(1)HCompV-T1-Cconfig/config1-f0.01-m-Strain.scp-Mhmm0Proto/proto…………..产生proto。
HCompV-T1-Cconfig/config1-f0.01-m-Strain.scp-Mhmm0Proto/sil……………….产生sil。
(2)HERest-Cconfig/config1-I
/labels/phone0.mlf-t250.0150.01000.0–Strain.scp-Hhmms/hmm0/macros-Hhmms/hmm0/hmmdefs-Mhmms/hmm1/lists/monophones0
…hmm0->
hmm1->
hmm2->
hmm3。
proto:
step7fixingthesilencemodels
HHED:
升mixture
HERest:
训练HMM模型
(1)HHEd-T1-Hhmms/hmm4/macros–H
hmms/hmm4/hmmdefs-Mhmms/hmm5sil.hed
/lists/monophone
………用一个mixture逼近。
(2)HERest-Cconfig/config1-I
/labels/phone1.mlf-t250.0150.01000.0–Strain.scp-Hhmms/hmm5/macros-Hhmms/hmm5/hmmdefs-Mhmms/hmm6/lists/monophones1
…hmm5->
hmm6->
hmm7
step8realigningthetrainingdata
确认trainwords.mlf中的路径为”*/S0?
?
.lab”,修改dict2加入silencesil一项,另存为dict3,执行HVite进行Viterbi校准:
HVite-l*-oSWT-bsilence-C.\config\config1-a-H.\hmms\hmm7\macros-H.\hmms\hmm7\hmmdefs-i.\labels\aligned.mlf-m-t350.0-ylab-I.\labels\trainwords.mlf-Strain.scp.\dict\dict3.\lists\monophones1
重估两次,识别率会比以前有很大的提高,但是再继续重估两次,识别结果不会再提高,所以之后就要通过绑定状态的三音素模型来进一步提高效果。
(三)创建绑定状态的三音素HMM模型
step9makingtriphonesfrommonophones
上下文依赖三音素模型可以用单音素作为初始,再进行重估。
由于重估时要三音素级标注文本,就先生成标注文本。
HLEd-n.\lists\triphones1-l*-i.\labels\wintri.mlfmktri.led.\labels\aligned.mlf
编辑脚本mktri.led包括如下命令:
其中文件wintri.mlf是由单音素标注文本文件aligned.mlf转换成的等价三音素标注文本。
一个三音素的列表保存到了triphones1
forexample:
silthihsspmaensp....
becomes
silth+ihth-ih+sin-sspm+aem-ae+nae-nsp...
definespandsilaswordboundarysymbols.
下面利用HMM编辑器初始化三音素模型。
所用命令为:
HHEd-H.\hmms\hmm9\macros-H.\hmms\hmm9\hmmdefs-M.\hmms\hmm10
mktri.hed.\lists\monophones1
其中的mktri.hed文件由perl脚本生成:
perl.\scripts\maketrihed.\lists\monophones1.\lists\triphones1
修改mktri.hed文件,把第一行的.\lists\triphones1改成./lists/triphones1
然后用HERest进行重估两次:
HERest-C.\config\config1-I.\labels\wintri.mlf-t250.0150.01000.0-Strain.scp
-H.\hmms\hmm10\macros-H.\hmms\hmm10\hmmdefs-M.\hmms\hmm11.\lists\triphones1
step10makingtied-statetriphones
资料不够多的变量去使用:
a.无法估计变量
b.增加复杂度跟容量的空间
联系状态的变量使用量
a.3*(39+39)*Nbeforetying
b.-3*(39+39)aftertying
一个条件是否满足可以区分出两个类别,n个条件可区分成2n个类别。
我们可根据一序列“条件是否满足的问句”来做分类.
建构完善的决策树:
先找出可以做最大区分的相邻音条件作为根节点问题,对每个问句试作分类,将可分成最为内聚的两类之问句挑出作为此节点的问句。
利用问句(QScommand)列出所有可能的条件,再从中挑选出较具区别力的条件来做分类依据,形成所谓的决策树。
在上一步估计模型时,因数据不足导致很多分布的方差只好用截至方差vFloors。
这一步就是通过绑定状态来共享数据,使输出分布更加的稳健。
HHEd提供两种聚类状态的机制,这里采用的是决策树:
HHEd-H.\hmms\hmm12\macros-H.\hmms\hmm12\hmmdefs-M.\hmms\hmm13
tree.hed.\lists\triphones1>
log
上面的tree.hed用perl脚本mkclscript.prl(.\scripts\目录下)生成:
perlmkclscript.prlTB350.0.\lists\monophones1>
tree.hed
然后用HERest重估两次。
-H.\hmms\hmm13\macros-H.\hmms\hmm13\hmmdefs-M.\hmms\hmm14.\lists\tiedlist
HTK下实现数字的语音识别
(2)
44:
49阅读187评论2
step3recordingthedata
训练文件就会存于train.scp