kaldi部分训练方法

语音识别基本概念

DNN-HMM模型

语音识别框架都是基于GMM-HMM的,然而浅层的模型结构的建模能力有限,不能捕捉获取数据特征之间的高阶相关性。而DNN-HMM系统利用DNN很强的表现学习能力,再配合HMM的系列化建模能力,在很多大规模语音识别任务中都超过了GMM模型。

下图给出一个DNN-HMM系统的结构图。在这个框架中,HMM用来描述语音信号的动态变化,用DNN的每个输出节点来估计连续密度HMM的某个状态的后验概率。在Kaldi中,该模型的整体输入是fbank特征,而后DNN对所有聚类后的状态(如状态绑定后的三音素)的似然度进行建模,得到后验概率。再结合HMM对其进行解码。

DNN的建模对象

我们知道,语音识别问题可表示为找到使得概率 P(W|O) P ( W | O ) P(W|O)最大的句子:

W=argmaxWP(W|O)=argmaxWp(O|W)P(W)/P(W)=argmaxWp(O|W)P(W) W = a r g max W P ( W | O ) = a r g max W p ( O | W ) P ( W ) / P ( W ) = a r g max W p ( O | W ) P ( W )

\begin{split} W & = arg \max\limits_{W}P(W|O) \\& = arg \max\limits_{W}p(O|W)P(W)/P(W) \\& = arg \max\limits_{W}p(O|W) P(W)\end{split}
其中 p(w) p ( w ) p(w)是语言模型, p(o|w) p ( o | w ) p(o|w)就是声学模型。用Viterbi解码的方式对其进行展开:

p(o|w)=∑qp(o,p|w)p(q|w)≈maxπ(q0)∏t=1Taqt−1qt∏t=1Tp(ot|qt) p ( o | w ) = ∑ q p ( o , p | w ) p ( q | w ) ≈ max π ( q 0 ) ∏ t = 1 T a q t − 1 q t ∏ t = 1 T p ( o t | q t )

\begin{split} p(o|w) &= \sum\limits_{q}p(o,p|w)p(q|w) \\&\approx \max \pi(q_0) \prod_{t=1}^T a_{q_{t-1}q_t} \prod_{t=1}^T p(o_t|q_t) \end{split}

传统的GMM-HMM模型中,我们使用GMM对声学模型进行建模,它是一个生成模型,可以直接生成似然概率 p(ot|qt) p ( o t | q t ) p(o_t|q_t),这个似然概率就是HMM所需要的观察概率。

而现在我们要使用DNN,但DNN只能给出观测值输入到DNN输出层之后在每个节点(状态)上的后验概率 p(qt|ot) p ( q t | o t ) p(q_t|o_t),因此我们通过贝叶斯定理将其转换一下:

p(ot|qt)=p(qt|ot)p(ot)/p(qt) p ( o t | q t ) = p ( q t | o t ) p ( o t ) / p ( q t )

p(o_t|q_t)=p(q_t|o_t)p(o_t)/p(q_t)

其中 p(ot) p ( o t ) p(o_t)不变, p(qt) p ( q t ) p(q_t) 是关于状态的先验概率,这个概率也是训练过程中训练出来的(就是把观测值(特征向量)网状态上对齐,跟某个状态对齐的观测值的个数占比就是这个状态的先验概率)。这样我们就可以对DNN-HMM模型进行解码和训练了。

基于DNN-HMM的模型训练算法

DNN-HMM 模型的主要训练步骤如下:

  1. 首先训练一个状态共享的三音素 GMM-HMM 汉语识别系统,使用决策树来决定如何共享状态。设训练完成的系统为 gmm-hmm。
  2. 用步骤 1 得到的 gmm-hmm 初始化一个新隐马尔可夫模型(包括转移概率,观测概率,隐马尔可夫模型的状态),并生成一个 DNN-HMM 模型,设该模型为 dnn-hmm1。
  3. 预训练 dnn-hmm1 系统中的深度神经网络,得到的深度神经网络为ptdnn。
  4. 使用 gmm-hmm 系统对语音训练数据作排列(即求出训练数据对应哪个隐马尔可夫模型中的状态),得到的数据设为 align-raw。
  5. 使用步骤 4 得到的数据对 ptdnn的参数作微调(可以使用随机梯度下降算法)。设得到的深度神经网络为 dnn。
  6. 利用 dnn 与 dnn-hmm1 和最大似然算法重新估计隐马尔可夫中的参数(转移概率,观测概率),设新得到的系统为 dnn-hmm2。
  7. 如果步骤 6 的精度不再提高则退出算法,否则使用 dnn 和 dnn-hmm2产生新的语音训练数据的排列数据,然后回到步骤 5。
  8. 利用训练数据估计概率 P(qt) P ( q t ) P(q_t)的值

