欢迎来到学术参考网

基于词网模型的连续语音识别系统MYASR的设计与开

发布时间:2015-12-14 14:12

摘 要:基于词网模型的连续语音识别系统在各方面得到了广泛应用,如语音拨号、语音指令、语音菜单、语音导航及语音电话簿等。本文在研究语音识别理论的基础上,设计并开发了基于词网模型的连续语音识别系统-MYASR。MYASR提供了丰富的功能模块,包括前端处理、特征提取、模型训练、词网构建、识别等,使开发一个基于词网模型的连续语音识别应用系统更加方便,同时也是语音识别研究的实验平台。MYASR所采用的XML描述文件,使系统具有良好的可读性和可扩展性。通过在TIMIT语料库上单音子连续语音识别的实验显示,MYASR具有很高的识别性能和实时性能。

关键词:语音识别;MYASR系统;XML语言

1.引言
  在小词汇量的语音识别系统中,主要分为孤立词识别和基于词网模型的连续语音识别。前者通过词发音端点分割算法,把每个词的发音从整段语音中分割出来,然后再到模型集中去寻找最佳的匹配作为识别结果。XML同HTML一样,都来自SGML(标准通用标记语言)。SGML是一种在Web发明之前就早已存在的用标记来描述文档资料的通用语言。但SGML十分庞大且难于学习和使用。鉴于此,人们提出了XML 语言,它具有可扩展性、灵活性、自描述性、简明性的优点。
  在MYASR系统中有多个功能模块,每个功能模块都有各自的参数,采用XML语言对这些参数进行描述更加直观,可读性更强。例如,MYASR中MFCC编码的XML描述如下:
  <mfcc_params>
   <type_mask>  MFCC_0_D_A  </type_mask>
   <sample_rate> 16000 </sample_rate>
   <win_size>  400 </win_size>
   <win_shift> 160 </win_shift>
   <fft_size>  512 </fft_size>
   <low_freq>  200  </low_freq>
   <high_freq> 7000  </high_freq>
   <pre_enphasis> 0.97 </pre_enphasis>
   <mel_num>  26  </mel_num>
   <cep_num>  12  </cep_num>
   <cep_lifter>  10  </cep_lifter>
  </mfcc_params>
  
  MYASR通过XML解析器将XML元素中的参数提取出来,然后再传递给各个功能模块。当需要增加参数时,只要在XML文件中适当位置增加一个元素(Element)即可,具有良好的可扩展性。
3.系统开发
MYASR系统的模块结构如下所示:


3.1前端处理
  MYASR的前端处理包括以下功能模块:自动增益控制(AGC)、噪音消除、预加重处理。其相应的XML描述如下:
<preprocess_bat workdir="d:worktmp">
 <params>
  <frame_ts> 20 </frame_ts>       //帧长
  <agc>
   <level> 0.5 </level>  
   <max_gain> 2.0 </max_gain>  //最大增幅
   <min_gain> 1.0 </min_gain>   //最小增幅
  <agc>
  <pre_enphasis> 0.97 </pre_enphasis>//预加重系数
  <denoise>1</denoise>    //噪音消除
 </params>
 <transcrip> </transcrip>
</preprocess_bat>
  其中属性"workdir"表示当前的工作目录,元素<agc>表示自动增益控制参数,元素<pre_enphasis>表示预加重参数,元素<denoise>表示是否对语音进行噪音消除。元素<transcrip>表示批处理文件,此文件中描述了目标文件名及处理后的文件名,内容如下:
  ""  ""
  ""  ""
  ""  ""
  .........
3.2端点分割
  在MYASR系统中,实现两种类型的端点分割:句子端点检测,词端点检测。采用的静音检测方法有【2】:基于短时能量、基于短时平均过零率、和基于GMM模型。其XML描述如下:
 <endpoint>
  <endpoint_method> SENT_CUT </endpoint_method>
  <vad_method> GMM_VAD </vad_method>
  <sil_interval> 500 </sil_interval>            //单位为毫秒
  </endpoint>
  元素<endpoint_method>表示端点分割方法:设置SENT_CUT表示句子端点分割,设置WORD_CUT表示词端点分割。元素<vad_method>表示静音检测的方法:设置GMM_VAD 表示采用基于GMM模型,PW_VAD表示基于短时能量,COS_VAD表示基于短时平均过零率。<sil_interval>元素表示检测对象之间允许的停顿时间,超过停顿时间意味着出现新的句子或词。
3.3特征提取
  MYASR系统中目前采用MFCC结合动态差分参数作为特征矢量。将语音文件转换为MFCC编码的XML描述文件如下所示:
 <wav2mfcc workdir = "d:myworkdir">
  <params_xml></params_xml>
  <transcrip> </transcrip>
  </wav2mfcc>
  其中是MFC C特征参数的描述文件,内容如下:
  <mfcc_params>
   <type_mask>  MFCC_0_D_A  </type_mask>//类型
   <sample_rate> 16000 </sample_rate>  //采样率
       <win_size>  400  </win_size> //帧长
   <win_shift> 160   </win_shift>    //帧移
   <fft_size>  512   </fft_size>   //FFT的窗长
   <low_freq>  200  </low_freq>   //截止的最低频率
   <high_freq>  7000 </high_freq>   //截止的最高频率
   <mel_num>  26  </mel_num>   //MEL滤波器数
   <cep_num>  12  </cep_num>   //MFCC维数
   <cep_lifter>  10  </cep_lifter>   //参数提升系数
  </mfcc_params>
  其中<type_mask>元素表示特征矢量标志,有6种类型:
  表3-1  MYASR中MFCC编码类型

