最白话的语音识别入门—GMM模型—2021-01-04

  • 前言
  • 一、高斯混合模型?
  • 二、训练思路
    • 问题1.我要用多少个高斯分布去建立高斯混合模型呢?
    • 问题2.每一个高斯分布在一个GMM中占据了多少分量?
    • 问题3.每一个高斯分布的参数是什么?
    • 问题4.迭代和终止?
  • 三、总结

文章目录

  • 前言
  • 一、高斯混合模型?
  • 二、训练思路
    • 问题1.我要用多少个高斯分布去建立高斯混合模型呢?
    • 问题2.每一个高斯分布在一个GMM中占据了多少分量?
    • 问题3.每一个高斯分布的参数是什么?
    • 问题4.迭代和终止?
  • 三、总结

前言

自己在工作中陆陆续续地做语音识别也有一年的时间了,感觉语音识别是一个入门门槛非常高的工作,刚刚开始学习的时候是直接去训练kaldi的aishell例子,我研究生学的是后台开发,我也没有学过机器学习,深度学习等课程,在什么都不懂的情况下,花了大概两个星期,训练出了nnet3模型。于是就开始读kaldi的官方文档,结果被一大堆的名词“Lattice”,“HCLG”,“online-faster”等等搞得头晕目眩,在网上搜索资料的时候也是被一大堆的公式给劝退了,然后就买了一本书,结果更是看不懂。但是经过这一年的努力,我觉得我也算是入门了吧。回想最开始接触语音识别的时候,那些资料的门槛太高了,而且我查资料的时候,也只有一个想法,“你先告诉我这个东西是什么就行了!至于公式什么的,我明白了之后再慢慢推导!”。
一方面为了整理自己学到的知识,另一方面是想给和我当初一样状态的同学们建立一点信心,同时也为了锻炼一下自己最欠缺的语言表达能力,我打算开始写博客。我觉得比我当时基础还要差的人应该是不多的,所以我写的东西,面对新手应该是友好的。如果这个博客有幸被其他人看见了,欢迎指出博客中不对的地方,也欢迎大家提出自己想问的问题,如果我懂的话,我会尽我所能,以最直白的方式把它讲出来。


一、高斯混合模型?

如果是作为初学者的话,我们只需要知道,高斯混合模型就是把多个高斯分布放在一起的模型。
我先举一个例子,我目前有一杯白开水,还有一杯蜂蜜,它们都是已知液体,如果我还有一杯不明液体,我喝了一口,我觉得什么味道都没有,那么这杯液体是白开水的概率就很大。但是我把这两杯液体互相混合一下,形成了两杯新的液体,液体1:10%白开水,90%蜂蜜;液体2:90%白开水,10%蜂蜜。我又喝了另外一杯不明液体,我发现好甜啊!那这杯液体是液体1的概率就很大!
上述了一个非常简单的例子,实际语音识别中会更加的复杂,我们只要知道,我们用多个不同的高斯分布(就像例子中的不同液体,可以有水,蜂蜜,醋,酱油等等),以不同的比例随意混合,就会出现多种多样的混合高斯模型(不同的味道),那我再去得到一个新的数据(尝一杯不明液体)的时候,哪个模型计算出来的概率越高(味道最像哪一个混合出来的液体),我们就认为它属于哪一个类别。

二、训练思路

问题1.我要用多少个高斯分布去建立高斯混合模型呢?

虽然现在最基本的语音识别系统都是基于GMM-HMM的,但是也可以想像一下用GMM模型去搭建一个孤立词识别系统,也就是,我们这个系统中,只有这么几个词。例如我们这个系统中就只有“你好”,“再见”这两个词,我们怎么去处理呢?

首先,可能好多人会问一个问题,我们要用几个高斯分布去模拟一个词呢?答案是:随你便。但是效果的好坏和资源是否有浪费或不足,那就是调参的问题了。

还是用液体来举例,假如我们确定了我们要分辨的两种液体的味道只有很甜和一点点甜这两种,那你在前期建立模型,也就是拿各种已知液体混合的时候,就没必要拿醋了吧,没必要拿辣椒水了吧。但是在语音信号中,一个GMM中有几个高斯分布是很抽象的一种概念,我们也不知道应该设立多少个,那就多选几个数值试一下,哪个识别的准确率高就用哪个,这个和训练语料有很大的关系。

问题2.每一个高斯分布在一个GMM中占据了多少分量?