Kaldi中的DNN

  1. 存储在本地的40维fMLLR特征, 使用steps//nnet//make_fmllr_feats.sh, 这简化了训练脚本,40维的特征是使用CMN的MFCC-LDA-MLLT-fMLLR。
  2. RBM 预训练, steps/nnet/pretrain_dbn.sh,是根据Geoff Hinton’s tutorial paper来实现的。训练方法是使用1步马尔科夫链蒙特卡罗采样的对比散度算法(CD-1)。 第一层的RBM是Gaussian-Bernoulli, 和接下里的RBMs是Bernoulli-Bernoulli。这里的超参数基准是在100h Switchboard subset数据集上调参得到的。如果数据集很小的话,迭代次数N就需要变为100h/set_size。训练是无监督的,所以可以提供足够多的输入特征数据目录。
    当训练Gaussian-Bernoulli的RBM时,将有很大的风险面临权重爆炸,尤其是在很大的学习率和成千上万的隐层神经元上。为了避免权重爆炸,我们在实现时需要在一个minbatch上比较训练数据的方差和重构数据的方差。如果重构的方差是训练数据的2倍以上,权重将缩小和学习率将暂时减小。
  3. 帧交叉熵训练,steps/nnet/train.sh, 这个阶段时训练一个DNN来把帧分到对应的三音素状态(比如: PDFs)中。这是通过mini-batch随机梯度下降法来做的。默认的是使用Sigmoid隐层单元,Softmax输出单元和全连接层AffineTransform。学习率是0.008,minibatch的大小是256;我们未使用冲量和正则化(注: 最佳的学习率与不同的隐含层单元类型有关,sigmoid的值0.008,tanh是0.00001)。
    输入变换和预训练DBN(比如:深度信念网络,RBMs块)是使用选项 ,‘–input-transform’和’–dbn’传递给脚本的,这里仅仅输出层是随机初始化的。我们使用提早停止(early stopping)来防止过拟合。为了这个,我们需要在交叉验证集(比如: held-out set)上计算代价函数,因此两对特征对齐目录需要做有监督的训练。

  4. sMBR(State-level minimum Bayes risk)序列区分性训练,steps/nnet/train_mpe.sh(minimum phone erro, MPE), 这个阶段对所有的句子联合优化来训练神经网络,比帧层训练更接近一般的ASR目标。

    1. sMBR的目标是最大化从参考的对齐中得到的状态标签的期望正确率,然而一个词图框架是来使用表示这种竞争假设。
    2. 训练是使用每句迭代的随机梯度下降法,我们还使用一个低的固定的学习率1e-5 (sigmoids)和跑3-5轮。
    3. 当在第一轮迭后重新生成词图,我们观察到快速收敛。我们支持MMI, BMMI, MPE 和sMBR训练。所有的技术在Switchboard 100h集上是相同的,仅仅在sMBR好一点点。
    4. 在sMBR优化中,我们在计算近似正确率的时候忽略了静音帧。具体更加详细的描述见http://www.danielpovey.com/files/2013_interspeech_dnn.pdf

