转: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. delphi WebBrowser IPv6

    We discovered one or more bugs in your app when reviewed on iPhone running iOS 11.4 on Wi-Fi connect ...

  2. js代码技巧

    1.js 中不常用的处理方法 //取整 parseInt(a,10); //Before Math.floor(a); //Before a>>0; //Before ~~a; //Aft ...

  3. 笔记:MYSQL四种事务隔离级。

    1·未提交读(Read Uncommitted):允许脏读,也就是可能读取到其他会话中未提交事务修改的数据 脏读: 脏读就是指当一个事务正在访问数据,并且对数据进行了修改,而这种修改还没有提交到数据库 ...

  4. spring的ioc与aop原理

    ioc(反向控制) 原理:    在编码阶段,既没有实例化对象,也没有设置依赖关系,而把它交给Spring,由Spring在运行阶段实例化.组装对象.这种做法颠覆了传统的写代码实例化.组装对象.然后一 ...

  5. sample function

    #coding:utf8 import requests import json import ssl import datetime import urllib import sys import ...

  6. ArcGIS自定义工具箱-显示地图文档结构

    ArcGIS自定义工具箱-显示地图文档结构 联系方式:谢老师,135-4855-4328,xiexiaokui#qq.com 目的:显示地图文档mxd的数据组织结构,数据框,图层,表 使用方法: 地图 ...

  7. EOS踩坑记 2

    [EOS踩坑记 2] 1.--contracts-console 在开发模式下,需要将 nodeos 添加此选项. 2.Debug Method The main method used to deb ...

  8. WMS专业术语&系统功能操作培训

    逻辑层:公司.分部.地区物理层:仓库.1个仓库只能属于思维的1个地区.命名规则:SCPRD_WMWHSE1货主:纳思达多货主:1个仓库可以配置1个或多个货主SKU:物料代码(stock keeping ...

  9. python--第十二天总结(Python操作 RabbitMQ、Redis、Memcache、SQLAlchemy)

    Memcached Memcached 是一个高性能的分布式内存对象缓存系统,用于动态Web应用以减轻数据库负载.它通过在内存中缓存数据和对象来减少读取数据库的次数,从而提高动态.数据库驱动网站的速度 ...

  10. ELK填坑总结和优化过程

    做了几周的测试,踩了无数的坑,总结一下,全是干货,给大家分享~ 一.elk 实用知识点总结 1.编码转换问题(主要就是中文乱码) (1)input 中的codec => plain 转码 cod ...