热门标签 | HotTags
当前位置:  开发笔记 > 后端 > 正文

AIBigKaldi(十四)|Kaldi的特征转换模型(源码解析)

 本文来自公众号“AI大道理”。  三音子模型词错误率为:36.03%,对比单音素模型词错误率为50.58%。可见三音素模型识别率已经有了提高。能否继续优化模型?又要从哪些方面入手

 本文来自公众号“AI大道理”。

 

 

三音子模型词错误率为:36.03%,对比单音素模型词错误率为50.58%。

可见三音素模型识别率已经有了提高。

能否继续优化模型?又要从哪些方面入手进行优化呢?

特征变换带来一定的改善。

语音识别中,为了增强音频特征的鲁棒性,需要提取区分能力较强的特征向量,常用的方法是PCA和LDA算法。

 

以kaldi的thchs30为例。

 

 

《AIBigKaldi(十四)| Kaldi的特征转换模型(源码解析)》总过程

 

《AIBigKaldi(十四)| Kaldi的特征转换模型(源码解析)》

 

 

《AIBigKaldi(十四)| Kaldi的特征转换模型(源码解析)》特征变换

 

特征变换是指将一帧声学特征经过某种运算转化为另外一帧特征的过程。

《AIBigKaldi(十四)| Kaldi的特征转换模型(源码解析)》

特征变换又分为有监督特征变换和无监督特征变换。

无监督特征变换不依赖标注信息,包括差分、拼帧、归一化等。

《AIBigKaldi(十四)| Kaldi的特征转换模型(源码解析)》

有监督特征变换依赖标注信息,估计一组变换系数来增强输入特征的表征能力,来优化声学模型。

灵魂的拷问:如何估计这组变换系数呢?

答:线性判别分析(LDA)、最大似然线性变换(MLLT)。

 

 

《AIBigKaldi(十四)| Kaldi的特征转换模型(源码解析)》主成分分析(PCA)

在讲LDA前,先来了解一下PCA。

LDA和PCA就像是一对孪生兄弟,总是被放在一起比较。

PCA是一种无监督的数据降维方法。

PCA通过线性变换将原始数据变换为一组各维度线性无关的表示,可用于提取数据的主要特征分量,常用于高维数据的降维。

 

灵魂的拷问:为什么要进行降维?

答:机器学习中处理成千上万甚至几十万维的情况也并不罕见,在这种情况下,机器学习的资源消耗是不可接受的,因此我们必须对数据进行降维。

《AIBigKaldi(十四)| Kaldi的特征转换模型(源码解析)》

 

PCA的本质:是将方差最大的方向作为主要特征,并且在各个正交方向上将数据“离相关”,也就是让它们在不同正交方向上没有相关性。

PCA降维的目标:将数据投影到方差最大的几个相互正交的方向上。

PCA算法寻找,保留数据中最有效的,最重要的成分,舍去一些冗余的,包含信息量减少的成分。

 

 

《AIBigKaldi(十四)| Kaldi的特征转换模型(源码解析)》线性判别分析(LDA)

LDA指的是线性判别分析,是一种监督学习的降维技术,它的数据集的每个样本是有类别输出的。

使用PCA模型的时候,是不利用类别标签的,而LDA在进行数据降维的时候是利用数据的类别标签提供的信息的。 

与PCA保持数据信息不同,LDA是为了使得降维后的数据点尽可能地容易被区分。

LDA的核心思想:投影后类内方差最小,类间的方差最大。

简单来说就是同类的数据集聚集的紧一点,不同类的离得远一点。

 

从几何的角度来看,PCA和LDA都是讲数据投影到新的相互正交的坐标轴上。

只不过在投影的过程中他们使用的约束是不同的,也可以说目标是不同的。

《AIBigKaldi(十四)| Kaldi的特征转换模型(源码解析)》

 

LDA降维的目标:将带有标签的数据降维,投影到低维空间同时满足三个条件:

  • 尽可能多地保留数据样本的信息(即选择最大的特征是对应的特征向量所代表的的方向)。

  • 寻找使样本尽可能好分的最佳投影方向。

  • 投影后使得同类样本尽可能近,不同类样本尽可能远。

 

LDA算法是通过一个变化矩阵来达到降维的目的,LDA与PCA不同之处在于,LDA使得样本内的分布凝聚,使得样本间的分布疏远,这样的特征更加有代表性。

 

 

《AIBigKaldi(十四)| Kaldi的特征转换模型(源码解析)》 最大似然线性变换(MLLT)

经过LDA变换后的协方差矩阵不能对角化,因此需要经过MLLT进行变换。

最大似然线性变换有很多种,这一步是半绑定协方差(STC),在kaldi中称为MLLT,用于全局特征变换。

