PocketSphinx语音识别系统声学模型的训练与使用_第1页
PocketSphinx语音识别系统声学模型的训练与使用_第2页
PocketSphinx语音识别系统声学模型的训练与使用_第3页
PocketSphinx语音识别系统声学模型的训练与使用_第4页
PocketSphinx语音识别系统声学模型的训练与使用_第5页
已阅读5页,还剩26页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、       声学模型主要用于计算语音特征和每个发音模板之间的似然度。目的是为每个声学单元建立一套模型参数(通过不断地学习和改进得到最优的,也就是概率最大的一组HMM模型参数)。需要训练的情况:1)需要创建一个新的语音或者方言的模型;2)为你的小词汇的应用创建一个特定的模型;3)你有足够的大量的语音数据:单的人的话(控制指令)需要1小时的录音,200个人的话需要50小时的录音。4)你需要有语言的音素结构的知识;5)你有足够的时间去训练和优化(大概需要一个月)。     如果不具备以上的情况或者条

2、件,那么用模型增强(适应)比训练一个新的模型更有效。     另外,你的语音数据库应该能够比较好地代表你所要识别的语音,而且最好是多个人的录音数据,而且包含多种录音情况,还有所有可能的语言学句子。语音数据库包含两个部分:训练集和测试集,一般来说,测试集占全部数据库的1/10,但最好不要超过4个小时的录音时长。获得一个语音数据库的一个比较好的方式是:1)对现有的你需要识别的语音的录音材料进行切割,例如新闻或者电台播音等;2)把你身边的人,例如家人,朋友或者同事的语音录下来;3)在voxforge上面收集; 关于语音识别的基础知识和sphinx的知

3、识,具体可以参考我的另外的博文:语音识别的基础知识与CMUsphinx介绍:PocketSphinx语音识别系统的编译、安装和使用:PocketSphinx语音识别系统语言模型的训练和声学模型的改进:                 SphinxTrain是CMU大学开发的开源声学模型训练器。此工具可以训练适应于PocketSphinx的半连续HMM声学模型,也可以训练应用于Sphinx3的连续HMM声学模型。(1)需要准备的文件:&#

4、160;     在进行训练之前,先通过SphinxTrain中的wave2feat文件对音频文件进行特征提取,得到的MFCC特征参数文件,并把它们作为声学模型训练的输入。在进行训练之前,需要建立如下准备文件:      分别创建两个目录etc和wav,然后在两个目录下面制作一些数据文件,方便后面训练时使用。待会需要的目录及文件如下所示:etc:§     your_db.dic - Phonetic dictionary§ 

5、    your_db.phone Phone set file§     your_db.lm.DMP - Language model§     your_db.filler - List of fillers§     your_db_train.fileids - List of files for training§     your_db_train.tr

6、anscription - Transcription for training§     your_db_test.fileids - List of files for testing§     your_db_test.transcription - Transcription for testingwav:§     speaker_1§         fi

7、le_1.wav - Recording of speech utterance§     speaker_2§          file_2.wav 下面对以上的文件作用做些说明:your_db.dic - Phonetic dictionary主字典文件:该文件中包含要训练的所有词语以及与它们相对应的音素集(记录的是字到语音单元的映射)。如果某个词有两个以上的发音要分别列出。在训练之前,要指明如何将每一个数字的拼音拆解成声学模型。这里我们将

8、数字的每一个音节看成一个声学模型,存放在字典文件中。文件的加载内容为:例如:三SAN四SI五WU一YAO一(2) YI如果是英文的话,例如:HELLO HH AH L OWWORLD W AO R L D另外,对于特殊字符,我们需要对其进行修改,此处不说了。your_db.phone Phone set file音素文件:表示声学模型训练单元,由于数字识别系统只包含10个词的小词汇量识别系统,所以我们的训练单元以这是个词的音节为训练基本单元即可。音素排列以26个字母顺序排列。在数字识别中主要选择音节作为识别单元,故音素文件中包括十二个单元:BA、ER、JIU、LING、LIU、QI、SAN、S

