热门标签 | 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的特征转换模型(源码解析)》

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

 

投稿吧   | 留言吧

 

 


推荐阅读
  • 本文介绍了推荐系统的基本概念及其在个性化服务中的重要作用,重点探讨了协同过滤算法的工作原理,包括基于用户的协同过滤和基于物品的协同过滤两种方式,并详细解释了几种常见的相似度计算方法。 ... [详细]
  • 本文将作为我硕士论文的一部分,但鉴于其内容的独特性和趣味性,决定单独发布。文中将定义一些皮亚诺公理,并介绍如何使用这些公理进行等式替换,以证明定理。 ... [详细]
  • This article explores the process of integrating Promises into Ext Ajax calls for a more functional programming approach, along with detailed steps on testing these asynchronous operations. ... [详细]
  • 我整理了HMOV四大5G旗舰的参数,可依然没能拯救我的选择困难症
    伊瓢茕茕发自凹非寺量子位报道|公众号QbitAI报道了那么多发布会,依然无法选出要换的第一部5G手机。这不,随着华为P40系列发布,目前国 ... [详细]
  • 本文详细探讨了 Android Service 组件中 onStartCommand 方法的四种不同返回值及其应用场景。Service 可以在后台执行长时间的操作,无需提供用户界面,支持通过启动和绑定两种方式创建。 ... [详细]
  • 本文介绍了如何利用OpenCV库进行图像的边缘检测,并通过Canny算法提取图像中的边缘。随后,文章详细说明了如何识别图像中的特定形状(如矩形),并应用四点变换技术对目标区域进行透视校正。 ... [详细]
  • 对于初学者而言,搭建一个高效稳定的 Python 开发环境是入门的关键一步。本文将详细介绍如何利用 Anaconda 和 Jupyter Notebook 来构建一个既易于管理又功能强大的开发环境。 ... [详细]
  • 本周三大青年学术分享会即将开启
    由雷锋网旗下的AI研习社主办,旨在促进AI领域的知识共享和技术交流。通过邀请来自学术界和工业界的专家进行在线分享,活动致力于搭建一个连接理论与实践的平台。 ... [详细]
  • AI炼金术:KNN分类器的构建与应用
    本文介绍了如何使用Python及其相关库(如NumPy、scikit-learn和matplotlib)构建KNN分类器模型。通过详细的数据准备、模型训练及新样本预测的过程,展示KNN算法的实际操作步骤。 ... [详细]
  • 深入解析层次聚类算法
    本文详细介绍了层次聚类算法的基本原理,包括其通过构建层次结构来分类样本的特点,以及自底向上(凝聚)和自顶向下(分裂)两种主要的聚类策略。文章还探讨了不同距离度量方法对聚类效果的影响,并提供了具体的参数设置指导。 ... [详细]
  • 计算机学报精选论文概览(2020-2022)
    本文汇总了2020年至2022年间《计算机学报》上发表的若干重要论文,旨在为即将投稿的研究者提供参考。 ... [详细]
  • 机器学习(ML)三之多层感知机
    深度学习主要关注多层模型,现在以多层感知机(multilayerperceptron,MLP)为例,介绍多层神经网络的概念。隐藏层多层感知机在单层神经网络的基础上引入了一到多个隐藏 ... [详细]
  • 【转】强大的矩阵奇异值分解(SVD)及其应用
    在工程实践中,经常要对大矩阵进行计算,除了使用分布式处理方法以外,就是通过理论方法,对矩阵降维。一下文章,我在 ... [详细]
  • 机器学习算法:SVM(支持向量机)
    SVM算法(SupportVectorMachine,支持向量机)的核心思想有2点:1、如果数据线性可分,那么基于最大间隔的方式来确定超平面,以确保全局最优, ... [详细]
  • 本文节选自《NLTK基础教程——用NLTK和Python库构建机器学习应用》一书的第1章第1.2节,作者Nitin Hardeniya。本文将带领读者快速了解Python的基础知识,为后续的机器学习应用打下坚实的基础。 ... [详细]
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社区 版权所有