WinHTK开发与使用二:孤立词识别
来源:互联网 发布:网络电视有什么功能 编辑:程序博客网 时间:2024/06/15 07:06
图1 基于WinHTK语音识别系统设计过程
一、孤立词识别
本设计的内容是介绍一个识别0到9共十个数字的孤立词识别系统的过程,采用整词模型。尽管任务比较简单,但足以说明一般的孤立词识别系统设计过程,演示视频文件在上传的资源中可以下载(不好意思不知道怎么提供链接,直接去找就是了)。
1、数据准备
(1) 任务语法描述。由于是孤立词系统,语法描述非常简单。相应的语法约束文件gram内容如下:
(hmm0|hmm1|hmm2|hmm3|hmm4|hmm5|hmm6|hmm7|hmm8|hmm9)
每一个hmm*代表一个数字。利用HParse工具转换成SLF文件network.slf。对于图形如图2所示。
图2 语法约束对应的FSN示意图
(2) 词典准备。由于采用整词模型,词典也比较简单,对应的词典文件dict文件如下:
hmm0 hmm0
hmm1 hmm1
hmm2 hmm2
hmm3 hmm3
hmm4 hmm4
hmm5 hmm5
hmm6 hmm6
hmm7 hmm7
hmm8 hmm8
hmm9 hmm9
另外还需要准备一个转换词典translate,这个文件内容的作用是将模型名转换成需要输出的符号,其内容如下:
hmm0 0
hmm1 1
hmm2 2
hmm3 3
hmm4 4
hmm5 5
hmm6 6
hmm7 7
hmm8 8
hmm9 9
(3) 语音录制。由于任务中需要训练10个数字的HMM,因此需要分别录制语音文件。在本设计中对每个数字录制了5个语音文件,一共50个语音文件。采样速率为11.025KHz,单通道16位采样。另外准备10个测试语音文件,分别对应10个数字,用于检测识别系统效果。由于采用孤立词训练方式,故不需要对语音文件进行标注。
(4) 编码数据。编码方案:加汉明窗,窗长20ms,10ms帧移。采用12阶MFCC系数,能量系数,一阶和二阶动态参数,共39个系数。由于需要进行端点检测,需要设置一些端点检测参数。编码参数文件内容如下:
SOURCEFORMAT=WAV
TARGETFORMAT=HTK
SOURCEKIND=WAVEFORM
TARGETKIND=MFCC_E_D_A
NUMCEPS=12
NUMCHANS=20
CEPLIFTER=22
USEHAMMING=T
PREEMCOEF=0.95
SOURCERATE=907
TARGETRATE=100000
WINDOWSIZE=200000
USESILDET=T
SPEECHTHRESH=0.8
SILENERGY=0.0
SPCSEQCOUNT=10
SILSEQCOUNT=10
SILMARGIN=1
SPCGLCHCOUNT=8
SILGLCHCOUNT=8
端点检测是一个两阶段检测过程,首先将语音帧进行划分,根据语音门限和静音门限分别划分为静音帧和语音帧;然后进行下一步检测,检测连续SPCSEQCOUNT个语音帧,若语音帧数目超过SPCGLCHCOUNT则划分为语音,否则划分为静音。
2、模型训练
(1) 初始化HMM。为每一个数字定义HMM拓扑。一则为简单化所有模型定义,二则实际上十个数字语音构成基本相似,故在这里采用相同拓扑(实际也可以不同)。定义的HMM拓扑如图6.3所示,相应的HMM定义文件内容如下:
~o <VecSize> 39 <MFCC_E_D_A>
~h "hmm"
<BeginHMM>
<NumStates> 7
<State> 2
<Mean> 39
0.0 0.0 0.0 0.0 … 0.0 0.0 0.0
<Variance> 39
0.0 0.0 0.0 0.0 … 0.0 0.0 0.0
… … … …
<State> 6
<Mean> 39
0.0 0.0 0.0 0.0 … 0.0 0.0 0.0
<Variance> 39
0.0 0.0 0.0 0.0 … 0.0 0.0 0.0
<TransP> 7
0.0 0.6 0.4 0.0 0.0 0.0 0.0
0.0 0.2 0.4 0.4 0.0 0.0 0.0
0.0 0.0 0.6 0.4 0.0 0.0 0.0
0.0 0.0 0.0 0.4 0.6 0.0 0.0
0.0 0.0 0.0 0.0 0.4 0.4 0.2
0.0 0.0 0.0 0.0 0.0 0.4 0.6
0.0 0.0 0.0 0.0 0.0 0.0 0.0
<EndHMM>
图3 HMM拓扑示意图
然后利用HInit工具对各个模型进行初始参数估计,其调用形式如下:
HInit -A -T 0001 -H allhmm -S train*.scp -o hmm* -M newhmm hmm*
其中需要依次对十个数字相应模型进行估计。
(2) 重估HMM。前面仅仅利用HInit设置模型参数初始值,需要利用HRest工具进行模型的进一步重估。HRest工具调用形式如下:
HRest -A -T 0001 -H trainhmm -S train*.scp -M rehmm hmm*
也需要对十个数字模型分别进行。最后获得各个数字相应的模型hmm*,将这些模型保存到一个文件readymodel HMM定义文件中。并建立列表文件hmm.lst,列出其中的模型。
3、识别测试
下面利用已经训练好模型进行测试,HVite工具调用形式如下:
HVite -A -T 001 -i rec.mlf -w network.slf -S test.lst -H readymodel dict hmm.lst
识别输出MLF文件rec.mlf。其中network.slf为语法约束对应的FSN,test.lst列出测试文件,readymodel中保存了训练好的十个数字模型参数,dict为词典文件,hmm.lst为HMM列表文件。
4、识别结果
最后,利用HResults工具进行识别效果分析,其调用形式如下:
HResults -A -T 001 -I trans hmm.lst rec.mlf
其中trans为参考标注,也即正确的标注,rec.mlf为识别输出标注,hmm.lst为HMM列表文件。分析结果如下:
====================== HTK Results Analysis =======================
Date: Fri Jun 05 10:07:47 2009
Ref : trans
Rec : rec.mlf
------------------------ Overall Results --------------------------
SENT: %Correct=100.00 [H=10, S=0, N=10]
WORD: %Corr=100.00, Acc=100.00 [H=10, D=0, S=0, I=0, N=10]
===================================================================
从上可见正确识别率为100%,识别效果非常好。当然这里仅仅给出了十个测试文件的测试结果,如果需要得到更可靠的结果,需要更多的测试文件。
- WinHTK开发与使用二:孤立词识别
- WinHTK开发与使用
- WinHTK开发与使用三:连续语音识别
- WinHTK开发与使用一:软件设计
- 使用HTK语音工具包进行孤立词识别基础教程
- HTK的安装和使用(Yes Or No孤立词识别)
- 基于HTK语音工具包进行孤立词识别的使用教程
- 2,HTK学习_基于HTK语音工具包进行孤立词识别的使用教程
- 语音识别系统之htk------孤立词识别(yesno)
- 孤立词语音识别系统
- 机器学习&数据挖掘笔记_13(用htk完成简单的孤立词识别)
- 图像识别去除孤立点方法
- HTK孤立词语音识别小系统
- HTK实现孤立词语音识别
- 孤立
- SQL异常与孤立事务
- Julius孤立词系统搭建
- 孤立词语音识别之MFCC特征提取
- 0400000139
- CSS float效果
- VPN概述
- android picture is not mutable解决!
- Comparator实现字符串排序
- WinHTK开发与使用二:孤立词识别
- css float 实例
- Unity3D教程:调用C++中DLL文件
- css position
- css position 示例
- java中thread的start()和run()的区别
- css 盒子模型
- mybatis关联外键查询
- javascript执行环境(作用域)与作用域链深入剖析及项目经验