9、I、SIL、WU、YAO、YI。其中SIL表示句子的停顿或静音,或者是录音环境的背景噪声。YAO和YI代表了数字1的两个发音。例如,如果声学单元是音素的话,就是每个音素一行,最后加上SIL这个静音单元:AHAXDHyour_db.lm.DMP - Language model语言模型文件:你在训练得到的语言模型。your_db.filler - List of fillers补充字典文件:该文件主要列举了非语音单词,它可以包括静音,背景噪声,或者mm,um或者呼吸,笑等等。多音字的情况必须全部列出,除此文件外我们还要建立一个补充字典来说明语音中的停顿,当然这种静音(或停顿)可以理解为背景噪声。

10、每个补充字典文件至少包含以下三项:<s> SIL</s> SIL<sil> SIL文件中的<s>代表句首的停顿,</s>代表句末的停顿,<sil>代表句中词间的停顿。这些静音词汇共同对应音素SIL。your_db_train.fileids - List of files for training控制文件:指明了包含所有训练语音文件的路径。表示如下wav/train/name1/1.WAVwav/train/name2/1.WAVyour_db_train.transcription - Transcription for

11、 training脚本文件: 存放每个控制文件(用于训练的)路径的内容(告诉训练器你需要训练哪些语音单元)。文件内容是与控制文件的路径一一对应的语句内容。包括句中的停顿也要用文本列举出来。例如:1.WAV录下的就是hello world这个句子的音,那文件的内容就是:   <s> hello world </s> (1)   <s> foo bar </s> (2)主要注意的是,每个行都需要以<s>开始和以 </s>结束,而且()括号内的语音文件只包含文件名,不包

12、含文件路径。your_db_test.fileids - List of files for testing控制文件:指明了包含所有测试语音文件的路径。your_db_test.transcription - Transcription for testing脚本文件: 存放每个控制文件(用于测试的)路径的内容。 在准备这些文件的时候必须注意以下几点:1)主字典和补充字典必须与音素文件相对应,即字典文件中不允许有音素文件中不存在的音素;2)确保字典文件中没有重复的单词,不包括多音字的列举;3)确保脚本文件和控制文件行数相同,并且一一对应;4)确保脚本文件中的词都存在与字典文

13、件中;5)确保脚本文件中所有音素都存在于音素文件中,并且音素在训练的脚本文件中出现一次。以上五点,如有一点不满足条件,训练将自动终止。 (2)准备etc下的数据文件# mkdir train# cd train# mkdir etc wav# cd etc1、声音文件我是直接放在wav文件夹下的,命名如下(因为这样方便我用脚本去控制录音):# vi my_db_train.fileidsvoice_0001voice_0002voice_0003voice_0004voice_0005voice_0006voice_0007voice_0008voice_0009voice_0010

14、voice_0011voice_0012voice_0013voice_0014voice_0015voice_0016voice_0017     2、测试数据和语音数据一样,因为我并没有测试这个步骤,所以把简单的copy了一下:# cp my_db_train.fileids my_db_test.fileids  3、我的库主要是包含了17个控制的指令,如下:#vi my_db_train.transcription<s> 确定 </s> (voice_0001)<s&

15、gt; 取消 </s> (voice_0002)<s> 关闭 </s> (voice_0003)<s> 退出 </s> (voice_0004)<s> 返回 </s> (voice_0005)<s> 放大 </s> (voice_0006)<s> 缩小 </s> (voice_0007)<s> 音乐 </s&

16、gt; (voice_0008)<s> 图片 </s> (voice_0009)<s> 视频 </s> (voice_0010)<s> 天气 </s> (voice_0011)<s> 设置 </s> (voice_0012)<s> 菜单 </s> (voice_0013)<s> 向左 </s> (voice_0014)<s>

17、; 向右 </s> (voice_0015)<s> 向上 </s> (voice_0016)<s> 向下 </s> (voice_0017) 4、#cp my_db_train.transcription my_db_test.transcription 5、# vi my_db.dic确定 Q UE D ING取消 Q U X IAO关闭 G UAN B I退出 T UI CH U返回 F AN H UI

