转:http://blog.sina.com.cn/s/blog_66f725ba0101bw8i.html

关于语音识别的声学模型训练方法已经是比较成熟的方法,一般企业或者研究机构会采用HTK工具包、Kaldi等进行训练,目前从声学模型出发,提高系统性能的主要策略主要有:

1)增加训练数据。不同的训练数据也会对模型有一定的影响,例如,数据的男女均衡性、采集数据的channel、数据的背景噪声、发音人的方言等等。

2)采用比较好的模型训练方法。以前一般采用基于EM和Baum-Welch算法的最大似然估计MLE(Maximum Likelihood Evaluation)方法,但现在众多研究者针对于MLE方法的缺陷,相继提出了多种区分性训练DT(Discriminative Training)方法,以期能得到较优的分类器。

3)声学模型表示。表述声学模型,用的比较多的就是DTW、GMM-HMM,以及目前研究比较热门的DNN(Deep Neural Network)等。

下面针对MLE和DT这两种训练方法,进行一个理论上的分析。以下内容参考中科大鄢志杰博士的毕业论文“声学模型区分性训练及其在自动语音识别中的应用”。

1. 最大似然估计MLE训练

目前,基于最大似然估计的MLE训练的HMM模型是语音识别系统中声学模型最主流的方法。这与MLE的特有的性质是分不开的。

首先,MLE提供了一种简单的训练方法,使得一个较高精度的语音识别声学模型能够迅速地训练得到。

其次,MLE采用的EM、Baum-Welch算法等,使得其不需要精细的参考文本音段时间标注,并在每一步迭代中确保对目标函数的优化。

最后,MLE估计对训练资源的消耗较小,现在已有很多成熟的算法和工具包能够利用对模型参数进行估计。

但是,MLE估计再理论上做的一些假设影响了其在实际应用条件下训练出最优分类器的能力,具体来说,MLE估计训练出的最优HMM声学模型需要满足以下几个条件:

1)模型假设要正确。即,建模时指定的概率密度函数要能够代表实际语音的“真实”分布。

2)训练数据要趋于无穷。即,可以经由无穷多的数据估计出模型的“真实”参数。

3)解码时需要的语言模型要事先已知,且参数要完全“真实”。

从上面的三点“真实”假设,我们可以看出,这三点在实际实践中是不可能真正做到的。这是因为:语音参数的“真实”分布是不可测的,更谈不上通常意义上的指数族函数(例如我们常采用的GMM)来充分模拟。另外,对于语音识别中的大量模型参数而言,训练数据总是稀疏的,实际的训练数据量远达不到无穷的要求。再者,解码中语言模型存在的问题与声学模型几乎完全一样,因此也达不到“真实”参数的要求。所以,在现实条件下通过MLE训练得到最优分类器是不可能的。

2. 区分性DT训练

区分性训练时研究者针对MLE训练的不足而提出的,希望在现实条件下能得到较优的分类器。DT训练通常定义一个目标函数(Objective Function),或者说是准则函数(Criterion Function),来近似一个与分类代价相关的度量。例如,可定义一个域分类错误相关的量并最小化它;或是定义一个与识别正确率相关的量,并最大化它。通过区分性训练,我们可以从一定程度上弱化模型假设错误所带来的影响。同时,由于区分性训练致力于优化与识别效果好坏相关的度量,因此也就为提高识别器性能提供了更直接的途径。形象的说,MLE训练告诉模型“这是椅子,那是桌子”,而区分性训练则告诉模型“这是桌子而不是椅子,那是椅子而不是桌子”。MLE训练更重视调整模型参数以反映训练数据的概率分布,而区分性训练则更重视调整模型之间的分类面,以更好的根据设定的准则对训练数据进行分类。

区分性群联研究的重点主要有两个方面,一是定义准则,即表明“需要优化什么”,二是研究优化算法,即如何根据给定的准则有效的优化模型参数。在语音识别领域,常用的优化准则有:最大互信息量估计准则(Maximum Mutual Information Estimation,MMIE)、最小分类错误准则(Minimum Classification Error,MCE),以及最小词/音素错误准则(Minimum Word/Phone Error)。而常用的参数优化准则算法则包括广义概率下降(Generalized Pmbability Descent,GPD),以及扩展Baum-Welch(Extened Baum—Welch,EB)算法。

纵观现在主流的声学模型的训练,一般公司的研究院或者是一些公司已经采用DNN训练方式,或者是基于HMM的MPE/fMPE相结合的训练方式,训练更powerful的声学模型。当然,这些对训练数据的需求量依然是相当的大。