MFCC→CMVN→Splice→LDA→MLLT→final.mat,然后训练GMM。

 LDA根据降维特征向量建立HMM状态。

MLLT根据LDA降维后的特征空间获得每一个说话人的唯一变换。

MLLT实际上是说话人的归一化。

 

《AIBigKaldi(十四)| Kaldi的特征转换模型(源码解析)》 6 lda-mllt模型

《AIBigKaldi(十四)| Kaldi的特征转换模型(源码解析)》6.1 train_lda_mllt.sh

功能:

使用mfcc+cmvn+splice+LDA特征,获得final.mat(LDA和MLLT变换合在一起)
主要是特征做LDA/MLLT变换,转换以后的特征重新训练GMM模型。

通常在LDA之前对原始MFCC特征进行帧拼接(例如将九个连续的帧拼接在一起)。

splice-feats实现了帧的拼接:

feats="ark:splice-feats scp:data/train.scp ark:- |
transform-feats $dir/0.mat ark:- ark:-|"

LDA+MLLT指的是我们在计算MFCC后变换特征的方式:我们在多个帧之间拼接,使用线性判别分析降低维数(默认情况下降到40),然后通过多次迭代估计称为MLLT或STC的对角化变换。

过程之道:

《AIBigKaldi(十四)| Kaldi的特征转换模型(源码解析)》

 

《AIBigKaldi(十四)| Kaldi的特征转换模型(源码解析)》

该程序的执行流程为:

  • 估计出LDA变换矩阵M,特征经过LDA转换。

  • 用转换后的特征重新训练GMM。

  • 计算MLLT的统计量。

  • 更新MLLT矩阵T。

  • 更新模型的均值μjm←Tμjm

  • 更新转换矩阵M←TM

 

 

训练过程:

 

《AIBigKaldi(十四)| Kaldi的特征转换模型(源码解析)》

训练迭代次数num_iters=35。

训练完毕。

训练好的lda-mllt模型:

《AIBigKaldi(十四)| Kaldi的特征转换模型(源码解析)》

训练好的三音子模型:

《AIBigKaldi(十四)| Kaldi的特征转换模型(源码解析)》

可见,特征维度变成40,而传统MFCC是39维的。

 

《AIBigKaldi(十四)| Kaldi的特征转换模型(源码解析)》6.2  thchs-30_decode.sh

功能:

lda-mllt模型解码识别。

在解码时,由于mllt是全局变换,因此只需要使用训练过程中估计的矩阵进行特征变换即可。
 

《AIBigKaldi(十四)| Kaldi的特征转换模型(源码解析)》

lda-mllt模型部分解码识别(词级别):

 

《AIBigKaldi(十四)| Kaldi的特征转换模型(源码解析)》

真正结果(标签词):

《AIBigKaldi(十四)| Kaldi的特征转换模型(源码解析)》

 

单音素模型词错误率为50.58%,三音子模型词错误率为36.03%,lda-mllt模型词错误率为32.12%。

可见词错误率继续下降,模型越来越好。

《AIBigKaldi(十四)| Kaldi的特征转换模型(源码解析)》

lda-mllt模型部分解码识别(音素级别):

《AIBigKaldi(十四)| Kaldi的特征转换模型(源码解析)》

真正结果(标签音素):

《AIBigKaldi(十四)| Kaldi的特征转换模型(源码解析)》

 

单音素模型音素错误率为32.43%,三音素模型音素错误率为20.44%,lda-mllt模型音素错误率为17.06%。

《AIBigKaldi(十四)| Kaldi的特征转换模型(源码解析)》

 

 

《AIBigKaldi(十四)| Kaldi的特征转换模型(源码解析)》6.3  align_si.sh 

功能:

对齐,为接下来的模型优化做准备。

 

《AIBigKaldi(十四)| Kaldi的特征转换模型(源码解析)》

对齐结果:

《AIBigKaldi(十四)| Kaldi的特征转换模型(源码解析)》

 

 

《AIBigKaldi(十四)| Kaldi的特征转换模型(源码解析)》总结

单音素模型词错误率为50.58%,三音子模型词错误率为36.03%,lda-mllt模型词错误率为32.12%。

可见lda-mllt模型识别率继续有了一定的提高。

能否继续优化模型?又要从哪些方面入手进行优化呢?

说话人自适应技术将继续改善现有模型。

《AIBigKaldi(十四)| Kaldi的特征转换模型(源码解析)》

   

 

 ——————

浅谈则止,细致入微AI大道理

扫描下方“AI大道理”,选择“关注”公众号

 

—————————————————————