kaldi部分训练方法DNN-HMM模型相关推荐

  1. Kaldi 使用 DFSMN 训练语音模型

    阿里巴巴 2018 年开源的语音识别模型 DFSMN,将全球语音识别准确率纪录提高至 96.04%.DFSMN 模型,是阿里巴巴的高效工业级实现,相对于传统的 LSTM.BLSTM 等声学模型,该模型 ...

  2. 机器学习深版11:HMM模型

    机器学习深版11:HMM模型(隐马尔科夫模型) 文章目录 机器学习深版11:HMM模型(隐马尔科夫模型) 1. 熵(Entropy) 2. 最大熵模型 3. HMM(隐马尔可夫模型) 4. 应用场景 ...

  3. 隐马尔科夫模型HMM(一)HMM模型

    2019独角兽企业重金招聘Python工程师标准>>> 隐马尔科夫模型(Hidden Markov Model,以下简称HMM)是比较经典的机器学习模型了,它在语言识别,自然语言处理 ...

  4. cv2.dnn读取模型报错

    cv2.dnn读取模型报错 D:\ProgramData\Miniconda3\python.exe D:/project/detect/face/yolov5-face-landmarks-open ...

  5. HMM 模型输入数据处理的优雅做法 来自实际项目

    实际项目我是这样做的: def mining_ue_procedures_behavior(seq, lengths, imsi_list): print("seq 3:", se ...

  6. 深度神经网络(DNN)模型与前向传播算法

    深度神经网络(Deep Neural Networks, 以下简称DNN)是深度学习的基础,而要理解DNN,首先我们要理解DNN模型,下面我们就对DNN的模型与前向传播算法做一个总结. 1. 从感知机 ...

  7. 统计学习方法第十章作业:HMM模型—概率计算问题、Baum-Welch学习算法、维特比预测算法 代码实现

    HMM模型 import numpy as npclass HMM:def __init__(self,A=None,B=None,Pi=None,O = None):if A:self.A = np ...

  8. 谷歌最新双塔DNN召回模型——应用于YouTube大规模视频推荐场景

    " 谷歌基于双塔DNN框架提出一个大规模最近邻召回系统,为降低采样偏差带来的影响,文章对batch softmax的损失函数进行了改进,同时从工程的角度介绍了大规模双塔DNN召回模型的训练. ...

  9. 时序分析:HMM模型(状态空间)

    关于HMM模型:时序分析:隐马尔科夫模型 HMM用于手势识别: 训练时每一种手势对应一个HMM-Model,识别率取最大的一个HMM即可.  类似于一个封装的完成多类识别器功能单层网络. 优点: 尤其 ...

最新文章

  1. java.lang.arr_jxl操作java.lang.ArrayIndexOutOfBoundsException: 441 错误的解决
  2. dot Text Error: System.OutOfMemoryException
  3. Python环境的安装
  4. Codeforces Round #425 D
  5. MyBatis使用resultMap自定义映射规则与关联映射
  6. [Project Euler] 来做欧拉项目练习题吧: 题目012
  7. 数据分析学习笔记——Pandas库思维导图
  8. centos后台登录ftp_安卓TikTok无限制版、手游扫码登录更新
  9. java的编程规范_JAVA编程规范-OOP规范
  10. 人工智能和大数据两者有什么联系
  11. DPDK初始化分析(二)
  12. ER Studio 直接导出sql建表
  13. LINUX实验---网络管理
  14. csuacm H - 爬楼梯
  15. 速成KeePass全局自动填表登录QQ与迅雷(包括中文输入法状态时用中文用户名一键登录)...
  16. SuperMap瓦片技术方案
  17. 山西藏家捐献44幅明清寺观壁画在山西博物院展出(图)
  18. s5pv210 linux,S5PV210-零基础体验uboot
  19. 软件工程实践者的思想
  20. 背完这10个经典面试答案,80%的面试都能喜提offer

热门文章

  1. 《六》Git Flow
  2. 共有24款C/C++ 地理信息系统GIS开源软件
  3. 微软Surface系列产品详解
  4. 求推荐微信可开发手持蓝牙打印设备
  5. The root password is cleared and reset
  6. 计算机视觉——计算视差图
  7. 地理围栏算法解析(Geo-fencing)
  8. sqlserver数据库修改日志文件大小限制
  9. 东南大学计算机科学与工程学院在哪个校区,2021年东南大学有几个校区,大一新生在哪个校区...
  10. springboot毕业设计 基于springboot校园二手交易网站系统毕业设计设计与实现参考