18、放大 F ANG D A缩小 S UO X IAO音乐 Y IN Y UE图片 T U P IAN视频 SH I P IN天气 T IAN Q I设置 SH E ZH IB菜单 C AI D AN向左 X IANG Z UO向右 X IANG Y OU向上 X IANG SH ANG向下 X IANG X IA 6、#vi my_db.filler<s> SIL</s> SIL<sil> SIL 7、生成my_db.ph

19、one#cp ././sourcecode/sphinxtrain-1.0.7/scripts_pl/make_phoneset.pl .#./make_phoneset.pl my_db.dic my_db.filler > my_db.phone# vi my_db.phone  /看下有没有多余的AAIANANGBCCHDEFGHIIAIANIANGIAOIBININGOUPQSSHSILTUUANUIUOUXUXEXYZZH      以上若有多余字母,可手工删除。 8、把之前的my_db.lm.DM

20、P也拷贝到etc下。     至此,etc下的数据文件已准备完毕。注意:以上所有的文件在输入结尾不可留下“/n”。 (3)准备wav下的音频文件为每一个控制词录制一个语音文件,录音文件的命名需要和my_db_train.transcription与my_db_train.fileids的一致。注意:此处音频文件采样率16KHz,16bit单声道录音,而且是wav格式。我在Linux下写了一个处理脚本来实现上面这17个词的录音:rec_wav.sh,内容如下:#cd ./wav#vi rec_wav.shfor i in seq 1 1

21、7; do       fn=printf voice_%04d $i;       read sent; echo $sent;       rec -r 16000 -e signed-integer -b 16 -c 1 $fn.wav 2>/dev/null;done < ./etc/my_db.dic在这里我们需要用到rec这个录音命令,这个命令是由linux下一个很有名的音频转换程序sox携带

22、的,所以我们需要先安装sox:#apt-get install sox然后改变rec_wav.sh的运行属性:#chmod 777 rec_wav.sh#./rec_wav.sh这个脚本会显示一个词,然后进入录音,我们把这个词读出来,然后按ctrl+c显示下一个词,然后录音,如此循环到全部的词的语音数据拿到。这样在当前文件夹下面就会显示如下文件:voice_0001.wav voice_0002.wav.voice_0017.wav然后,我们需要测试下每个音频文件是否正常:for i in *.wav; do play $i; done他会依次的播放我们录下的这些音频文件;如果不对的

23、话,就得重录,我的就没有什么问题。 (4)an4与sphinxtrain搭建语音训练系统an4是一个CMU在1991年录的音频数据库。具体见:/databases/an4/需要的包有: sphinxbase、SphinxTrain、pocketsphinx、perl和Python,这两个是额外的需要安装的包,如果在windows下的话,建议使用ActivePerl。配置训练脚本:注意下面的sphinxtrain-1.0.7和pocketsphinx-0.7是我们当时下载解压的相应的源码目录。#mkdir /host/xt

24、rain#cd /host/xtrain# ./sourcecode/sphinxtrain-1.0.7/scripts_pl/setup_SphinxTrain.pl -task an4# ./sourcecode/pocketsphinx-0.7/scripts/setup_sphinx.pl -task an4在当前目录下面会产生如下目录:  bin  bwaccumdir  etc  feat  logdir  model_parameters  model_architecture   scri

25、pts_pl  wav把(2)、(3)中etc、wav下面的文件相应的拷贝到刚生成的wav与etc中。这时候xtrain目录的文件如下:. bin    agg_seg    batch.c    tiestate bwaccumdir etc    feat.params    make_phoneset.pl    

26、;my_db.dic    my_db.filler    my_db.phone    my_db_test.fileids    my_db_test.transcription    my_db.tmp.vocab    my_db_train.fileids    my_db_train.transcripti

27、on    sphinx_decode.cfg    sphinx_train.cfg feat logdir model_architecture model_parameters scripts_pl    00.verify      verify_all.pl    01.lda_train  

