语音的识别对于人类来说是很自然的一个过程,但要让机器“听懂”却十分困难。一段音频文件,机器怎么才能知道它代表的是什么意思呢?语音识别要做的事,就是组CP:根据音频文件来判断对应的文本。当然,要让机器真正的“听懂”和“理解”,还涉及到很多其他的知识,语音识别只是其中一个环节。那么机器接收到左边这段语音之后,是怎么把它一口口吞下去,最后吐出来一个“two”呢?下图中,我们以最经典的基于GMM-HMM的语音识别框架为例,可以看到,经过数据准备、特征提取、训练、再到解码,就可以获取最终的结果。流程看完,是不是有人要问了:我知道你有道理,但是为什么有道理呢?我不想听你说理论,就想知道,你这每一个步骤用来干嘛的?下面我们举一个例子,形象化理解GMM和HMM怎么用到语音识别里面来,这流程的每一块到底都有什么作用。 假设有如下两段音频,“我爱你”和“我恨你”,波形为:我们首先要对音频文件进行特征提取,这里使用的特征是MFCC/Fbank。提取以后就变成下面这些类似扑克牌的方块,让我们跟着发音顺序来想象,这两段音频前面一部分的特征序列,代表的是“我”,中间是“爱/恨”,末尾是“你”。从图中也可以看到,这两部分音频提取特征后头尾部分的相似性很强(都是“我”和“你”)。对于机器来说,开始并不知道这两句话对应的具体文本是什么,于是我们使用GMM进行聚类,分成ABCD四类(当然我们从上帝视角知道,ABCD依次对应我,爱,恨,你)。再使用HMM对序列进行建模,得到A B D=“我爱你”,A C D=“我恨你”。二者结合,就能知道未知音频1是“我爱你”,音频2是“我恨你”。是不是看起来还没有那么难? 当然实际的训练和解码比这个例子要复杂,每个音频语料都需要用HCLG进行处理,每个音素也要用多个状态来代表,并且需要多次迭代更新,这里先不细说。 好了,大概了解之后,我们来稍微具体地介绍一下各部分的概念。