kaldi

kaldi中CD-DNN-HMM网络参数更新公式手写推导

Deadly 提交于 2019-12-03 13:06:01
在基于DNN-HMM的语音识别中,DNN的作用跟GMM是一样的,即它是取代GMM的,具体作用是算特征值对每个三音素状态的概率,算出来哪个最大这个特征值就对应哪个状态。只不过以前是用GMM算的,现在用DNN算了。这是典型的多分类问题,所以输出层用的激活函数是softmax,损失函数用的是cross entropy(交叉熵)。不用均方差做损失函数的原因是在分类问题上它是非凸函数,不能保证全局最优解(只有凸函数才能保证全局最优解)。Kaldi中也支持DNN-HMM,它还依赖于上下文(context dependent, CD),所以叫CD-DNN-HMM。在kaldi的nnet1中,特征提取用filterbank,每帧40维数据,默认取当前帧前后5帧加上当前帧共11帧作为输入,所以输入层维数是440(440 = 40*11)。同时默认有4个隐藏层,每层1024个网元,激活函数是sigmoid。今天我们看看网络的各种参数是怎么得到的(手写推导)。由于真正的网络比较复杂,为了推导方便这里对其进行了简化,只有一个隐藏层,每层的网元均为3,同时只有weight没有bias。这样网络如下图: 上图中输入层3个网元为i1/i2/i3(i表示input),隐藏层3个网元为h1/h2/h3(h表示hidden),输出层3个网元为o1/o2/o3(o表示output)。隐藏层h1的输入为

语音识别学习记录 [kaldi的nnet1 nnet2 nnet3了解一下]

流过昼夜 提交于 2019-12-03 04:12:24
根据我的理解,nnet应该是kaldi中已经实现的神经网络,根据不同的参数可以定义不同的神经网络,而nnet1、nnet2、nnet3是实现的三个版本。对kaldi了解还不是很多,先看一下别人介绍的kaldi中的nnet. 下文中的概念有一部分还不太明白,等实践后再发文说明一下。下文是对nnet各个版本的介绍。 概览 type author CPU/GPU feature nnet1 Karel GPU单卡训练 使用pre-training,使用early stopping nnet2 Dan 支持多GPU训练,以及多CPU多线程 使用固定epoch个数,最后几个epoch参数平均 nnet3 Dan 是nnet2的扩展 支持更多的网络类型(比如RNN/LSTM) Karel’s DNN和Dan’s DNN格式不兼容,可以使用egs/rm/s5/local/run_dnn_convert_nnet2.sh进行格式转化。 Karel's nnet介绍 训练流程 steps/nnet/make_fmllr_feats.sh 获取特征 steps/nnet/pretrain_dbn.sh rbm预训练 steps/nnet/train.sh 使用mini-batch SGD进行训练 steps/nnet/train_mpe.sh sMBR序列区分性训练,学习率固定设为1e-5,训练3

Kaldi解码

蓝咒 提交于 2019-12-03 04:11:21
online2-wav-nnet3-latgen-faster 在线解码,文件输入输出 decode.sh运行程序 ./online2-wav-nnet3-latgen-faster --do-endpointing=false --frames-per-chunk=20 --extra-left-context-initial=0 --online=true --config=exp/chain/tdnn7q_sp_online/conf/online.conf --min-active=200 --max-active=7000 --beam=15.0 --lattice-beam=6.0 --acoustic-scale=1.0 --word-symbol-table=exp/chain/tdnn7q_sp/graph/words.txt exp/chain/tdnn7q_sp_online/final.mdl exp/chain/tdnn7q_sp/graph/HCLG.fst ark:data/call_center_26s_hires/split1/1/spk2utt 'ark,s,cs:wav-copy scp,p:data/call_center_26s_hires/split1/1/wav.scp ark:- |' 'ark:|lattice-scale -

kaldi 1d-CNN源码

