HTK下实现数字的语音识别的步骤.docx

上传人:b****8 文档编号:9098367 上传时间:2023-02-03 格式:DOCX 页数:40 大小:493.38KB
下载 相关 举报
HTK下实现数字的语音识别的步骤.docx_第1页
第1页 / 共40页
HTK下实现数字的语音识别的步骤.docx_第2页
第2页 / 共40页
HTK下实现数字的语音识别的步骤.docx_第3页
第3页 / 共40页
HTK下实现数字的语音识别的步骤.docx_第4页
第4页 / 共40页
HTK下实现数字的语音识别的步骤.docx_第5页
第5页 / 共40页
点击查看更多>>
下载资源
资源描述

HTK下实现数字的语音识别的步骤.docx

《HTK下实现数字的语音识别的步骤.docx》由会员分享,可在线阅读,更多相关《HTK下实现数字的语音识别的步骤.docx(40页珍藏版)》请在冰豆网上搜索。

HTK下实现数字的语音识别的步骤.docx

HTK下实现数字的语音识别的步骤

HTK下实现数字的语音识别

(1)

语音/小波/HTK2009-11-1315:

42:

45阅读169评论0  字号:

大中小 订阅

 本实验是利用HTK来搭建了一个数字语音识别系统,主要参考了苏统华的《应用HTK搭建语音拨号系统》,但是因为还是在实验中遇到了一些问题,所以希望能够把出现的问题拿出来,与大家分享。

    整个系统分为四大部分,共有11步组成:

    

(一)数据准备

        step1:

theTaskGrammar

       step2:

theDictionary

       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重估两次。

HERest-C.\config\config1-I.\labels\wintri.mlf-t250.0150.01000.0-Strain.scp

-H.\hmms\hmm13\macros-H.\hmms\hmm13\hmmdefs-M.\hmms\hmm14.\lists\tiedlist

 

 

      

(二)创建单音素的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重估两次。

HERest-C.\config\config1-I.\labels\wintri.mlf-t250.0150.01000.0-Strain.scp

-H.\hmms\hmm13\macros-H.\hmms\hmm13\hmmdefs-M.\hmms\hmm14.\lists\tiedlist

 

 

HTK下实现数字的语音识别

(2)

语音/小波/HTK2009-11-1315:

44:

49阅读187评论2  字号:

大中小 订阅

 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

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 幼儿教育 > 家庭教育

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1