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

接下来采用三音素模型进行改进。

一、绑定三音素

首先,制作一个脚本文件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:\HTK\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:\HTK\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

重估两次:

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

可能会有报错。
**把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
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

接下来就可以做评估了。
重估的时候要用到新的配置文件,是在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

耐心等待结果。结果存放在recout_hmm15.mlf中。
左图为识别结果,右图为语音原句。
在这里插入图片描述
使用如下命令来查看识别率:

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

在这里插入图片描述
可以看到采用三音素优化,效果还是蛮明显的。
接下来搭建语言模型进行改进。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值