僤鯓⒐⒋嵵緔 提交于 2019-12-03 04:07:08
CNN nnet/nnet-convolutional-component.h 假设CNN相关参数如下 ###输入相关参数 num_splice= 3 #语音数据的左右context,此处左右一帧 path_stride= 5 #一帧特征的维度 input_dim=path_stride *num_splice = 15 #输入特征的维度 ###滤波器相关参数 num_filters= 2 #滤波器个数 patch_dim= 2 #滤波器在一帧特征上面的维度 filter_dim=num_splice *patch_dim = 6 #滤波器在3帧特征上的维度 patch_step= 1 #patch移动的步长 ###输出相关参数 num_patch= 1 + (patch_stride - patch_dim) / patch_step= 4 #每个滤波器在特征上面做卷积的次数(即输出个数) output_dim=num_patch *num_filters = 8 #cnn的输出维度 ###多帧并行的参数 frame_num= 2 #一次计算特征的个数 PropagateFnc 首先将特征按照splice重新组织成vectorized_feature_patches,然后跟对应的filters做卷积 BackpropagateFnc 计算对输入的梯度(向后继续传播) Update

Kaldi随笔(二)

馋奶兔 提交于 2019-12-03 04:06:58
今天思考的还是昨天那个问题的延续。 现在已经知道了nnet-forward输出的矩阵的每一列对应的是一个pdf,我的最终目的是想要知道每一帧(除了sil)转换成每一个phone的概率是多少。 首先我看到了Kaldi的kaldi-trunk\egs\wsj\s5\steps\nnet下有一个align.sh的脚本。 然后我找到了之前跑TIMIT实验的时候这个脚本处理后得到的ali文件,解压之后查看了一下文件内容(大概形式): FAEM0_SI1392 2 1 4 3 3 3 3 3 3 6 5 472 471 471 471 471...... 3281 3281 3336 3335 3335 3335 2 4 3 3 3 3 3 3 6 FAEM0_SI2022 2 1 4 3 3 3 3 3 3 3 6 5 5 5 5 5 5 5 5 2...... 406 405 405 405 405 405 2 1 1 1 1 4 3 3 3 3 6 5 每一个句子对应了一行数据,这一行的数据元素的个数是474个。 然后我又找到了当时的训练数据的特征文件,用nnet-forward跑了一遍得到矩阵文件。 矩阵文件的中一个句子的对应的矩阵的行数也是474。 与此同时,还有一个发现是ali文件里面最大的数字是4090。 4090是什么? 这就要用到上一篇博文里面提到了show

ubuntu下安装kaldi

匿名 (未验证) 提交于 2019-12-03 00:34:01
刚刚转到kaldi,电脑装了ubuntu系统,然后在上面安装kaldi,折腾了两天,终于装好了。 安装kaldi前先安装Git,Ubuntu下Git的安装与使用见教程:https://www.linuxidc.com/Linux/2016-09/135527.htm 装好Git后开始安装kaldi 具体安装方法如下: sudo apt-get install autoconf sudo apt-get install automake sudo apt-get install gcc sudo apt-get install libtoolsudo apt-get install gcc sudo apt-get install libtool sudo apt-get install subversion sudo apt-get install libatlas-dev sudo apt-get install libatlas-base-dev sudo apt-get install gfortran sudo apt-get install g++ sudo apt-get install wget sudo apt-get install perl sudo apt-get install build-essential sudo apt-get install

kaldi 说话人自适应

