2016-01-16 19:41:22 dujiajiyi_xue5211314 阅读数 3689

       
基于Ubuntu的Kaldi安装教程

前3篇博客,自己一直在写caffe吧,自己最开始是想用caffe做语音识别,然后去阅读了它的源码,发现,现在caffe对于语音识别还是没有那么完善吧,当然了是我自己想的。自己询问过一些人,他们提出的是,可以直接用频谱图去做,自己感觉不是很可行吧。没办法,自己去安装kaldi。kaldi安装要比caffe要简单的多。自己是在Ubuntu 14.04下安装的。接下来写一下自己所安装的步骤吧。

在安装之前,一些必不可少的库文件是必须的,apt -get,subversion,automake,autoconf,libtool,g++,zlib,libatal,weget

一基本库的安装:这里具体的安装方法是 

(1)sudo apt-get install libtool

(2)sudo apt-get install autoconf

(3)sudo apt-get install wget

(4)sudo apt-get install perl

(5)sudo apt-get install subversion

(6)sudo apt-get install build-essential

(7)sudo apt-get install gfortran

(8)sudo apt-get install libatlas-dev

(9)sudo apt-get install libatlas-base-dev

(10)sudo apt-get install zlib1g-dev(中间是数字1)

如果安装出现 function gensub never defined,则需要安装gawk

sudo apt-get install gawk.

第二:kaldi-trunk安装(这里自己选择的是Ubuntu系统,自己现在在Redhat下进行安装,现在还在进行阶段,遇到了一些错误,主要就是atlas的安装)

首先(1)下载kaldi-trunk,指令是 

svn co svn://svn.code.sf.net/p/kaldi/code/trunk kaldi-trunk

(2)然后进入tool目录

cd kaldi-trunk/tool

然后执行make 这里也可以运用指令maker -j 4 这里的4是cpu的核心数,执行速度会加快。

(3)然后 cd ..

cd src就是退出tool目录,进入sr目录。

然后执行./configure

make depend(依赖库的检查)

make(make -j 4)

这里kaldi的cpu模式下就编译成功了。就可以运行一下简单的执行实例。

在kaldi中,egs是一些存在的实例。

cd ../egs/yesno/s5,这里的省略号就是你的kaldi的目录。

./run.sh

然后执行结果很快就会出现。

到现在为止基于cpu的kaldi已经执行成功。接下来自己会介绍Redhat下kaldi的安装,以及加入gpu。


2018-10-02 13:39:09 zyziszy 阅读数 8031

这3篇博客,详细总结和记录了我编译安装kaldi和两种用kaldi进行中文语音识别的过程,包括如何kaldi的简单介绍、环境的配置、相关模型的训练、导入,算是自己近期学习的一个总结,也希望可以帮助到需要的人~~~

本篇博客主要记录了我编译安装kaldi的过程

另外两篇博客的连接

  1. kaldi中文语音识别(2)——用thch30数据集做中文语音识别
  2. kaldi中文语音识别(3)——用cvte模型做中文语音识别

kaldi是什么

kaldi是一个用C++写的语音识别工具包。kaldi旨在供语音识别研究员使用。当然,kaldi也可以用作声纹识别。关于他的详细介绍可以访问kaldi的官方文档

kaldi与中文语音识别

感谢很多大神与科研工作者在kaldi上开源了他们的数据集和训练模型,让我这样的小白可以站在巨人的肩膀上前行。目前我所了解到有3个开源的中文语音识别例子。

  1. 清华大学开源的thchs30数据集(疯狂为CSLT打电话~~~)
  2. CVTE公司开源的CVTE Mandarin Model模型
  3. Beijing Shell Shell Technology公司开源的aishell数据集

如果有同学知道其他的数据集or模型,中英文皆可,欢迎联系我补充啊~

编译与安装kaldi