28、60;   baum_welch.pl      lda_train.pl      norm_and_launchbw.pl      norm.pl      slave_lda.pl    90.deleted_interpolation    

29、;  deleted_interpolation.pl    bin    bwaccumdir    copy_setup.pl    decode      psdecode.pl      setup_sphinx.pl      s

30、etup_tutorial.pl      slave.pl      verify_dec.pl      word_align.pl    etc    feat    lib      Queue   &

31、#160;     Job.pm         PBS.pm         POSIX.pm      Queue.pm      SimpleConfig.pm      Sphinx

32、Train         Config.pm         Util.pm      test_SimpleConfig.pl    logdir    make_feats.pl    make_phoneset.pl &#

33、160;  maketopology.pl    model_architecture    model_parameters    new_experiment.pl    RunAll.pl    setup_SphinxTrain.pl    setup_tutorial.pl    texF

34、ormat.pl    tune_senones.pl    wav setup_SphinxTrain.pl wav     rec_wav.sh     test_wav.sh     voice_0001.wav     voice_0002.wav   

35、0; voice_0016.wav voice_0017.wav 然后我们需要修改etc文件夹下面的配置文件,还要修改很多变量; (5)修改etc/sphinx_train.cfg配置1)配置那些文件的路径# These are filled in at configuration time$CFG_DB_NAME = "an4"改为$CFG_DB_NAME = "my_db"2)修改语音数据库的音频文件的格式我们录制的是MSWav格式,所以修改sph为 wav ,修改nist为mswav。#

36、Audio waveform and feature file information$CFG_WAVFILES_DIR = "$CFG_BASE_DIR/wav"$CFG_WAVFILE_EXTENSION = 'sph'$CFG_WAVFILE_TYPE = 'nist' # one of nist, mswav, raw改为# Audio waveform and feature file information$CFG_WAVFILES_DIR = "$CFG_BASE_DIR/wav"$CFG_WAVFILE_E

37、XTENSION = 'wav'$CFG_WAVFILE_TYPE = 'mswav' # one of nist, mswav, raw3)文件命名#*variables used in main training of models*$CFG_DICTIONARY     = "$CFG_LIST_DIR/$CFG_DB_NAME.dic"$CFG_RAWPHONEFILE   = "$CFG_LIST_DIR/$CFG_DB_NAME.phone"$CFG_

38、FILLERDICT     = "$CFG_LIST_DIR/$CFG_DB_NAME.filler"$CFG_LISTOFFILES    = "$CFG_LIST_DIR/$CFG_DB_NAME_train.fileids"$CFG_TRANSCRIPTFILE = "$CFG_LIST_DIR/$CFG_DB_NAME_train.transcription"$CFG_FEATPARAMS     = "$

39、CFG_LIST_DIR/feat.params"确定etc下面的文件是以这种方式命名的。4)配置模型类型与模型参数#*variables used in characterizing models*$CFG_HMM_TYPE = '.cont.' # Sphinx 4, Pocketsphinx#$CFG_HMM_TYPE  = '.semi.' # PocketSphinx#$CFG_HMM_TYPE  = '.ptm.' # PocketSphinx (larger data sets) cont表示

40、的是连续模型,semi表示半连续模型,是什么类型,就把前面的注销符号#去掉就行了,pocketsphinx和Sphinx III一样,都是.cont。5)配置声音特征参数这里的操作为采样率为8KHz的情况,若采样率为16KHz,则可以直接略过此步操作。vi feat.params添加修改如下:-samprate 8000.0-nfilt 31-lowerf 200.00-upperf 3500.00-dither yes(6)配置解码参数etc/sphinx_decode.cfg1)路径# These are filled in at configuration time$DEC_CFG_DB_NAME = 'an4'改为$DEC_CFG_DB_NAME = 'my_db'2)语言模型名称# This variables, used by the decoder, have to be user defined, and# may affect the decoder output$DEC_CFG_LANGUAGEMODEL_DIR = &q

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论