匿名 (未验证) 提交于 2019-12-03 00:27:02
自适应的作用是,补偿实际数据与已经训练的三音素模型中声学条件不匹配的问题,包括说话人特性(说话方式、口音等)及环境特性(如录音设备、房间混响等)。在GMM-HMM模型中,自适应方法有特征空间变换和模型空间变换。Kaldi中主要采用的是特征空间变换方法: LDA、MLLT和fMLLR,其本质都是 在训练过程中估计变换矩阵,然后构造变换后的特征,再迭代训练新的声学模型参数。 LDA+MLLT针对环境特性,拼接上下文多帧数据,再通过特征变换进行降维处理,因为与说话人无关,所以估计的是全局矩阵。fMLLR针对说话人特性,基于每个说话人或每个utterance进行变换矩阵估计。在DNN-HMM模型中,由于DNN的鉴别特性,GMM下的自适应方法不能直接拿来用,DNN下的自适应方法主要有线性变换、正则项法、子空间法(i-vector)。 自适应的作用是,补偿实际数据与已经训练的三音素模型中声学条件不匹配的问题,包括说话人特性(说话方式、口音等)及环境特性(如录音设备、房间混响等)。在GMM-HMM模型中,自适应方法有特征空间变换和模型空间变换。Kaldi中主要采用的是特征空间变换方法: LDA、MLLT和fMLLR,其本质都是 在训练过程中估计变换矩阵,然后构造变换后的特征,再迭代训练新的声学模型参数。 LDA+MLLT针对环境特性,拼接上下文多帧数据,再通过特征变换进行降维处理

kaldi中特征变换

匿名 (未验证) 提交于 2019-12-03 00:22:01
简介 Kaldi 目前支持多种特征和模型空间的变换与映射。特征空间变换和映射通过工具来处理(本质上就是矩阵),以下章节将介绍: 全局线性或仿射变换 说话人无关或单一说话人( per-speaker )或者( per-utterance )单一句子自适应 句子-说话人( Utterance-to-speaker )和说话人-句子( speaker-to-utterance )映射 组合变换 估计变换时的静音权重 变换,投影或者其他没有特定说话人的特征操作包括: 线性判别性分析(LDA) 帧拼接和差分特征计算 异方差的线性判别性分析(HLDA) 全局半协方差/最大似然线性变换 全局变换主要通过说话人自适应的方式应用: 全局GMLLR/fMLLR变换 线性声道长度归一化 指数变换 谱均值和方差归一化 下面我们将介绍回归树以及用到回归树的变换: 为自适应构建回归类树 全局线性或仿射特征变换 Matrix<BaseFloat> The Tableconcept )中。 变换可以通过程序transform-feats应用于特征上,语法如下 Specifying Tableformats: wspecifiers and rspecifiers Extendedfilenames: rxfilenames and wxfilenames ).这个程序通常用于管道的一部分。

kaldi快速入门(基于centos7)

匿名 (未验证) 提交于 2019-12-03 00:19:01
1. kaldi安装包(https://github.com/kaldi-asr/kaldi/ 上可以下载到) 2. 语音模型包(http://www.kaldi-asr.org/models.html 官网上可以下载到) 3. 解压kaldi安装包,进入tools目录,按照INSTALL文件的提示进行安装,主要有两个步骤 (1)extras/check_dependencies.sh 校验环境,根据校验结果安装程序包, 安装完python3后,需执行以下命令ln -s /usr/bin/python3.6 /usr/bin/python3 建立一个python3的软连接 4.进入{kaldi}/src目录,按照INSTALL文件的提示进行安装,主要有三个步骤(假设cpu线程数是4个): (1)./configure --shared (3)make -j 4 5. 解压语音包,并放入到{kaldi}/egs 目录 6. 进入{kaldi}/src/online2bin目录,执行命令: 文章来源: kaldi快速入门(基于centos7)

sclite (SCTK) `make check` faliure, C++/perl/Cygwin, Safe to use Perl4 stuff?

痴心易碎 提交于 2019-11-29 12:43:29
I am currently trying to install NIST's sclite , which is part of SCTK 2.4.0 ( github or newer version ). I am attempting the install on Cygwin in bash . The installation is done using make . I have gotten past the make configure and make all parts of the installation. This didn't come without some effort (See the SO posts on the first ( file not recognized ) and second (template/scoping) problems). When I get to the make check part of the install, a lot of the checks/tests pass, but then I get the following error. Testing acomp.pl No tests defined for acomp.pl make[2]: Leaving directory '