MatLab环境下调用HTK的连续语音识别方法
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
MatLab环境下调用HTK的连续语音识别方法
【摘要】本文根据HTK(HMM Toolkit)的基本原理,在MatLab环境下通过调用HTK各命令实现小词汇量连续语音识别。
采用HTK工具包搭建语音的隐马尔可夫模型(HMM),再利用MatLab循环编程开发进行仿真实验,避免了传统地逐步运行HTK各个命令的冗余操作,降低了操作复杂度。
【关键词】HTK;语音识别;隐马尔可夫模型
Abstract:According to the basic principle of HTK(HMM Toolkit),small vocabulary continuous speech was recognized based on HTK by MatLab programming in this thesis.This thesis used HTK to build HMM model and then used MatLab to program it to do speech recognition,thus it avoided the redundancy of operating single HTK command,and the complexity was reduced.as well.
Key words:HTK;Speech Recognition;Hidden Markov Model
一、引言
语言是交流的最自然方式,它为人机交互提供了一种有效的方法。
但目前人与机器的交互方式多以键盘和鼠标为主,为了让机器与人能够更好地进行交互,出现了基于语音识别的系统使人机对话成为可能。
语音识别就是让计算机通过识别和理解把人类的语音信号转换为相应的命令或者文本的一门技术。
HTK(HMM ToolKit)[1][2]工具包是英国剑桥大学专门开发用于建立和处理隐马尔可夫模型的实验工具包,广泛应用在语音识别领域,在语音合成和字符识别等其他领域也有所应用。
本文在MatLab平台上利用HTK设计和建立了小词汇量连续语音识别的实验平台。
二、HTK的介绍
(一)HTK的基本原理
HTK工具包有四个主要工具包:语音数据准备,HMM训练工具,识别工具,数据分析工具。
数据准备工具:用Adobe Audition录音软件采集语音信号,再完成建立语料库,语法定义,字典定义,标注数据,提取特征等过程。
语法定义是以特定的文法结构对发音词汇进行限制生成符合发音语法的语句,用命令HParse和HBuild 来实现。
字典定义可根据实际要求来定义结构,如音素,音节等。
本文采用无调音节对连续汉语进行识别[3]。
数据标注利用命令HLEd来实现。
特征参数利用HCopy来提取。
常用的特征参数有线性预测系数(LPC)和梅尔频率倒谱系数(MFCC)[4]。
HMM训练工具:HMM训练在语音识别系统的搭建过程中发挥着重要作用,它的主要目的是训练得到HMM模型。
本文使用命令HCompv估计出初始模型函数以及HERest重估参数,从而完成单无调音节HMM模型的创建和训练。
针对小词汇量连续语音的音节存在上下文相关的关系,本文创建了三音子HMM模型对模型进行训练和优化,进而提高了语音识别率。
识别工具:命令HVite用于识别未知语音,该命令的算法是基于维特比算法。
数据分析工具:命令HResults用于识别结果的分析。
(二)音节模型训练
本文首先建立了基于无调单音节的HMM模型[5],HMM使用从左到右无跳转的结构,结构如图1所示。
音节模型包括5个状态,即1个开始状态,3个发射状态和1个结束状态。
为了与基于单音节的声学模型训练方法相比较,本文创建了基于声韵母的三音子HMM模型。
三音子HMM模型也是采用从左到右的结构,音节模型状态数也是5。
三音子模型以单音节作为初始,再进行重估。
通过命令HLEd、HHEd、HERest等来实现三音子模型的建立。
根据Baum Welch对三音子模型进行训练时,需要根据经验设置一个阈值。
当模型对应的样本数大于阈值时,训练后模型参数根据训练结果改变模型参数;当模型对应的样本数小于阈值时,训练后的模型参数仍为初始的参数。
阈值大小的设置会影响语音识别率的高低。
图1 HMM的拓扑结构
三、HTK的调用
Matlab调用HTK各命令可以通过dos语句或者system语句以及用MatLab 语言编写出HTK各命令运行时所需的参数的得以实现。
例如生成HTK可用的语音识别网络,Matlab语句可以表示为dos(’Hparse %s output\\’,htkParam.grammarFile),其中Hparse为HTK中生成识别网络的命令,%s代表调用htkParam.grammarFile文件,该文件是事先定义好的语法文件,即汉语无调音节的集总。
为生成的识别网络,生成后将保存在output文件夹下。
Matlab调用HTK各命令的部分代码如下:
if printOpt,
fprintf(‘I.2:无调单音节的列表的生成%s\n’,htkParam.phoneMlfFile);
end
fid = fopen(’output\mkphones0.led’,’w’);
fprintf (fid,’EX\r\nIS sil sil\r\nDE sp\r\n’);
fclose (fid);
cmd = sprintf(’HLEd -l * -d %s -i output\\phones0.mlf output\\mkphones0.led%s’,htkParam.pamFile,htkParam.sylMlfFile);
dos(cmd);
fid = fopen (’output\mkphones1.led’,’w’);
fprintf (fid,’EX\r\nIS sil sil\r\n’);
fclose (fid);
cmd = sprintf (’HLEd -l * -d %s -i output\\phones1.mlf output\\mkphones1.led
%s’,htkParam.pamFile,htkParam.sylMlfFile);
dos (cmd);
该代码的含义是首先建立mkphones0.led文件,并写入内容(脚本的最后一行须编辑为空行)
EX
IS sil sil
DE sp
通过调用HLEd命令生成无调音节列表,保存为phones0.mlf文件。
同样地,建立mkphones1.led文件,并写入内容
EX
IS sil sil
通过调用HLEd命令生成无调音节列表,保存为phones1.mlf文件。
生成的phones0.mlf和phones1.mlf区别在于后者的每个音节后面添加sp作为短暂的停顿。
通过MatLab编程调用HTK各命令及设置HMM模型参数完成语音的训练和识别[6]。
四、仿真实验
测试在安静的实验环境下进行,采用CoolEdit Pro录音软件,采样率为16KHz,量化为16bits。
测试人员共十人,五男五女,分别来自不同省份,使用略带各地方言的普通话。
测试语音共50句,内容为数字0~9随机组成的数字串。
实验1:提取特征参数时分别采用线性预测系数(LPC)和梅尔频率倒谱系数(MFCC)的语音识别率比较。
识别结果如表1所示。
表1 不同特征参数的识别率(%)
特征参数识别率
LPC 82.24
MFCC 85.84
分析表1可知,采用梅尔频率倒谱系数进行特征参数的提取时语音识别率比采用线性预测系数时的识别率高 3.6%。
因此,本文特征参数采用梅尔频率倒谱系数。
实验2:采用单音节模型建模与三音子模型建模时语音识别率的比较。
识别结果如表2所示。
Corr为词的识别正确率,Acc为词的识别准确率,Correct指句子的识别正确率。
表2 不同模型类型的识别率(%)
模型类型Corr Acc Correct
单音节模型78.24 76.49 54.55
三音子模型86.84 84.84 68.23
分析表2可知,单音节模型的识别率要低于三音子模型,这是因为三音子模型考虑了音节间存在的协同发音的现象,优化了HMM模型参数,因此改善了语音识别率。
实验3:HMM训练过程中设置不同阈值时的语音识别率比较。
识别结果如表3所示。
表3 不同阈值的识别率(%)
阈值50 100 150 200 300 500
识别率83.49 85.84 86.71 86.65 86.84 85.07
分析表3可知,当阈值较低时,训练样本数较少的模型也会继续进行下一步的训练,然而这些模型的训练样本不足以使模型得到足够的训练,这时并不能优化模型的参数;当阈值为300时,识别率最高;当阈值继续增加,部分模型的训练样本可以使模型得到充分的训练,但是因为样本数低于设定阈值而不能使模型得到优化,因此此时识别率反而会有所下降。
五、结束语
本文利用MatLab语音处理工具箱结合HTK各命令实现了小词汇量连续语音的识别。
在实验中由于使用HTK各命令做每次循环实验操作比较复杂,利用MatLab循环编程调用HTK各命令避免了逐步操作的复杂度,有效地减少了操作步骤,降低了工作的冗余度。
参考文献
[1]Steven.Young,G.Evermann,M.Gales.The HTK Book(for HTK Version 3.4)[M].Cambridge University Engineering Department,2009.
[2]Kuldeep Kumar,R.K.Aggarwal.Hindi Speech Recognition System Using HTK[J].International Journal of Computing and Business Research,2011,2(2):1-12.
[3]韩纪庆.语音信号处理[M].北京:清华大学出版社,2013.
[4]赵力.语音信号处理[M].北京:机械工业出版社,2010.
[5]L.R.Rabiner.A Tutorial on Hidden Markov Models and Selected Applications in Speech Recognition[J].Proceedings of IEEE,1989,77(2):257-286.
[6]张戈,严欢.基于HTK调用MatLab的语音识别的研究[J].现代计算机(专业版),2010(09).。