首先来说,这个问题的最终结果是训练结束后才能知道的,但是我们如何初始化呢?就比如说,有一杯甜甜的水,那这杯水里到底有多少蜂蜜多少白开水?上一个问题中每种液体是由哪些混合而成的,我们通过自己的经验还是多多少少能回答的,但是这个问题就开始出现了一些不确定性了吧。那我的思路就是,干脆大家先平均分吧,就好像我先放一半的水,再放一半蜂蜜,至于发生了什么,以后再说。在语音识别系统里也是这样的,比如有个大佬告诉我们,有3个高斯分布的GMM模型效果就是最好的,你就先这么干吧!那每个高斯分布的占比就先都等于33%吧。这样的暴力做法理论上是会带来一些训练上效率低的问题的,所以有一种思路就是用KMeans先把各个高斯分布处理一下,但是我的想法是,聊胜于无罢了,我多训练个一两次不好吗?让机器多动动脑,我休息一下。不知道以后有一天会不会让我改变这种想法,如果有改变的话,我再回来把这一段改掉。

初始化就这样简单暴力地结束了,那么之后,就是我想用蜂蜜和水,尽可能地调成一杯甜度和这杯不明液体一样,怎么做呢?那太甜了,就加水,太淡了就加蜂蜜,直到你觉得两个味道一模一样的时候,记录一下你一共放了多少水,放了多少糖,那这一杯甜甜的水,我们就算是成功拟合出来啦!放在语音识别中也是一样的,只是这个过程换成了数学变得更加抽象了,那这个过程我们就叫做训练,训练的方法就叫做EM算法,EM算法你就理解成是一个加水加糖的过程就好了,其中的数学道理现在不懂也无所谓,之后再学完全不会影响现在的理解。

问题3.每一个高斯分布的参数是什么?

我们应该知道,高斯分布有两个参数,一个是均值,一个是方差,这两个参数的不同就定义了不同的高斯分布。不同的高斯分布我们就可以用不同的已知液体来形容,就好像白开水,蜂蜜,醋,酱油等等。如果我们事先规定好,我们的每种不明液体,最多是用两种液体去调的,那我喝了一个不明液体,又甜又酸,那我就觉得是蜂蜜和醋,如果我又喝了一个不明液体,又甜又咸,那我就觉得是蜂蜜和酱油。在语音识别中,也很像这个过程,只是说,语音识别中的高斯分布没有像各种酱油醋一样分得那么清楚,在这个世界中有无数的高斯分布,我们在确定了问题1,问题2之后,把“你好”所对应的所有信号特征做均值和方差的计算,计算出来的结果就是高斯分布的均值和方差。这时候就出现了另一个问题,如果一个GMM中有一个高斯分布还好计算,如果有多个那我怎么算?这时候我们就引入了一个潜变量,具体的公式很容易就查到了,这个潜变量的意义就是对于每一个数据点,计算它属于不同的高斯分布的概率,完美地解决了这个问题,但是这个潜变量到底是怎么想出来的?是一个什么推导过程?有懂的大神可不可以教教我?

问题4.迭代和终止?

计算到这里,液体的例子已经不能解释语音识别中的逻辑了,但是我觉得你也是对各个步骤有了一定的理解了。不知道看到这里你还记不记得,我们虽然是定死了问题1中,一个GMM会包括几个高斯分布,但是问题2中每个高斯分布的占比我们是没有通过很严肃的计算的,由于“潜变量的意义就是对于每一个数据点,计算它属于不同的高斯分布的概率”,那么我们分别把每一个高斯分布所对应的概率都加起来,不就等于每个高斯分布在这个GMM上的占比吗?但是如果这个值计算出来了,看过公式的人会发现,潜变量是根据这个占比计算出来的,所以我们需要重新计算潜变量,潜变量改变了,又导致均值,方差,又改变了,然后占比又一次地变了,依次类推。这部分看不懂其实也没关系的,最重要的就是要看懂前面三个步骤,这里如果不理解,就根据公式,把数字一个一个往里带也能做出来。最后就是看你想选择什么样的结束条件了,目前的普遍做法就是计算一个GMM的对数似然函数,你只要根据公式算就行了,这个函数的意义就是数值越大,证明效果越不好,我们的目的就是在每一次迭代中,都让这个值减小,如果这个值的变化已经不大了,那就停下来吧。或者有的人选择,就迭代5次,然后就停止,各有各的好处,以最终的识别效果来选择方法就行了。

三、总结

第一次写这样的博客,有哪里写得不好的,希望得到大家的指正。GMM模型的数学推导网上还是有很多资料的,我写这样一篇博客只是希望还没入门的朋友看过我的博客后知道这个东西是什么就够了。如果有人希望我再进一步讲一下GMM模型的数学原理,那我就好好整理,再写一篇。

