HTK搭建大词汇量连续语音识别系统(三)

今天七夕节,祝大家七夕快乐!
但这与我这种秃头女程序猿又有什么瓜系.jpg,继续搭建模型。。

由于昨天关闭了电脑,今天打开cmd之后要先做运行VCVARS32和连接bin.win32两步,具体操作见第一个教程开头

十、绑定三音素

首先,制作一个脚本文件mktri.led,放在data/scripts文件夹中,内容为:

WB sp
WB sil
TC

!!!!记得最后要有一行换行
执行命令:

HLEd -n labels/triphones1 -i labels/wintry.mlf scripts/mktri.led labels/aligned.mlf

得到triphones1和wintry.mlf两个文件。
这里要对wintry.mlf用python代码处理,将路径修改为“*/XXXX”。代码如下:

a1=open("d:/data/labels/wintry.txt",'r+')
b=[]
str='S'
txt1=a1.readlines()
a1.close()
for lines in txt1:
    a=lines
    c=a
    if a.find(str)>=0:
        b=a.split('S',1)
        c='"*/S'+b[1]
    #print(c)
    a2=open("d:/data/labels/wintry_new.txt",'a')
    a2.write(c)
    a2.close()

再把wintry_new.txt修改为wintry.mlf即可。
执行命令:

perl scripts/maketrihed monophones0 labels/triphones1

在data文件夹中找到mktri.hed文件,并放入scripts文件夹中
执行命令:

HHEd -H hmms/hmm9/macros -H hmms/hmm9/hmmdefs -M hmms/hmm10 scripts/mktri.hed monophones0

似乎有warning,不过应该不重要
重估两次:

HERest  -A -D -T 1 -C configs/config -I labels/wintry.mlf -t 250.0 150.0 1000.0 -S scps/train.scp -H hmms/hmm10/macros -H hmms/hmm10/hmmdefs -M hmms/hmm11 labels/triphones1
HERest  -A -D -T 1 -C configs/config -I labels/wintry.mlf -t 250.0 150.0 1000.0 -s stats -S scps/train.scp -H hmms/hmm11/macros -H hmms/hmm11/hmmdefs -M hmms/hmm12 labels/triphones1

接着,使用脚本生成fullist和tielist文件
首先制作脚本文件global3.ded,内容如下:

RS cmu
MP sil sil sp
TC

!!!!记得最后要有一行换行
然后,在dict3的基础上制作新发音字典dict4。去掉了以下内容:

SILEN sil
SEND-END [] sil
SEND-START [] sil

执行如下命令:

HDMan -b sp -n lists/fullist -g global3.ded -l floag dict/dict4-tri dict/dict4

可能会有如下报错:

ERROR [+1452] ReadDictProns: word – out of order in dict dict/dict4
FATAL ERROR - Terminating program HDMan

把dict4里面的“-- sp”这一行换到“A”的上面就好了。之后在data/lists中生成fullist文件。
然后对fullist文件进行处理。用记事本打开fullist,在最后添加如下内容:

sil
ay
em
ow
ax

!!!!记得最后要有一行换行
接下来生成tree.hed文件
首先,在HTK samples文件夹中找到mkclscript.prl,将其复制到data/scripts文件夹中,再执行以下命令:

perl scripts/mkclscript.prl TB 350.0 monophones0>tree.hed

在data文件夹中找到生成的tree.hed,但这个文件还缺少一些内容,因为生成的tree.hed只有TB开头。
按照路径打开HTK\samples\RMHTK\libquests.hed文件,ctrl+a复制全部内容,粘贴在生成的tree.hed的前面,然后在开头、中间、结尾分别按如下形式添加:

(添加)RO 100 stats
(添加)TR 0
QS “R_NonBoundary” { + }
QS “R_Silence” { +sil }
QS “R_Stop” { +p,+pd,
+b,+t,+td,+d,+dd,+k,+kd,+g }
………………….
QS “L_y” { y-
}
QS “L_z” { z-* }
(添加)TR 2
TB 350.0 “ST_ax_2_” {(“ax”,"-ax+",“ax+","-ax”).state[2]}
TB 350.0 “ST_b_2_” {(“b”,"-b+",“b+","-b”).state[2]}
TB 350.0 “ST_r_2_” {(“r”,"-r+",“r+","-r”).state[2]}
……………………
TB 350.0 “ST_sil_4_” {(“sil”,"-sil+",“sil+","-sil”).state[4]}
TB 350.0 “ST_sp_4_” {(“sp”,"-sp+",“sp+","-sp”).state[4]}
(添加)TR 1
(添加)AU lists/fullist
(添加)CO lists/tiedlist
(添加)ST trees

新建hmms/hmm13,hmms/hmm14,hmms/hmm15,执行如下命令:

HHEd -H hmms/hmm12/macros -H hmms/hmm12/hmmdefs -M hmms/hmm13 tree.hed labels/triphones1>log

这时你会发现在lists文件夹中生成了tiedlist文件
然后重估两次:

HERest -C configs/config -I labels/wintry.mlf -t 250.0 150.0 1000.0 -S scps/train.scp -H hmms/hmm13/macros -H hmms/hmm13/hmmdefs -M hmms/hmm14 lists/tiedlist

知道你看到了很多WARNING,但不要怕,继续重估 。

HERest -C configs/config -I labels/wintry.mlf -t 250.0 150.0 1000.0 -S scps/train.scp -H hmms/hmm14/macros -H hmms/hmm14/hmmdefs -M hmms/hmm15 lists/tiedlist

仍然有很多WARNING,但没有关系,做到这里,我们就可以进行最后的评估步骤了。
————————————————————————————————————————————
分割线。重估的时候要用到新的配置文件,是在data/configs/config的基础上添加如下两行内容:

FORCECXTEXP = T
ALLOWXWRDEXP = F

得到新的配置文件config2
!!!!记得最后要有一行换行
最后,执行评估命令:

HVite -C configs/config2 -H hmms/hmm15/macros -H hmms/hmm15/hmmdefs -S scps/test.scp -l * -i results/recout_hmm15.mlf -w dict/wdnet -p 0.0 -s 5.0 dict/dict3 lists/tiedlist

然后耐心等待结果,这里用时大概1个小时。。。
来康康recout_hmm15.mlf长什么样子,这里还放了右图语音原句做对比。
在这里插入图片描述
很好!!句子识别成功!!
再来康康具体数据,使用如下命令:

HResults -I test/testwords.mlf lists/tiedlist results/recout_hmm15.mlf

在这里插入图片描述
可以看到优化效果还是蛮显著的,句正确率提升10.00%,词正确率提升15.59%,词准确率提升20.16%。
至此,用HTK搭建大词汇量连续语音识别系统系列教程结束~

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值