训练自已的中文语言模型与声学模型

一、训练语言模型

   (1) 安装语言模型训练工具CMUCLMTK

      ./configure
      sudo make
      sudo make install
默认安装在/usr/local/bin下面,可以看到下面这些生成文件
idngram2lm   idngram2stats      mergeidngram     text2idngram
text2wfreq    text2wngram       wfreq2vocab

   (2) 准备训练的文档

sudo -i
vi my_db.txt
在 .txt中输入如下内容,记住结尾不可留“\n”(实验证明了这一点)。
<s> 前进 </s>
<s> 后退 </s>
<s> 左转 </s>
<s> 右转 </s>
<s> 停止 </s>
wq 保存退出

   (3)训练文档成模板

cd/usr/local/bin

     text2wfreq < my_db.txt | wfreq2vocab > my_db.tmp.vocab
     text2idngram -vocab my_db.vocab -idngram my_db.idngram < my_db.txt
     idngram2lm –vocab my_db.vocab -idngram my_db.idngram -arpa my_db.arpa
     sphinx_lm_convert -i my_db.arpa -o my_db.lm.DMP

    

     最终生成了语言模型my_db.lm.DMP

二、训练声学模型

   (1)准备一些文件

      分别创建两个目录etc和wav,然后在两个目录下面制作一些数据文件,方便后面训练时使用。如下所示:
  • etc
    • my_db.dic - Phonetic dictionary
    • my_db.phone - Phoneset file
    • my _db.lm.DMP - Language model
    • my_db.fillers - List of fillers
    • my_db_train.fileids - List of files for training
    • my_db_train.transcription - Transcription for training
    • my_db_test.fileids - List of files for testing
    • my_db_test.transcription - Transcription for testing
  • wav
    • speaker_1
      •   
      • 1_11.wav - Recording of speech utterance
    • speaker_2
      •   
      • 2_11.wav - Recording of speech utterance
    • speaker_3
      •   
      • 3_11.wav - Recording of speech utterance
    • speaker_4
      •   
      • 4_11.wav - Recording of speech utterance
    • speaker_5
      •   
      • 5_11.wav - Recording of speech utterance

     (2)准备etc下的数据文件

        cd /sphinx/Mytrain
        mkdir etc
        cd etc
1. vi  my_db_train.fileids
2. vi  my_db_test.fileids
输入内容:
   speaker_1/1_11
speaker_2/2_11
speaker_3/3_11
speaker_4/4_11
speaker_5/5_11          
3. vi my_db_train.transcription
4. vi  my_db_test.transcription
输入内容如下:
   <s> 前进 </s> (1_11)
<s> 后退 </s> (2_11)
<s> 左转 </s> (3_11)
<s> 右转 </s> (4_11)
<s> 停止 </s> (5_11)
5. vi  my_db.dic
          输入内容:
  前进    Q IAN J IN
 后退    H OU T UI
    左转    Z UO ZH UAN
   右转    Y OU ZH UAN
 停止    T ING ZH IB
      6.vi my_db.filler
       输入内容:
                 <s> SIL
</s> SIL
<sil> SIL
      7.生成my_db.phone
cd ..
      cd scripts
      cp make_phoneset.pl  /sphinx/Mytrain/etc
      ./make_phoneset.pl my_db.dic my_db.filler > my_db.phone
      cd ..
      cd etc
      vi my_db.phone //查看下生成的.phone中的内容
H
IAN
IB
IN
ING
J
OU
Q
SIL
T
UAN
UI
UO
Y
Z
ZH
      以上若有多余字母,可手工删除。
      至此加上之前生成的my_db.lm.DMP,etc下的数据文件已准备完毕。
注意:以上所有的文件在输入结尾不可留下“/n”。

(3)准备wav下的音频文件

我们先在windows下面,录下前进、后退、左转、右转、停止五个命令词的wav音频文件,然后放在共享文件中。
 mkdir  speaker_1  speaker_2  speaker_3  speaker_4  speaker_5