注意:为了提高训练的速度,kaldi最好安装在GPU云服务器下。如果没有服务器话,使用虚拟机应该也是可以的,但一定要分配足够的内存空间和存储空间。下面我就以我使用的centos服务器为例,介绍kaldi的编译与安装。

编译与安装大概分为3步

  1. 安装git、下载kaldi的源码
  2. 安装编译所需依赖包
  3. 配置、编译kaldi

1.kaldi的下载

kaldi的所有源码开源在了GitHub上,可以直接git下载到服务器上,首先得确保服务器上安装了git,如果没有安装的话,就先安装git

sudo yum install git -y

接着git clone下载kaldi

git clone https://github.com/kaldi-asr/kaldi.git

下载完成kaldi源码后,我们将得到如下一个文件结构的目录。

kaldi/
├── COPYING
├── egs/				//egs目录里存放了使用kaldi完成的开源语音识别/声纹识别项目
├── INSTALL				//编译安装kaldi的指导
├── misc/
├── README.md
├── scripts/
├── src/				//src文件夹里存放了kaldi源码
├── tools/				//tools文件夹里存放了语音处理的工具包
└── windows/				//windows文件夹存放了在windows下编译安装kaldi的文件

2.安装编译所需要的依赖包

编译之前需要确操作系统中安装有如下包

  subversion
  automake
  autoconf
  libtool
  g++
  zlib
  libatal
  wget
  sox

首先进入到kaldi/tools目录下,接着在调用check_dependencies.sh脚本检查系统中的包是否安装完全

cd kaldi/tools
extras/check_dependencies.sh

如图所示,这个shell脚本会提示系统需要安装的包,按照提示安装即可。

img

安装完成后再次运行这个脚本,如果提示OK就可以开始进行kaldi的编译。

3.编译kaldi

首先编译tools,在在kaldi/tools目录下输入

make

我使用的服务器是i7有8个核心,因此输入make -j 8可以使用8个核心一起编译,加快编译速度。

之后转到kaldi/src目录下,输入如下命令

cd ../src

在src目录下首先要运行configure进行配置,由于每个人的cuda版本、安装路径不一定相同,所以这里需要根据自己的服务器情况进行修改,如下是我的configure配置方案,仅供参考。

./configure --static \
            --use-cuda=yes \
            --cudatk-dir=/home/zy/cuda/cuda-8.0 \
            --mathlib=OPENBLAS \
            --openblas-root=../tools/OpenBLAS/install \
            --threaded-math=no \
            --static-math=yes \
            --static-fst=yes \
            --fst-root=../tools/openfst

配置完成后,就可以进行src的编译了

make depend
make

同样,如果是多核CPU的话,你可以使用make depend -j 8make -j 8加快编译速度

完成后会有提示成功和失败,结束make后就算完成了kaldi的编译与安装了~

用kaldi进行中文语音识别

完成kaldi的安装后,就可以用kaldi做语音识别了~,下面分别是我用kaldi做的两种不同中文语音识别的博客连接。

  1. demo(1)——用thch30做中文语音识别
  2. demo(2)——用cvte做中文语音识别

参考资料:

  1. CSDN博客:Kaldi的下载安装与编译
  2. kaldi-ctc的安装、编译、测试
{
	Author: "byr-zyziszy",
	Mail: "zyziszy@foxmail.com",
	Github: "https://github.com/zyzisyz",
	Date: "2018-10-2"
}
2017-04-07 10:37:46 shichaog 阅读数 1297

CSND已永久停更,最新版唯一来源点击下面链接跳转:
语音增强和语音识别网页书

下载代码以及安装

$git clone https://github.com/kaldi-asr/kaldi

根据INSTALL文件,先完成tools文件夹下的编译和安装,然后在编译src目录下源码。

$cd kaldi/tools
$extras/check_dependencies.sh
$make -j4 

然后切换到src目录

$cd ../src
$./configure
$make depend
$make -j4
2019-04-15 13:36:15 qq_44906416 阅读数 108
               