标志

含义

MFCC

MFCC参数

MFCC_0

MFCC参数加对数能量

MFCC_D

MFCC参数及其一阶差分

MFCC_0_D

MFCC参数加对数能量,及一阶差分

MFCC_D_A

MFCC参数及其一阶、二阶差分

MFCC_0_D_A

MFCC参数加对数能量,及一阶、二阶差分

<transcrip>元素中的文件描述了语音源文件及转换成MFCC的目标文件,内容如下:
  ""  ""
  ""  ""
  ""  ""
  .........
3.4模型训练
  MYASR采用了连续概率密度的HMM模型,模型参数初始化采用了"K-均值分割"算法,参数重估采用"Baum-Welch"算法。其XML描述文件如下:
  <hmm_train workdir="d:worktmpmytimit">
   <label_scrip> </label_scrip>    
   <featlep_scrip> </featlep_scrip>  
   <hmm_params>
    <state_num>3</ state_num >      //HMM状态数
    <mixture>4</mixture>       //高斯分量个数
    <veclen>39</veclen>       //特征矢量维数
    <cluster>GMM_EM</cluster>     //聚类算法
    <feat_flag>MFCC_0_D_A</feat_flag>   //特征矢量标志
   </hmm_params>
   <model_file></model_file> //输出文件
  </ hmm _train>
  其中,<label_scrip>元素中的文件表示要训练的那些词或音子。
<featlep_scrip>元素中的文件描述了特征矢量文件及其标注文件,内容如下:
  ""  ""
  ""  ""
  ""  ""
  .........
  标注文件".lab"中注明了每个单元的发音起点和终点,MYASR将根据标注文件从特征文件中读取特征矢量进行HMM模型的训练。标注文件内容如下:
  0    191   sil
  191  285   sh
  285  358   ix
  358  415   hh
  415  548   eh
  548  646   jh
  646  720   ih
  720  790   d
  790  920   ah
  ....
  其中时间单位为毫秒。
  <cluster>元素表示"K-均值分割"算法中对B参数进行重估所采用的算法,有两种选项:GMM_EM表示EM算法,K_MEANS表示"K-means"算法。实验结果显示,EM算法比"K-means"算法具有更好的性能。
  <model_file>表示训练输出的HMM模型文件,内容如下:
  <hmm_set>
   <params>
    <feat_mask>MFCC_0_D_A</feat_ mask >
    <state_num>3</state_num>
    <mixture>4</mixture>
    <vec_len>39</vec_len>
   </params>
   <hmm >
    <state>
        <mixture> 1.906841e+001 1.900540e-001 ......</mixture> //均值
       <var>     2.945649e+001 1.096035e+002......</var>    //方差
       <weight>  2.212352e-001 </weight>           //权重
           </state>
           ......
    </hmm>
    ......
  </hmm_ set >
3.5词网构建
3.5.1 词网模型的双层结构
  MYASR中的词网模型分为两层:一层是描述层,主要用于描述词网的结构,包括上下文无关文法和有限状态图;另一层是模型层,这一层由HMM模型构成的搜索网络,是搜索算法的输入。首先由用户定义语法规则,然后转换成有限状态图,最后结合HMM模型集和发音字典将其转化成搜索算法可以处理的模型层搜索网络。

3.5.2 描述层到模型层的转换
   在模型层搜索网络中,按节点是否有词输出分为两类:空节点和词节点。空节点中不含有HMM模型,而只是作为词网中的一个过度节点,如起始节点(#START),终止节点(#END),中转节点(#L)都是没有词输出的节点。而词节点则包含了构成这个词的HMM模型。
  词网模型的有限状态图转换成模型层搜索网络的过程为:当遇到空节点时,不作处理;当遇到词结点时,在字典哈希表找到这个词,并保存word_id,word_id是这个词在字典哈希表的索引,当搜索结束后,回溯时就是根据这个word_id找到哈希表中对应的词;同时根据这个词的发音,到HMM哈希表中查找子词的HMM模型,然后在这个词结点中创建指向子词HMM模型的指针。转换后的模型层搜索网络如图3-4所示。

    模型层搜索网络构建后,就可以用Token-Passing算法进行搜索。
4 总结
  本文在研究语音识别理论的基础上,设计并开发了基于词网模型的连续语音识别系统-MYASR。MYASR提供了丰富的功能模块,使开发一个基于词网模型的连续语音识别应用系统更加方便,同时也是语音识别研究的实验平台。MYASR所采用的XML描述文件,使系统具有良好的可读性和可扩展性。通过在TIMIT语料库上单音子连续语音识别的实验显示,MYASR具有很高的识别性能和实时性能。当前系统只是在Windows平台上,为适应各种应用的需要,在后续的语音识别系统设计中,可考虑将系统移植到嵌入式平台。
参考文献
 Ney H , Haeb2Umbach R , Tran B H , et al .  

上一篇:于射频IC卡的加油管理系统的系统设计

下一篇:基于Multisim10的单片机动态显示仿真技术