语音识别之HTK入门(二)

步骤四:准备语音素材

在拨号系统中,可以通过HSGen自动生成合法的拨号句子文本。然后根据这些文本来录制对应的音频文件。HTK的HSLab工具可以完成录音功能。这两个方面都不是语音识别的学习重点,现在就假设我已经有了音频文件,以及标注好的对应文本。

首先,需要对文本进行处理。比如,原先的文本就是一句话,现在要改写成词级的Master Label File (MLF)格式,然后再改写成音子级别的。那么什么是MLF格式呢?百度了下“Master Label File”,并没有结果。看了下《HTK BOOK》的第三章大体了解MLF文件的结构就可以了。不在这儿纠缠。

原先我的transcript是这样的:

S0001 DIAL EIGHT FIVE 
S0002 DIAL ZERO ZERO EIGHT SIX OH ONE ZERO NINE THREE FIVE EIGHT FIVE THREE THREE NINE ZERO 
S0003 DIAL ZERO SIX ZERO EIGHT THREE ZERO EIGHT SEVEN SEVEN THREE FIVE ONE TWO TWO FOUR NINE SIX 
S0004 CALL DAVE WOOD 
S0005 CALL STEVE YOUNG 
S0006 DIAL NINE OH THREE NINE ONE ZERO ONE NINE NINE OH THREE THREE FOUR TWO FOUR SEVEN FOUR ZERO ZERO SIX ONE ZERO ONE FOUR ZERO NINE TWO 
S0007 DIAL NINE FOUR TWO NINE OH 
S0008 DIAL SEVEN EIGHT SIX ONE EIGHT ZERO NINE ZERO SIX SIX SIX ONE ONE THREE 
S0009 PHONE DAVE WOOD 
S0010 CALL TYLER 

现在要把它改写成词级MLF文件。

#!MLF!#
"*/S0001.lab"
DIAL
EIGHT
FIVE
.
"*/S0002.lab"
DIAL
ZERO
ZERO
EIGHT
SIX
OH
ONE
ZERO
NINE
THREE
FIVE
EIGHT
FIVE
THREE
THREE
NINE
ZERO
.
"*/S0003.lab"
DIAL
ZERO
SIX
ZERO
EIGHT
THREE
ZERO
EIGHT
SEVEN
SEVEN
THREE
FIVE
ONE
TWO
TWO
FOUR
NINE
SIX
.
"*/S0004.lab"
CALL
DAVE
WOOD
.
"*/S0005.lab"
CALL
STEVE
YOUNG
.

第一行标记该文件是MLF格式的,然后是对应的路径名,接着是每行一个单词。这个文件可以包含所有录音的标注文本,后面对应到每个音频文件,进行模型训练。通过HLEd命令将词级的MLF标注文件转写为音素级的MLF文件。

HLEd -l * -d dict -i phones0.mlf mkphones0.led trainwords.mlf
#!MLF!#
"*/S0001.lab"
sil
d
ay
ax
l
ey
t
f
ay
v
sil
.
"*/S0002.lab"
sil
d
ay
ax
l
z
ia
r
ow
z
ia
r
ow
ey
t
s
ih
k
s
ow
w
ah
n
z
ia
r
ow
n
ay
n
th
r
iy
f
ay
v
ey
t
f
ay
v
th
r
iy
th
r
iy
n
ay
n
z
ia
r
ow
sil
.

格式与词级的一样,就是每一行的内容变成音素或者说音子(phone)。同时,每个句子的开头和结尾多了sil的静音模型。

到这里文本部分已经基本准备完毕了。前面已经假设过对每一个文本对应有录音文件,现在需要对音频文件进行预处理,为后面的模型训练做准备。需要用到HCopy工具,它主要功能就是把音频信号转换成MFCC特征向量序列数据,根据配置脚本的参数设置来提取特征,并写入对应的文件中。

配置文件格式如下:      

 # Coding parameters

       TARGETKIND = MFCC_0
       TARGETRATE = 100000.0
       SAVECOMPRESSED = T
       SAVEWITHCRC = T
       WINDOWSIZE = 250000.0
       USEHAMMING = T
       PREEMCOEF = 0.97
       NUMCHANS = 26
       CEPLIFTER = 22
       NUMCEPS = 12
       ENORMALISE = F

其中有些设置是默认设置,为了完整性,这里都全部列出了。简要解释一下,此配置文件指定了目标参数是使用C0作为能量维的MFCC,帧长是10ms(HTK使用的单位是100ns),输出格式要经过压缩,并且加入了CRC校验。FFT之前需要经过加Hamming窗的处理,并且语音信号首先要经过预加重,预加重系数为0.97。filterbank使用26个三角滤波器,计算出每一帧的能量谱后,进行DCT(离散余弦变换),取前13个系数,最后用每一帧的总能量值取代第一个系数,最终得到13维的行向量,就是原始的MFCC系数。变量ENORMALISE默认值为true,表示对录音数据文件进行能量规一。在线识别中不能使用这种方法。如果要做的系统是在线的,则这个变量被设成false。MFCC的参数如何得到,看这篇博客,讲的比较清楚,了解个大概也是有好处的。在配置参数TARGETKIND中D表示Delta、A表示acceleration都是根据原始MFCC计算相关的。

	HCopy -T 1 -C config -S codetr.scp

上述命令完成音频数据到特征数据的转换,其中codetr.scp文件是一个对应关系,一边是音频文件,一边是它对应生成的mfc文件,形式如下图所示。

.\data\train\speech\S0001		.\data\train\feature\S0001.mfc
.\data\train\speech\S0002		.\data\train\feature\S0002.mfc
.\data\train\speech\S0003		.\data\train\feature\S0003.mfc
.\data\train\speech\S0004		.\data\train\feature\S0004.mfc
.\data\train\speech\S0005		.\data\train\feature\S0005.mfc
.\data\train\speech\S0006		.\data\train\feature\S0006.mfc
.\data\train\speech\S0007		.\data\train\feature\S0007.mfc

现在有了mfc文件,已经它对应的mlf文件,完成了文本和音频数据的预处理。下面进入语音识别的核心部分,声学建模。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值