TIP26:HTK搭建音频分类系统的一般步骤? - Pohai‘s Here - 博客大巴

来源:百度文库 编辑:神马文学网 时间:2024/05/28 05:25:08

  用HTK搭音频分类系统是个比较简单的工作,推荐用perl写程序主体,调用HTK函数来完成。语音识别系统的搭建过程与此类似,可以自行修改,具体细节推荐参看《htkbook》和《htk_basic_tutorial》,前者讲得很仔细,后者条理很清晰,训练到识别的过程一目了然。

     1、特征提取
     HCopy -A -D -T 1 -C hcopy.cfg -S train.scp
     其中hcopy.cfg是hcopy的配置文件,train.scp给出音频所在的路径和特征存储路径。

     2、模型初始化
     a)按htk的模型格式写一个初始模型proto,可以用htkDemo中的mkProto,但需要设置配置文件。
     b)初始化
     HCompV -A -D -T 1 -C htk.cfg -S trainlist -f 0.01 -m -M hmm0 proto
     htk.cfg为配置文件,trainlist给出所有特征文件所在路径,-M 后接初始化后模型路径,最后为初始化前模型完整路径。
    c)模型分化
     system("flatstart proto hmmLst >> hmmdefs")
     把proto改名成hmmLst里的model名称复制到hmmdefs中去,这样proto就成为了每一种model的原型。这里要注意在~h "proto"前面必须要有三行才能正常执行,hcompv后的proto才符合要求,直接mkProto出来的proto不符合。

     3、参数重估
     a)mixture分裂
     HHEd -H hmmdefs mixHed  hmmLst  #按照mixHed里的设置分裂hmmLst所列的模型
     HERest -C htkCfg -I trainMlf -t 0 150.0 1000.0 -S trainLst  -H hmmdefs hmmLst 
     #重估参数,trainMlf里是对每个特征文件的标注,trainLst同上
     一般这样的分裂不是一次到位的,从1个分2个,2个分4个,大于8后,每次增加的个数是原有mixture的一半。用HHEd分裂一次后,需要用HERest重估3-4次。
     b)迭代重估
     这一步一般在ubm中才会用到,因为它是先对proto分裂,再flatstart分化模型,最后用迭代重估自适应到不同的模型。
     HERest -C htkCfg -I trainMlf -t 0 150.0 1000.0 -S trainLst  -H hmmdefs -M curDir hmmLst 
     -M选项给出的是新模型存放的路径,若缺省,则在原位置更新原模型。

     4、识别
     1)提取特征,同上
     2)生成wdnet文件
     hparse-A -D -T 1 gram wdnet  #根据gram得到wdnet
     3)解码
     HVite -A -C htkCfg -H hmmdefs -w wdnet -l ‘*‘ -i recgMlf -S recgLst -p 0.0 -s 5.0 -o NT dict hmmLst

     5、结果统计
     HResults -I refMlf  hmmLst recgMlf
     其中-I为正确的标注。

     这就是用htk搭建一个音频分类系统最简单最本质的流程,但如果要达到很好的效果,还是需要做一些改良的。