最白话的语音识别入门—GMM模型相关推荐

  1. 语音识别入门 --各个模型的整理

    语音识别入门 前期知识储备 结构图 语音特征提取 各个模型的尝试 ASRT DeepSpeechRecognition end2end_chinese_speech_recognition Wenet ...

  2. 【语音识别】EM算法和GMM模型

    EM算法和GMM模型 本章主要从概率论方面讲述了GMM模型和EM算法的底层原理,即通过已知推测未知,再通过上次所得到的结果,来推导下一轮的结果,直到这个结果与上一轮的结果误差在我们设定的范围内,就视为 ...

  3. 语音识别入门:从菜鸟到大佬

    在人工智能飞速发展的今天,语音识别技术成为很多设备的标配,比如我们会对着手机说"siri,帮我打电话给老板",又或是"小度小度,放首歌"等等. 尽管语音技术在逐 ...

  4. TensorFlow发布语音识别入门教程,附1GB数据集代码

    原标题:TensorFlow发布语音识别入门教程,附1GB数据集&代码 机械鸡的鸡友经常问:如何开始入门深度学习语音和其他音频识别,例如关键字检测或语音命令. 虽然有一些伟大的开源语音识别系统 ...

  5. 语音识别入门课——week5(GMM-HMM)

    1.背景知识回顾 1.1特征提取 数字信号的基本知识 MFCC/Fbank特征 1.2混合高斯模型GMM GMM模型 EM算法 1.3隐马尔科夫模型 HMM的三个基本问题(概率问题,预测问题,学习问题 ...

  6. 语音识别入门第二节:语音信号处理及特征提取

    目录 数字信号处理基础 基础知识 傅里叶分析 常用特征提取 特征提取流程 Fbank MFCC 数字信号处理基础 基础知识 模拟信号到数字信号转化(ADC):在科学和工程中,遇到的大多数信号都是连续的 ...

  7. 声音识别入门经典模型实践-基于大数据训练CNN14网络实现食物咀嚼声音识别

    声音识别入门经典模型实践-基于大数据训练CNN14网络实现食物咀嚼声音识别 项目简介 声音分类是指可以定制识别出当前音频是哪种声音,或者是什么状态/场景的声音.通过声音,人的大脑会获取到大量的信息,其 ...

  8. 语音识别入门第一节:语音识别概述

    目录 语音识别的定义 语音识别的重要性 语音交互 语音识别的挑战性 语音识别的发展历史 语音识别的深度学习时代 现代语音识别框架 语料库与工具包 语音识别的定义 语音识别:Automatic Spee ...

  9. 3.GMM模型-EM算法

    项目模板和描述:链接地址 本次实验所用的数据为0-9(其中0的标签为Z(Zero))和o这11个字符的英文录音,每个录音的原始录音文件和39维的MFCC特征都已经提供, 实验中,每个字符用一个GMM来 ...

最新文章

  1. 如何做好应急响应工作?常见应急响应流程
  2. 导Excel数据到Oracle的脚本,Oracle使用TOAD实现导入导出Excel数据
  3. Java 算法 比赛安排
  4. Java的Socket编程
  5. c g位置服务器,C32/G34平台铺路 AMD为十二核CPU蓄势
  6. 专业音频术语中英文对照
  7. java blocked_Java 线程状态之 BLOCKED
  8. 如何解读Linux Kernel OOPS信息
  9. 执行SOA——SOA实践指南
  10. win7系统ie被篡改怎么解决
  11. 转(逍遥子)Mosquito使用SSL/TLS进行安全通信时的使用方法
  12. HDOJ 月之数 2502
  13. 谷歌浏览器崩溃!亲测有效
  14. 网络布线的概念和IP的计算
  15. Android开发技术框架和编码规范
  16. 剑指Offer系列(java版,详细解析)38.字符串的排列
  17. 正易判讀 6-3 韓長庚 著
  18. PHP学习笔记(一)--基础知识
  19. 北京住房公积金转杭州相关信息的整理,个人整理
  20. 计算机专业3分钟演讲能讲什么,面试三分钟演讲稿范文

热门文章

  1. 史上最浅显易懂的Git教程2 github
  2. 降噪耳机哪款好?口碑最好的降噪蓝牙耳机推荐
  3. python长表转换宽表_pandas使用之宽表变窄表的实现
  4. 传奇开服教程:传奇沙巴克奖励脚本
  5. 山东大学软件学院众智科学与网络化产业期末考试回忆版
  6. MySQL分布式集群搭建详解
  7. Excel 多sheet分解成多个单独excel文件(VBA记录)
  8. 没有ngrok的日子,幸好还有路由侠
  9. OpenHardwareMonitor0.9.6汉化说明
  10. php 超级管理员,用户权限的超级管理员怎么设计才好?