把相应的音频1_11.wav 2_11.wav 3_11.wav 4_11.wav 5_11.wav 分别拷贝到相应的speaker_1  speaker_2  speaker_3  speaker_4  speaker_5 目录下面。
注意:此处音频文件采样率16KHz,单声道录音。
(4) an4与sphinxtrain搭建语音训练系统
  cd  /sphinix/MyTrain/  
  SphinxTrain/scripts_pl/setup_SphinxTrain.pl -task an4
pocketsphinx/scripts/setup_sphinx.pl -task an4
  在当前目录下面会产生如下目录:
  bin
  bwaccumdir 
  etc
  feat
  logdir
  model_parameters
  model_architecture  
  scripts_pl
  wav
把(2)、(3)中etc、wav下面的文件相应的拷贝到刚生成的wav与etc中。
(5) 修改etc/sphinx_train.cfg配置
  1.路径
# These are filled in at configuration time
$CFG_DB_NAME = "an4";
$CFG_BASE_DIR = "/sphinx/MyTrain/an4";
$CFG_SPHINXTRAIN_DIR = "SphinxTrain";
改为
# These are filled in at configuration time
$CFG_DB_NAME = "my_db";
$CFG_BASE_DIR = "/sphinx/MyTrain";
$CFG_SPHINXTRAIN_DIR = "SphinxTrain";
  2.音频
# 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_EXTENSION = 'wav';
$CFG_WAVFILE_TYPE = 'mswav'; # one of nist, mswav, raw
3.文件命名
#*******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_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     = "$CFG_LIST_DIR/feat.params";
 
确定etc下面的文件是以这种方式命名的。
4.模板类型与模板参数
#*******variables used in characterizing models*******
 
$CFG_HMM_TYPE = '.cont.'; # Sphinx III
#$CFG_HMM_TYPE  = '.semi.'; # Sphinx II
 
pocketsphinx和Sphinx III一样,都是.cont。
(6) 配置声音特征参数
这里的操作为采样率为8KHz的情况,若采样率为16KHz,则可以直接略过此步操作。
vi feat.params
添加修改如下:
-samprate 8000.0
-nfilt 31
-lowerf 200.00
-upperf 3500.00
-dither yes
(7) 配置解码参数
1.路径
# These are filled in at configuration time
$DEC_CFG_DB_NAME = 'an4';
$DEC_CFG_BASE_DIR = '/sphinx/MyTrain/an4';
$DEC_CFG_SPHINXDECODER_DIR = 'pocketsphinx';
改为
# These are filled in at configuration time
$DEC_CFG_DB_NAME = 'my_db';
$DEC_CFG_BASE_DIR = '/sphinx/MyTrain';
$DEC_CFG_SPHINXDECODER_DIR = 'pocketsphinx';
2、语言模型名称
# This variables, used by the decoder, have to be user defined, and
# may affect the decoder output
 
$DEC_CFG_LANGUAGEMODEL_DIR = "$DEC_CFG_BASE_DIR/etc";
$DEC_CFG_LANGUAGEMODEL  = "$DEC_CFG_LANGUAGEMODEL_DIR/my_db.lm.DMP";
$DEC_CFG_LANGUAGEWEIGHT = "10";
$DEC_CFG_BEAMWIDTH = "1e-80";
$DEC_CFG_WORDBEAM = "1e-40";
改为
# This variables, used by the decoder, have to be user defined, and
# may affect the decoder output
 
$DEC_CFG_LANGUAGEMODEL_DIR = "$DEC_CFG_BASE_DIR/etc";
$DEC_CFG_LANGUAGEMODEL  = "$DEC_CFG_LANGUAGEMODEL_DIR/an4.lm.DMP";
$DEC_CFG_LANGUAGEWEIGHT = "10";
$DEC_CFG_BEAMWIDTH = "1e-80";
$DEC_CFG_WORDBEAM = "1e-40";
(8) 开始训练
 cd /sphinx/MyTrain