《AIBigKaldi(十四)| Kaldi的特征转换模型(源码解析)》     《AIBigKaldi(十四)| Kaldi的特征转换模型(源码解析)》

—————————————————————

 

投稿吧   | 留言吧

 

 


推荐阅读
  • Python中HOG图像特征提取与应用
    本文介绍如何在Python中使用HOG(Histogram of Oriented Gradients)算法进行图像特征提取,探讨其在目标检测中的应用,并详细解释实现步骤。 ... [详细]
  • 毕业设计:基于机器学习与深度学习的垃圾邮件(短信)分类算法实现
    本文详细介绍了如何使用机器学习和深度学习技术对垃圾邮件和短信进行分类。内容涵盖从数据集介绍、预处理、特征提取到模型训练与评估的完整流程,并提供了具体的代码示例和实验结果。 ... [详细]
  • ML学习笔记20210824分类算法模型选择与调优
    3.模型选择和调优3.1交叉验证定义目的为了让模型得精度更加可信3.2超参数搜索GridSearch对K值进行选择。k[1,2,3,4,5,6]循环遍历搜索。API参数1& ... [详细]
  • 2023年京东Android面试真题解析与经验分享
    本文由一位拥有6年Android开发经验的工程师撰写,详细解析了京东面试中常见的技术问题。涵盖引用传递、Handler机制、ListView优化、多线程控制及ANR处理等核心知识点。 ... [详细]
  • 在 Flutter 开发过程中,开发者经常会遇到 Widget 构造函数中的可选参数 Key。对于初学者来说,理解 Key 的作用和使用场景可能是一个挑战。本文将详细探讨 Key 的概念及其应用场景,并通过实例帮助你更好地掌握这一重要工具。 ... [详细]
  • 利用决策树预测NBA比赛胜负的Python数据挖掘实践
    本文通过使用2013-14赛季NBA赛程与结果数据集以及2013年NBA排名数据,结合《Python数据挖掘入门与实践》一书中的方法,展示如何应用决策树算法进行比赛胜负预测。我们将详细讲解数据预处理、特征工程及模型评估等关键步骤。 ... [详细]
  • 深入理解K近邻分类算法:机器学习100天系列(26)
    本文详细介绍了K近邻分类算法的理论基础,探讨其工作原理、应用场景以及潜在的局限性。作为机器学习100天系列的一部分,旨在为读者提供全面且深入的理解。 ... [详细]
  • 历经三十年的开发,Mathematica 已成为技术计算领域的标杆,为全球的技术创新者、教育工作者、学生及其他用户提供了一个领先的计算平台。最新版本 Mathematica 12.3.1 增加了多项核心语言、数学计算、可视化和图形处理的新功能。 ... [详细]
  • 机器学习核心概念与技术
    本文系统梳理了机器学习的关键知识点,涵盖模型评估、正则化、线性模型、支持向量机、决策树及集成学习等内容,并深入探讨了各算法的原理和应用场景。 ... [详细]
  • 随着生活节奏的加快和压力的增加,越来越多的人感到不快乐。本文探讨了现代社会中导致人们幸福感下降的各种因素,并提供了一些改善建议。 ... [详细]
  • Python 工具推荐 | PyHubWeekly 第二十一期:提升命令行体验的五大工具
    本期 PyHubWeekly 为大家精选了 GitHub 上五个优秀的 Python 工具,涵盖金融数据可视化、终端美化、国际化支持、图像增强和远程 Shell 环境配置。欢迎关注并参与项目。 ... [详细]
  • LambdaMART算法详解
    本文详细介绍了LambdaMART算法的背景、原理及其在信息检索中的应用。首先回顾了LambdaMART的发展历程,包括其前身RankNet和LambdaRank,然后深入探讨了LambdaMART如何结合梯度提升决策树(GBDT)和LambdaRank来优化排序问题。 ... [详细]
  • 在互联网信息爆炸的时代,当用户需求模糊或难以通过精确查询表达时,推荐系统成为解决信息过载的有效手段。美团作为国内领先的O2O平台,通过深入分析用户行为,运用先进的机器学习技术优化推荐算法,提升用户体验。 ... [详细]
  • 机器学习公开课备忘录(三)机器学习算法的应用与大数据集
    机器学习公开课备忘录(三)机器学习算法的应用与大数据集对应机器学习公开课第六周和第10周机器学习算法模型的选择与评价1、对于一个data,可以将data划分为trainingset、t ... [详细]
  • 支持向量机(SVM)是一种基于统计学习理论的模型,主要在VC维和结构风险最小化的理论基础上发展而来。本文将探讨几种不同的SVM方法及其优化策略,旨在提高模型的效率和适用性。 ... [详细]
author-avatar
爱生活爱花落_485
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有