语音识别到底是怎么一回事?学习门槛真的那么高么?
说起语音识别,大家的第一反应就是那些看起来眼熟却总也搞不清楚的概念和公式,比如MFCC、HMM、GMM、Viterbi图、解码对齐等等,再往下深入,哪个是哪个,具体用途是什么,就都说不清楚了,总觉得那得是业内大牛才能搞懂的。去网上搜索,各种说法又五花八门,看到最后越来越乱。那么,语音识别到底是怎么一回事?学习门槛真的那么高么?让我们暂时把公式抛开,先来理解一下这些概念,没基础别怕,你一定能看懂。
语音识别的基本流程
语音的识别对于人类来说是很自然的一个过程,但要让机器“听懂”却十分困难。一段音频文件,机器怎么才能知道它代表的是什么意思呢?
语音识别要做的事,就是组CP:根据音频文件来判断对应的文本。当然,要让机器真正的“听懂”和“理解”,还涉及到很多其他的知识,语音识别只是其中一个环节。
那么机器接收到左边这段语音之后,是怎么把它一口口吞下去,最后吐出来一个“two”呢?下图中,我们以最经典的基于GMM-HMM的语音识别框架为例,可以看到,经过数据准备、特征提取、训练、再到解码,就可以获取最终的结果。
流程看完,是不是有人要问了:我知道你有道理,但是为什么有道理呢?我不想听你说理论,就想知道,你这每一个步骤用来干嘛的?
下面我们举一个例子,形象化理解GMM和HMM怎么用到语音识别里面来,这流程的每一块到底都有什么作用。
假设有如下两段音频,“我爱你”和“我恨你”,波形为:
我们首先要对音频文件进行特征提取,这里使用的特征是MFCC/Fbank。提取以后就变成下面这些类似扑克牌的方块,让我们跟着发音顺序来想象,这两段音频前面一部分的特征序列,代表的是“我”,中间是“爱/恨”,末尾是“你”。
从图中也可以看到,这两部分音频提取特征后头尾部分的相似性很强(都是“我”和“你”)。
对于机器来说,开始并不知道这两句话对应的具体文本是什么,于是我们使用GMM进行聚类,分成ABCD四类(当然我们从上帝视角知道,ABCD依次对应我,爱,恨,你)。
再使用HMM对序列进行建模,得到A+B+D=“我爱你”,A+C+D=“我恨你”。二者结合,就能知道未知音频1是“我爱你”,音频2是“我恨你”。是不是看起来还没有那么难?
当然实际的训练和解码比这个例子要复杂,每个音频语料都需要用HCLG进行处理,每个音素也要用多个状态来代表,并且需要多次迭代更新,这里先不细说。
好了,大概了解之后,我们来稍微具体地介绍一下各部分的概念。
特征提取(MFCC/Fbank)
上面说到从音频文件变到“扑克牌”,这就是特征提取。我们播放音乐时一般看到的是时域的波形(横轴是时间,纵轴是幅度),就像上面绿色的那个音频文件。
但是时域波形并不能很好地表示语音的特征,例如男声低沉,女声尖锐,要怎样才能很方便地区分这些特征呢?
“横看成岭侧成峰”,有个叫傅里叶的大神上场了,他搞了一个公式,能将信号从时域变换到频域。我们常听到的MFCC和Fbank就是语音识别的经典频域特征。
GMM和HMM
虽然都是MM,但这两个MM其实没啥关系。
GMM(Gaussian Mixture Model)混合高斯模型,就是一堆不同分布的高斯模型按一定比例组合在一起,用来对特征进行分类;
HMM(Hidden Markov Model)是隐马尔可夫模型,用来对序列进行建模,从一个观测序列,推出对应的状态序列,也就是“由果找因”。这里的“因”一般是隐藏的,无法简单的看出来的(除非你有透视眼),所以叫Hidden,潜变量、隐变量也都是这个意思。
训练和解码
以孤立词为例(单独的one,two这种),不涉及上下文。训练是干嘛?建模型啊。先来一堆已经配对好的CP(训练数据),用它来建立模型(HMM-GMM模型)。
参数定下来以后,收到未知的音频,扔到刚才这个模型里面,算算算,最后就吐出来一个结果“two”,这就是解码。这就是一个迷你的语音识别的系统,简单吧?
单音素和三音素
理解了孤立词训练和解码,我们再稍微加点难度。世界上有那么多词,一个个训练,那模型该有多大啊,肯定不实用。小时候我们是怎么学语文英语的?对了,先学拼音和音标啊,学好了发音才能准啊。
这时候音素就派上用场了。比如one,分成W--AA--N,这样每个音素(Phone)再去单独建模,就更好用了。训练好了模型,丢进去解码,和上面孤立词也是类似的。
但是发音不是这么简单的一个字一个字吐的,还和上下文(Context)有关系,每个音素要考虑前一个和后一个的影响,所以就有了三音素(Triphone)。
DNN-HMM
上面提到分类,那我们自然就想到DNN(Deep Neural Networks)深度神经网络。它也是一个功能十分强大的分类神器,我们完全可以用它来替换前面用来分类的GMM。于是就有了DNN-HMM。看起来也没有那么难,对吧?
整理一下
好了,感觉涉及到的术语有点多有点乱?我们来用一个简单的例子串起来,梳理一下:词、音素、三音素、词典、语言模型、HMM、GMM、DNN等。
我们发现,上面图里还有一部分没见过的,那就是语言模型(Language Model,LM)。为什么要引入语言模型呢?
语言模型LM
语言模型的本质,是一种约束。前面讲的都是声学模型,对序列进行HMM建模,对每个音素用GMM或者DNN进行概率密度建模。
我们用下面的图来表示,可以理解成用声学模型可以对动物的“头”和“身体”进行建模,后面还需要把“头”和“身体”搭配起来才是完整的动物。
但是只使用声学模型的话,会导致什么缺陷呢?猫头配虎身,狗头配猴身,不符合实际情况(无法发音)。我们需要增加一种约束,保证“猫头”配“猫身”,“狗头”配“狗身”。这就是语言模型。
声学模型搭配语言模型,最后才能获取正确的结果。我们知道从一段音频,经过提取特征,HMM,GMM或DNN等,可以获取状态。
之的声学模型,也就是流程图的上半部分。现在我们加入了下半部分的语言模型约束,双管齐下,最终转换为对应文本。
感觉意犹未尽?好吧,再来说说常提的两个算法:EM算法和Viterbi
两个算法
EM算法
像HMM和GMM都是隐变量模型,这种模型麻烦在哪里呢,一般都会有很多的变量,而且隐变量和模型参数互相影响,扯不清,缠缠绵绵到天涯牵。不要紧,我们有神器啊,EM(Expectation Maximization)算法来了。
举个例子:有一堆人,现在只有他们的身高数值,但是不知道男女具体各多少人,也不知道某个身高对应的人是男是女,需要算出男生的平均身高该怎么办?
分成两步走,一个是E步,另外一个自然就是M步了(为什么叫这个,其实是有对应含义的,我们先不管)。一堆变量不用怕,只要按规矩来,不要瞎动搞乱了就行。原则就是:一动一静,交替迭代,最后就收敛到最佳的状态。
Viterbi算法
训练,解码,对齐等时候,总是提到维特比(Viterbi)这个词。Viterbi算法,Viterbi对齐,Viterbi图,那维特比是什么呢?
看下图,维特比就是最优路径。比如从教室去食堂,有12345条路,你可以直接过去,也可以越过高山跨过河流绕一大圈过去,殊途同归,最后都能到食堂。
Viterbi算法,就是算出概率最大的最优的路径(正常人赶时间都会走最短的直线,对吧?就是这条),也就是下图红圈的那些,其他的都舍去。有个这个图,正着算,反着回溯,也就都可以了。
作者:深蓝学院语音教研组
语音识别到底是怎么一回事?学习门槛真的那么高么?相关推荐
- 如何看待深度学习门槛低的说法?
链接:https://www.zhihu.com/question/321031804 编辑:深度学习与计算机视觉 声明:仅做学术分享,侵删 作者:Serendipity https://www.zh ...
- 软件测试到底要不要报培训班学习?看完这个就知道了
学软件测试到底是"自学"or "报班学" 软件测试这个IT行业最尾端的工作,随着人们质量意识的觉醒和市场化浪潮的不断涌动,依然成为了 IT行业的新贵这是不争的事 ...
- 怎样学c++程序语言,如何学好 C++——学习门槛最高的编程语言
根据InfoQ 编程语言 2 月排行榜,统计发现,学习门槛最高的编程语言是 C++.那么如何学好这门又难.门槛又高的语言呢? 前面我们介绍过C++. C++是一种面向对象的计算机程序设计语言,由美国A ...
- 零基础可以学python吗-初学者必知:零基础学习Python真的能学会吗?
零基础学习Python真的可以学习好吗?我想对于这个问题,是大部分想要学习Python的人都会纠结考虑的问题吧,也是很多小白最关注的的问题,今天为大家详细的解释一下. Python语言因为具有一定的独 ...
- 拓扑学+计算机,吴国平: 拓扑学到底有多重要? 在数学中占据多高的地位?
原标题:吴国平: 拓扑学到底有多重要? 在数学中占据多高的地位? 如果吴老师给大家一个三角形,你会想到什么?边长.角度.周长.面积.三角形的稳定性等等,这些都是大家很容易想到的地方. 如下图: 现在我 ...
- python零基础能学吗-初学者必知:零基础学习Python真的能学会吗?
零基础学习Python真的可以学习好吗?我想对于这个问题,是大部分想要学习Python的人都会纠结考虑的问题吧,也是很多小白最关注的的问题,今天为大家详细的解释一下. Python语言因为具有一定的独 ...
- 2021年后一个算法工程师的门槛有多高?
链接:https://www.zhihu.com/question/437429362 编辑:深度学习与计算机视觉 声明:仅做学术分享,侵删 想知道2021年后一个算法工程师的门槛有多高,现在我在读研 ...
- 华农计算机科学转专业,转专业门槛有多高? 每8名新生就有一个想转专业
调查显示:每8个新生就有一个想转专业.对于大学新生,转专业的门槛有多高?如何提高转专业成功率?转专业成功之后会面临哪些挑战?记者采访了广东省内部分高校学生,探寻转专业的那些事儿. 关注1:转专业的门槛 ...
- 监控摄像头个人购买零门槛真的没问题吗?
有人说,当今是个注重隐私的时代,也是最没有隐私的时代.无论在大街上,还是小区里,各式各样的摄像头总是出现在我们身边,就连进了卫生间,也不得不提防,说不定在某个隐秘的地方,一双"小眼睛&quo ...
最新文章
- Cocos 属性常用参数
- python函数几个return语句_Python常用函数--return 语句-阿里云开发者社区
- Consul 服务注册与发现03—— 服务消费者
- java获取当前方法
- 机器人简化图画手绘图_高通推出全新RB3 机器人平台,年内支持5G连接
- 历届试题 大臣的旅费(树的直径)
- 判断数组对象里面的某个属性全部为true才执行下一步操作
- 左神算法:环形单链表的约瑟夫问题(Java版)
- android 调用系统下载apk,如何在自己的App中调用Android系统自带的安装/卸载程序...
- JSK-127 进制转换【进制】
- 灰狼优化算法与影响力最大化问题
- C++“”字符与字符“”相加是连接
- python直方图均衡_python 简单图像处理(8) 直方图均衡化
- android充电线排序,安卓数据线分类有哪些
- Pytorch中报错RuntimeError: The size of tensor a (60) must match the size of tensor b (56)
- 2022-2027年中国OLED显示面板行业发展监测及投资战略研究报告
- 安卓开机自启动app
- 零拷贝、如何实现零拷贝、大文件如何传输
- Oralce数据库ASM存储管理-存储IO故障,disk未及时offline分析,故障分析模板
- 解决了,佳能R6相机DAT/MP4视频文件修复卡顿无声问题
热门文章
- 读《魔鬼搭讪学》有感
- Hinton最新演讲:前向-前向神经网络训练算法
- tomcat配置manger账户和host-manager账户的方法详细图解
- java listener 模式_Java和GUI-根据MVC模式,ActionListener属于哪里?
- 忠告:使用TNT版本PD的不要升级新版本Mac系统
- Type string trivially inferred from a string literal, remove type annotation.eslint@typescript-eslin
- Hive命令操作汇总
- python3发新浪微博
- Kafka的监控以及运维与Kafka-eagle的安装
- numpy创建伪单位矩阵