./scripts_pl/make_feats.pl -ctl etc/my_db_train.fileids
./scripts_pl/make_feats.pl -ctl etc/my_db_test.fileids
./scripts_pl/RunAll.pl
本文档介绍Sphinx4在Windows下的中文训练过程及注意事项,与本文档配套的是我自己的训练实例bergtrain和用到的软件。 本文档编写日期 2013-04-23 1、为什么要训练? sphinx4目前的版本中仅提供了英文等语音识别库。中文的库是PTM或semi类型的,在java版sphinx中无法使用。 2、Sphinx的训练指哪些内容? 在Sphinx中有语言模型声学模型等概念,如果你不想了解这些,请参考以下内容: a1、中文每个字的标准发音已经有一个较为全面的文件进行了标注 这个文件就是zh_broadcastnews_utf8.dic(下称这类文件为发音字典),在sphinx网站上可以下载,我们也包含了它。 下面是该文件的片断,它用类似拼音的方式标注了每个字或词的发音。 昌 ch ang 昌北 ch ang b ei 昌必 ch ang b i 昌都 ch ang d u 昌赫 ch ang h e a2、需要告诉sphinx我们经常使用的字、词是哪些,它们出现的频率如何 由于开放式语音识别尚难实现,所以sphinx实际上只能较好的处理相对小的语言集合。 因此,针对特定的领域,告诉sphinx该领域的词汇和各词出现的频率将极大提高识别率。 a3、需要告诉sphinx每个字、词的真正读音 发音字典告诉sphinx每个字的标准读音,但面对的说话人往往不会以标准读音来朗读。 因此sphinx需要学习说话人的“口音”。 如果训练时的读者发音比较标准,则sphinx能“举一反三”,识别其他不那么标准的读者的语音。 推荐的做法是训练一些典型的口音:标准男、女声,童音,最后再考虑特定用户的口音。 3、如何准备训练内容所需的原料? 需要准备两大内容:1)文本语料文件,2)语料录音文件。 文本语料文件给出2.a2中需要的内容,在bergtrain的etc文件下的berginput.txt文件就是一个预料文件。 它以行为单位,给出了150个中文句子。 语料录音文件是根据文本语料文件,朗读它的每行/句话,保存到每一个语音文件即可。 语料文件中的语句应该尽量选择领域相关的,在覆盖领域内名词的前提下,覆盖尽可能多的通用词汇。 4、训练环境及注意事项 本文的训练软硬件如下: 硬件:T60P笔记本,机器自带录音设备;操作系统为Win7 32位。 软件:Sphinx cmuclmtk-0.7-win32.zip pocketsphinx-0.8-win32.zip sphinxbase-0.8-win32.zip sphinxtrain-1.0.8-win32.zip sphinx4-1.0beta6-bin.zip,用于编写java版的识别软件所需的库 脚本执行软件 ActivePerl-5.16.3.1603-MSWin32-x86-296746.msi ActivePython-2.7.2.5-win32-x86.msi 录音和处理软件 audacity-win-2.0.3rc1.zip,可进行录音和声音文件处理(如降噪),免费软件 FairStars.zip,可进行批量录音(V3.5绿色版) 文本编辑软件UltraEdit,UltraEdit-32.rar绿色版 注意: 文件格式 语料文件必须使用UltraEdit进行编辑, 在编辑后,使用 文件-转换-ASCII转UTF-8(UNICODE编辑),指定文件中的中文使用utf8编码。 在保存前,设置格式如下: 换行符:UNIX终束符 - LF 指定文件中的回车/换行符为编码0A的换行符 格式:UTF-8 - 无BOM 每个文件的末尾必须有一个回车! 这个回车将在保存时被替换为编码0A的换行符,训练脚本需要这个符号来确认文件的结束。 录音文件 如果你不希望去编辑训练中的配置文件,则在使用FairStars录音时作如下设定: 进入菜单和对话框 选项-显示录音选项-编码-WMA, 设定:采样率(16000Hz)、通道(单声道)、比特率(16Kbps) 5、训练步骤 下面逐步从零开始进行训练 5.1 软件环境的安装 将本文档所在的文件夹解压或拷贝到d:\,即本文档路径是d:\sphinxtrain\Sphinx中文训练教程.txt 1)点击安装ActivePerl-5.16.3.1603-MSWin32-x86-296746.msi和ActivePython-2.7.2.5-win32-x86.msi; 2)解压Sphinx中除sphinx4-1.0beta6-bin.zip外的压缩文件到d:\sphinxtrain下
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值