[转]语音识别中区分性训练(Discriminative Training)和最大似然估计(ML)的区别的更多相关文章

  1. 深度学习中交叉熵和KL散度和最大似然估计之间的关系

    机器学习的面试题中经常会被问到交叉熵(cross entropy)和最大似然估计(MLE)或者KL散度有什么关系,查了一些资料发现优化这3个东西其实是等价的. 熵和交叉熵 提到交叉熵就需要了解下信息论 ...

  2. 卷积神经网络(CNN)在语音识别中的应用

    前言 总结目前语音识别的发展现状,dnn.rnn/lstm和cnn算是语音识别中几个比较主流的方向.2012年,微软邓力和俞栋老师将前馈神经网络FFDNN(Feed Forward Deep Neur ...

  3. 详解卷积神经网络(CNN)在语音识别中的应用

    欢迎大家前往腾讯云社区,获取更多腾讯海量技术实践干货哦~ 作者:侯艺馨 前言 总结目前语音识别的发展现状,dnn.rnn/lstm和cnn算是语音识别中几个比较主流的方向.2012年,微软邓力和俞栋老 ...

  4. kaldi chain模型的序列鉴别性训练代码分析

    chainbin/nnet3-chain-train.cc int main(int argc, char *argv[]) { ... Nnet nnet; ReadKaldiObject(nnet ...

  5. Opencv中SVM样本训练、归类流程及实现

    支持向量机(SVM)中最核心的是什么?个人理解就是前4个字--"支持向量",一旦在两类或多累样本集中定位到某些特定的点作为支持向量,就可以依据这些支持向量计算出来分类超平面,再依据 ...

  6. PocketSphinx语音识别系统语言模型的训练和声学模型的改进

    PocketSphinx语音识别系统语言模型的训练和声学模型的改进 zouxy09@qq.com http://blog.csdn.net/zouxy09 关于语音识别的基础知识和sphinx的知识, ...

  7. 语音识别中的CTC算法的基本原理解释

    欢迎大家前往腾讯云+社区,获取更多腾讯海量技术实践干货哦~ 本文作者:罗冬日 目前主流的语音识别都大致分为特征提取,声学模型,语音模型几个部分.目前结合神经网络的端到端的声学模型训练方法主要CTC和基 ...

  8. Ruby中区分运行来源的方法(转)

    Ruby中区分运行来源的方法 这篇文章主要介绍了Ruby中区分运行来源的方法,本文讲解的是类似Python中的if name == 'main':效果,其实Ruby中也有类似语法,需要的朋友可以参考下 ...

  9. PyTorch在NLP任务中使用预训练词向量

    在使用pytorch或tensorflow等神经网络框架进行nlp任务的处理时,可以通过对应的Embedding层做词向量的处理,更多的时候,使用预训练好的词向量会带来更优的性能.下面分别介绍使用ge ...

随机推荐

  1. 安装和激活Office 2019

    有条件请支持正版!相比费尽力气找一个可能不太安全的激活工具,直接买随时随地更新的Office 365确实是最好的办法.暂时没有经济实力的,可以看看这篇文章.下载OTP工具 首先到Office Tool ...

  2. upcast 做了什么操作

    把子类中仅仅继承而来的成员,赋值给父类. 但是,不会改变虚表!因为这个obj的类型没变. #include <stdio.h> using namespace std; class A{ ...

  3. jmeter 的安装与配置

    环境配置: 操作系统:win10 JDK:1.8 jmeter:5.0 jmeter 是 java 程序.所以要运行 jmeter 需要先安装配置 jdk. 1.安装配置 jdk 官方网站下载 jdk ...

  4. The history of programming languages.(transshipment) + Personal understanding and prediction

    To finish this week's homework that introduce the history of programming languages , I surf the inte ...

  5. 使用jQuery+huandlebars中with应用及with+this应用

    兼容ie8(很实用,复制过来,仅供技术参考,更详细内容请看源地址:http://www.cnblogs.com/iyangyuan/archive/2013/12/12/3471227.html) w ...

  6. python sqlparse 各种 token

    https://blog.csdn.net/qq_39607437/article/details/79620383 import sqlparse def look(statement): prin ...

  7. CDialogEx::OnPaint()的问题,或者为什么在对话框程序的OnPaint中绘图无效的问题

    这是一个基于对话框的程序,对话框上有按钮,还有几个CStatic用来绘图,之前都是好好的,今天改成Unicode版本后,编译正常,运行时CStatic中的图像怎么也不显示,有时候会闪现一次就消失,问题 ...

  8. 吴裕雄 python深度学习与实践(8)

    import cv2 import numpy as np img = cv2.imread("G:\\MyLearning\\TensorFlow_deep_learn\\data\\le ...

  9. 深度学习中Dropout原理解析

    1. Dropout简介 1.1 Dropout出现的原因 在机器学习的模型中,如果模型的参数太多,而训练样本又太少,训练出来的模型很容易产生过拟合的现象. 在训练神经网络的时候经常会遇到过拟合的问题 ...

  10. Linux上web服务器搭建

    安装php依赖包: yum -y install gcc gcc++ libxml2 libxml2-devel yum install gcc make gd-devel libjpeg-devel ...