首页 > 编程知识 正文

基于gmm的说话人识别,m的语音特征

时间:2023-05-05 11:57:06 阅读:238088 作者:3136

最白话的语音识别入门—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模型的数学原理,那我就好好整理,再写一篇。

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。