在上一篇blog中简单的介绍了Kaldi的安装方法 有趣的开源软件:语音识别工具Kaldi (一) 在这篇blog中继续Kaldi模型训练的步骤,介绍一下在模型训练之前的一些数据准备的工作。因为我也是正在学习语音识别和Kaldi,有些地方不一定说的很正确,如果发现错误,还请指正。

在Kaldi源代码树中,有一个叫做egs的文件夹,在这个文件夹中保存着一些Kaldi在公共数据集上的训练步骤(shell脚本)以及测试的结果。其中,中文的语音识别公共数据集一共有三个,分别是

  • gale_mandarin: 中文新闻广播数据集(LDC2013S08, LDC2013S08)
  • hkust: 中文电话数据集(LDC2005S15, LDC2005T32)
  • thchs30: 清华大学30小时的数据集,可以在http://www.openslr.org/18/下载

在这blog中使用的是hkust数据集进行实验。

目录结构

hkust数据集相关的脚本以及实验结果位于kaldi/egs/hkust,它的目录结构如下

.├── README.txt└── s5    ├── cmd.sh    ├── conf    │   ├── cmu2pinyin    │   ├── decode.config    │   ├── fbank.conf    │   ├── mfcc.conf    │   ├── pinyin2cmu    │   └── pinyin_initial    ├── local    │   ├── create_oov_char_lexicon.pl    │   ├── ext    │   │   ├── 195k_chinese_word2char_map    │   │   ├── hkust_word2ch_tran.pl    │   │   ├── score_basic_ext.sh    │   │   └── score.sh    │   ├── hkust_data_prep.sh    │   ├── hkust_extract_subdict.pl    │   ├── hkust_format_data.sh    │   ├── hkust_normalize.pl    │   ├── hkust_prepare_dict.sh    │   ├── hkust_segment.py    │   ├── hkust_train_lms.sh    │   ├── nnet    │   │   ├── run_cnn.sh    │   │   ├── run_dnn.sh    │   │   └── run_lstm.sh    │   ├── nnet2    │   │   ├── run_5d.sh    │   │   └── run_convnet.sh    │   ├── nnet3    │   │   ├── run_ivector_common.sh    │   │   ├── run_lstm.sh    │   │   └── run_tdnn.sh    │   ├── score_basic.sh    │   ├── score_sclite_conf.sh    │   ├── score_sclite.sh    │   └── score.sh    ├── path.sh    ├── RESULTS    ├── run.sh    ├── steps -> ../../wsj/s5/steps    └── utils -> ../../wsj/s5/utils

其中README.txt是对于这个数据集的一些说明性的东西,对于这个数据集不熟悉的话可以去看一下。

s5/run.sh包含了在这个数据集上所有的训练步骤,包括数据预处理、训练以及测试gmm/dnn/lstm/blstm/tdnn等模型、实验结果统计在内的各种脚本。理论上来说只要相关环境配置正确,运行run.sh就能完成整个训练步骤。但是Kaldi的官方文档还是建议能够将这个文件里面的脚本一步一步粘贴到shell里面运行。这样既能够容易的发现错误,又可以对Kaldi整个运行的步骤有所了解。

s5/RESULTS里面保存着最近的实验结果。这边稍简单贴几条(CER也就是character error rate):

  • mono0a(mono-phone的GMM-HMM): %CER 80.89
  • tri1(最简单的tri-phone GMM-HMM): %CER 60.01
  • tri5a_mmi_b0.1(用MMI损失函数): %CER 43.95
  • dnn5b_pretrain-dbn_dnn: %CER 39.42
  • cnn5c_pretrain-dbn_dnn: %CER 38.80
  • tdnn_sp: %CER 33.79
  • lstm_sp_ld5: %CER 33.51

s5/conf就是一些训练所要用到的配置文件。

