kaldi 的安装和测试
1. 下载源码
git clone https://github.com/kaldi-asr/kaldi.git kaldi --origin upstream
cd kaldi
git pull
2. 安装
cd kaldi
cd tools
检测依赖
extras/check_dependencies.sh
根据指示安装缺失的包,直到看到:
extras/check_dependencies.sh: all OK.
然后make
make
看到下面这句话就表示完成:
All done OK.
完成之后切换到src目录在make
cd ../src
./configure
make
看到下面这句话就表示完成了:
echo Done
Done
3. Kaldi 目录介绍
- egs :此目录为 Kaldi 例子目录,其中例子包含了不乏语音识别、语种识别、声纹识别、关键字识别等。
- misc : 此目录包含了一些 pdf、以及相关 docker、htk 等资源
- scripts: 此目录只用来存放 Rnnlm,以及相应的运行脚本。
- src : 此目录为 Kaldi 的源代码目录,Kaldi 的多数算法的源代码都存放于此,其中不乏GMM、Ivector、Nnet等一系列的算法。
- tools: 此目录主要存放 Kaldi 依赖库的安装脚本
- windows: 此目录为在 Windows 平台运行所必须的脚本以及相关的执行程序。
子目录egs
- Aishell : 此目录为中文语音识别和声纹识别相关例子。
- Aishell2 : 此目录主要为中文语音识别例子,但是针对 Aishell 在脚本方面更加规整。
- ami : 此目录主要涉及到多信道语音识别的例子。
- an4 : 此例子为 CMU 提供语音识别例子,并没有涉及神经网络。
- apiai_decode: 此例子为解码器使用的例子,其中包含了如何使用预训练模型,这里主要针对的是 Nnet3 解码。
- aspire: 此为ASpIRE 挑战赛的例子,其中包含了怎样使用噪声数据构建多条件数据的例子。
- aurora4: 此例子主要介绍 RBM 预训练。
- babel: 此例子主要是用来训练 KWS (Key Word Search)。
- babel_multilang: 此例子为训练多语音 KWS。
- bentham: 手写笔识别的例子。
- bn_music_speech : 音乐与语音区分的例子。
- callhome_diarization : 说话人分割的例子。
- callhome_etyptian: 埃及语语音识别例子。
- chime1-5 : 主要针对 CHiME 竞赛开放的例子。
- cigar : 图像分类的例子。
- commonvoice: Mozilla Common Voice 语音识别的例子。
- csj : 日语 语音识别例子。
- dihard_2018 : DiHARD Speech Diarization CHALLENGE 的例子。
- fame : 富里西语语音识别和声纹识别的例子。
- farsdat: 主要用来声学语音研究和语音识别的例子。
- fisher_callhome_spanish : 使用 Callhome 预料进行语音识别的例子。
- fisher_english: 英文双声道 8000 Hz 对话电话语音数据集的语音识别例子。
- fisher_swbd: 包含 fisher 数据集以及 swbd 数据集的语音识别例子。
- gale_arabic: 阿拉伯语语音识别例子。
- gale_mandarin: 普通话语音识别例子。
- gp: 全球电话语音识别例子(多语种语音识别例子)。
- heroico: 西班牙语音识别例子。
- houst: 普通话电话语音识别例子。
- hub4_english : 英语新闻广播语音识别例子。
- hub4_spanish: 西班牙新闻广播语音识别例子。
- iam: IAM 手写笔识别例子。
- iban: 语音识别例子。
- ifnenit: 阿拉伯语手写笔识别例子。
- librispeech: 英语语音识别例子。
- lre/lre07 : 语种识别例子。
- madcat_ar : 手写笔识别例子。
- madcat_zh: 中文手写笔识别例子。
- mini_librispeech: 英语语音识别例子。
- mult_en: 英语 LVCSR 例子。
- pub: RNNLM 模型构建例子。
- reverb: REVERB 挑战赛例子。
- rimes: 法语手写笔识别例子。
- rm: 英语语音识别例子,包含了如何进行迁移学习。
- sitw: sitw 说话人识别挑战赛的例子。
- sprakbanken: 丹麦语语音识别例子。
- sprakbanken_swe: 瑞典语语音识别例子。
- sre08/10/16: 说话人识别的例子。
- svhn: 图像分类的例子。
- swahili: 班图人语 语音识别例子。
- swab: 双声道对电话语音识别例子。
- tedium: 英语语音识别例子。
- thchs30: 普通话语音识别例子。
- tidigits: 基础语音识别的例子。
- timit: 主要是 GMM/HMM 语音识别例子。
- tunisian_msa: 阿拉伯语音识别例子。
- uw3:OCR 识别例子。
- voxceleb: 说话人识别例子。
- vystadial_cz: 捷克语语音识别例子。
- voxforge: 基础语音识别例子,以及对应的在线 demo 的例子。
- vystadial_en: 英文语音识别例子。
- wsj: wsj 英文语音识别例子。
- yesno: 独立词语音识别例子。
- yomdle_fa/korean/russian/tamil/zh: OCR 识别例子。
- zeroth_korean: 朝鲜语语音识别例子。
子目录src
- base : Kaldi 基础目录,主要包括与 Kaldi 项目相关的基础宏定义、类型定义等。
- bin : Kaldi 的基础 bin 目录,主要是包括基础的执行程序。例如,查看 tree 信息、矩阵拷贝等基础操作。
- cudamatrix : Kaldi 矩阵计算相关 GPU 计算目录
- matrix : Kaldi 矩阵计算相关 CPU 计算目录
- itf : Kaldi 相关的 interface
- hmm : Kaldi 相关隐马尔可夫算法的代码目录
- utils : Kaldi 相关,语音算法无关的工具目录,例如,线程操作、io操作、文本操作等。
- probe : Kaldi 相关的 exp(指数) 测试目录
- transform : Kaldi 相关的特征转换算法目录
- fstext : Kaldi 中 fst 相关的算法基础目录
- fstbin : Kaldi 中 fst 对应的算法执行文件夹
- feat : Kaldi 相关的特征提取算法目录
- featbin : Kaldi 相关的特征提取可执行目录
- gmm : Kaldi 相关的 GMM 算法基础目录
- gmmbin : Kaldi 相关的 GMM 算法可执行文件目录
- ivector : Kaldi 相关的 ivector 算法基础目录
- ivectorbin : Kaldi 相关的 ivector 算法的可执行目录,以及基于能量的 vad 执行目录。
- kws : Kaldi 相关的关键字搜索基础算法目录
- kwsbin : Kaldi 相关的关键字搜索执行目录
- lat : Kaldi 相关的网格生成基础算法目录
- latbin : Kaldi 相关的网格生成算法的可执行文件目录
- lm : Kaldi 自带的语言模型基础算法目录
- lmbin : Kaldi 相关语音模型的可执行文件目录
- nnet : Kaldi 相关的 nnet1 基础算法实现目录
- nnetbin : Kaldi nnet1相关的算法可执行文件目录
- nnet2 : Kaldi nnet2 相关的基础算法实现目录
- nnet2bin : Kaldi nnet2 相关的算法可执行文件目录
- nnet3 : Kaldi nnet3 相关基础算法实现目录
- nnet3bin : Kaldi nnet3 相关实现算法的可执行文件目录
- online : Kaldi online1 相关解码算法的实现目录
- onlinebin : Kaldi online1 相关解码器算法的可执行目录
- online2 : Kaldi online2 相关解码器算法的实现目录
- online2bin : Kaldi online2 相关解码器算法的可执行目录
- rnnlm : Kaldi rnnlm 相关的语音模型基础算法实现目录
- rnnlmbin : Kaldi rnnlm 相关的语音模型的可执行目录
- sgmm2 : Kaldi sgmm2 相关的子空间 GMM 基础算法实现目录
- sgmm2bin : Kaldi sgmm2 相关的子空间 GMM 基础算法可执行目录
- tfrnnlm : Kaldi 相关的 Tensorflow rnnlm 基础算法目录
- tfrnnlmbin : Kaldi 相关的 Tensorflow rnnlm 基础算法实现的可执行目录
训练、识别、测试
语料下载
www.openslr.org
本例实验 THCHS-30 ,所以下载 https://www.openslr.org/18/
下载完成后解压至任意文件夹,这里放在
/home/kaldi/media/thchs30-openslr
然后修改脚本:
cd kaldi/egs/thchs30/s5
vim cmd.sh
#export train_cmd=queue.pl
#export decode_cmd="queue.pl --mem 4G"
#export mkgraph_cmd="queue.pl --mem 8G"
#export cuda_cmd="queue.pl --gpu 1"
export train_cmd=run.pl
export decode_cmd="run.pl --mem 4G"
export mkgraph_cmd="run.pl --mem 8G"
export cuda_cmd="run.pl --gpu 1"
修改run.sh
vim run.sh
路径改为语料的存放路径:
#corpus and trans directory
#thchs=/nfs/public/materials/data/thchs30-openslr
thchs=/home/kaldi/media/thchs30-openslr
然后运行 run.sh 训练
测试结果
去egs下,打开voxforge,里面有个online_demo,直接考到thchs30下。
在online_demo里面建2个文件夹online-data work,
在online-data下建两个文件夹audio和models,
audio下放你要回放的wav,
models建个文件夹tri1,把s5下的exp下的tri1下的final.mdl和35.mdl考过去。
把s5下的exp下的tri1下的graph_word里面的words.txt,和HCLG.fst,考到models的tri1下。
修改online_demo
的run.sh
:
#注释掉这段
#if [ ! -s ${data_file}.tar.bz2 ]; then
# echo "Downloading test models and data ..."
# wget -T 10 -t 3 $data_url;
# if [ ! -s ${data_file}.tar.bz2 ]; then
# echo "Download of $data_file has failed!"
# exit 1
# fi
#fi
#tri2b_mmi改成tri1
#ac_model_type=tri2b_mmi
ac_model_type=tri1
#model为final.mdl
#online-wav-gmm-decode-faster --verbose=1 --rt-min=0.8 #--rt-max=0.85\
# --max-active=4000 --beam=12.0 --acoustic-scale=0.0769 \
# scp:$decode_dir/input.scp $ac_model/model
online-wav-gmm-decode-faster --verbose=1 --rt-min=0.8 --rt-max=0.85\
--max-active=4000 --beam=12.0 --acoustic-scale=0.0769 \
scp:$decode_dir/input.scp $ac_model/final.mdl
运行./run.sh
就是开始识别了。
提示./run.sh –test-mode live
命令就是从麦克风识别。
如果报错 “没有online-wav-gmm-decode-faster” ,就去src的online和onlinebin下面重新make clean
然后 make
结果:
SIMULATED ONLINE DECODING - pre-recorded audio is used
The (bigram) language model used to build the decoding graph was
estimated on an audio book's text. The text in question is
"King Solomon's Mines" (http://www.gutenberg.org/ebooks/2166).
The audio chunks to be decoded were taken from the audio book read
by John Nicholson(http://librivox.org/king-solomons-mines-by-haggard/)
NOTE: Using utterances from the book, on which the LM was estimated
is considered to be "cheating" and we are doing this only for
the purposes of the demo.
You can type "./run.sh --test-mode live" to try it using your
own voice!
online-wav-gmm-decode-faster --verbose=1 --rt-min=0.8 --rt-max=0.85 --max-active=4000 --beam=12.0 --acoustic-scale=0.0769 scp:./work/input.scp online-data/models/tri1/final.mdl online-data/models/tri1/HCLG.fst online-data/models/tri1/words.txt 1:2:3:4:5 ark,t:./work/trans.txt ark,t:./work/ali.txt
File: 1
刘 宗 下 今年 六十 岁 五十 年代 进入 海外 就 不 工作 一 久久 斯 年 十二月 任 外交 安 堡 首席 秘书
File: 2
福安 广告 公司 方面 说 他们 并不 赞成 差 朦胧 重 广告 但 上头 有 压力 没有 谈
File: 3
他 奇怪
自己 不仅 无疑 死去 前 就 由 中 与 对手 劈 杀 较量 跃跃欲试 的 行径
File: 4
塞 军 为 职业 运动员 最 常 二十四 千米 业余 运动员 进场 二十一 前 青年 运动员 进场 时 五 千米
File: 5
今年 来 影坛 哨所 魔鬼 亚 辖 耀 涛 文 刀 杀人 鲜 血淋淋 的 凶杀 场面 的 承诺 某些 娱乐 篇 必不可少 的 内容
可见 ,准确度较低