s5/{local, steps, utils}里面则是run.sh所要用到的一些脚本文件。

数据处理

在run.sh最开始的部分主要是一些数据的预处理步骤, 在运行它之前首先把hkust的数据放在某个固定的地方(在STEP1中会用到)。然后切换到run.sh所在的路径,在我的计算机上,它位于~/Documents/kaldi/egs/hkust/s5

$ pwd/home/ling0322/Documents/kaldi/egs/hkust/s5

因为这个实验中是单机跑,所以需要运行cmd.sh中的几条命令,并且把queue.pl修改成run.pl

$ export train_cmd="run.pl --mem 8G"$ export decode_cmd="run.pl --mem 8G"$ export mkgraph_cmd="run.pl --mem 12G"

把这些环境变量export出去,接着可以开始一步一步执行run.sh中的脚本了

STEP 1

$ local/hkust_data_prep.sh /home/ling0322/Documents/hkust-data/LDC2005S15 /home/ling0322/Documents/hkust-data/LDC2005T32

这一步主要做的是将和hkust的数据复制到data文件夹下,以及一些数据格式的转换工作,期间还会使用到mmseg对文本做简单的分词。

STEP 2

下一步工作是生成音素词典,音素词典记录着每一个词发音所包含的音节序列。比如中文词语的音素就可以是声母韵母拆开的序列,依据这样的规则像“测试”的音素序列就可以是“c e4 sh i4”。

不过要成功运行这段脚本,还需要安装一些它依赖的环境

$ sudo apt install gawk swig python-numpy python-dev$ local/hkust_prepare_dict.sh

在输出中简单检查一下输出,特别是检查以下两行的第一列数字,如果是0的话就是上面某一步骤出错了

10894 data/local/dict/lexicon-ch/words-ch-oov.txt19467 data/local/dict/lexicon-ch/lexicon-ch-iv.txt

STEP 3

接下去是准备tri-phone模型的决策树question集合以及编译Transducer L。Transducer L用于将音素序列映射成词语序列。关于各个Transducer有什么用可以去参考Some Kaldi Notes。要具体弄清楚Transducer到底是什么,还是需要去看这篇paper:Speech Recognition with Weighted Finite-State Transducers

$ utils/prepare_lang.sh data/local/dict "<UNK>" data/local/lang data/lang

接着是去训练3-gram的语言模型,由这个语言模型生成Transducer G,然后将L和G这两个Transducer拼接起来,产生Transducer LG。Transducer LG可以用来对给定的输入的音素序列,使用3-gram语言模型(G)找出最有可能的词语序列。

$ local/hkust_train_lms.sh$ local/hkust_format_data.sh

看到

Done training LM of type 3gram-mincount

以及

hkust_format_data succeeded

这一步就成功了

STEP 4

现在可以开始从声音数据中抽取MFCC特征。MFCC中文简称为梅尔频率倒谱系数,是一种尽可能接近人类听觉系统而抽出的一种声音特征的表示方法。这个略微偏向信号处理,具体过程可以去参考语音信号处理相关的书。

在执行下面步骤之前,最好再次检查确认一下$train_cmd是否设置正确

$ echo "$train_cmd"run.pl --mem 8G

然后运行

$ mfccdir=mfcc$ for x in train dev; do $   steps/make_mfcc.sh --cmd "$train_cmd" --nj 10 data/$x exp/make_mfcc/$x $mfccdir || exit 1;$   steps/compute_cmvn_stats.sh data/$x exp/make_mfcc/$x $mfccdir || exit 1;$ done

STEP 5

最后一步是清理训练数据,移除一些没用的片段

$ utils/fix_data_dir.sh data/trainfix_data_dir.sh: kept 197387 utterances out of 197391fix_data_dir.sh: old files are kept in data/train/.backup

至此,数据准备以及预处理阶段就成功完成了,接着就可以开始训练模型阶段了。

           
没有更多推荐了,返回首页