对比GMM-HMM、DNN-HMM、DNN-CTC 三个模型的优缺点

     语音识别的研究工作大约开始于50年代,当时AT& T Bell实验室实现了第一个可识别十个英文数字的语音识别系统――Audry系统。70年代,语音识别领域取得了突破。在理论上,LP技术得到进一步发展,动态时间归正技术(DTW)基本成熟,特别是提出了矢量量化(VQ)和隐马尔可夫模型(HMM)理论。在实践上,实现了基于线性预测倒谱和DTW技术的特定人孤立语音识别系统。80年代,语音识别研究进一步走向深入,其显著特征是HMM模型和人工神经元网络(ANN)在语音识别中的成功应用。HMM模型的广泛应用应归功于AT&T。

语音识别技术的发展,和机器学习技术的发展密不可分,尤其是深度学习出现之后。而使用机器学习或者是深度学习都离不开各种神经网络模型。

神经网络(NN)的最新进展使越来越多的创新应用成为可能。作为一种节能的硬件解决方案,CNN 或传统 ANN 的机器学习加速器在嵌入式视觉、 机器人和网络物理领域也越来越受欢迎。

语音识别系统的模型通常由声学模型和语言模型两部分组成,分别对应于语音到音节概率的计算和音节到字概率的计算。语音识别系统本质上是一种模式识别系统,包括特征提取、模式匹配、参考模式库等三个基本单元。

目前具有代表性的语音识别方法主要有动态时间规整技术(DTW)、隐马尔可夫模型(HMM)、矢量量化(VQ)、人工神经网络(ANN)、支持向量机(SVM)等方法。

首先看GMM-HMM模型。

HMM-GMM模型

  1. 什么是HMM?

隐马尔可夫模型(HMM)是语音信号处理中的一种统计模型,是由马尔可夫链演变来的,所以它是基于参数模型的统计识别方法。由于其模式库是通过反复训练形成的与训练输出信号吻合概率最大的最佳模型参数而不是预先储存好的模式样本,且其识别过程中运用待识别语音序列与HMM参数之间的似然概率达到最大值所对应的最佳状态序列作为识别输出,因此是较理想的语音识别模型。

 

红圈-->一个可见状态。 蓝框-->一个隐含状态

举个例子来理解隐含马尔可夫链:

假设在暗室中由N个口袋,每个口袋中由M种不同颜色的求。一个实验员根据某一概率分布随机的选取一个初始口袋,从中根据不同颜色的求的分布概率随机的取出一个球并记录下该球的颜色。而后再根据口袋的概率分布选取一个口袋,再根据不用管色球的概率分布随机选取一个球,记录下颜色。重复这个过程我们就得到了一串标记球颜色的序列,如"红黄红蓝.."。当你把这串序列给暗室外的人看的时候,他们只是看到最终球的颜色序列,但不知道口袋的序列。

在上面的例子中,口袋对应于HMM中的隐藏状态,而颜色序列则代表可观察的输出序列。从一个口袋转向另一个口袋代表状态间的转换,从口袋中取球代表该状态的观察状态输出。

2.HMM解决3个问题:

1)计算likelihood--前向算法 :给定HMM的模型参数和一个观察序列,计算出观察序列O的概率分布矩阵P(O|u),可采用前向算法进行解决。

2)解码问题--Viterbi算法:给定一个HMM的模型参数u和观察序列o=o1,o2...oT,找到最优的状态序列Q=q1,q2...qT。可以用Viterbi算法解决。

3)HMM的训练--前向后向算法︰给定一个观察序列O=o1,o2...or和HMM一系列可能的状态,如何调节HMM的参数使得P(o|p)最大。

PS:

观察状态序列: 语音中的每一帧; 词性标注中的词串

隐藏状态序列: 语音每一帧对应的音素; 词性标注中每个词对应的词性标签

状态转移矩阵: 语音中音素之间的转移概率(数据集计算, GMM-HMM计算??); 词性标注中词性之间的转移概率

 

3.什么是GMM?

    简单理解混合高斯模型就是几个高斯的叠加。每个state有一个GMM,包含k个高斯模型参数。

在语音处理中,一个word由若干phoneme(音素)组成;每个HMM对应于一个word或者音素(phoneme)一个word表示成若干states,每个state表示为一个音素

ANS:一个有隐节点(类似于神经网络的隐藏层)和可见节点的马尔科夫过程。隐节点表示状态,可见节点表示我们听到的语音或者看到的时序信号。

对比GMM-HMM、DNN-HMM、DNN-CTC 三个模型的优缺点_第1张图片对比GMM-HMM、DNN-HMM、DNN-CTC 三个模型的优缺点_第2张图片

 

[2]http://www.inf.ed.ac.uk/teaching/courses/asr/2012-13/asr03-hmmgmm-4up.pdf

和K-Means类似,如果已知每个点x^n属于某每类 j 的概率p(j|x^n),则可以估计其参数。只要已知了这些参数,我们就可以在predict(识别)时在给定input sequence的情况下,计算出一串状态转移的概率。

4.GMM+HMM模型:

获得observation是语音waveform, 以下是一个词识别全过程:

1)将waveform切成等长frames,对每个frame提取特征(e.g. MFCC),

2)对每个frame的特征跑GMM,得到每个frame(o_i)属于每个状态的概率b_state(o_i)

3)根据每个单词的HMM状态转移概率a计算每个状态sequence生成该frame的概率; 哪个词的HMM 序列跑出来概率最大,就判断这段语音属于该词。

5.优缺点:

优点:GMM训练速度快,声学模型较小,容易移植到嵌入式平台。投影后样本点不是得到一个确定的分类标记,而是得到每个类的概率,这是一个重要信息。GMM每一步迭代的计算量比较大,大于k-means。

缺点:GMM没有利用帧的上下文信息,GMM不能学习深层非线性特征变换(没有用到激活函数)。GMM的求解办法基于EM算法,因此有可能陷入局部极值,这和初始值的选取十分相关。GMM不仅可以用在聚类上,也可以用在概率密度估计上。

DNN-HMM声学模型

1.DNN-HMM步骤:

1)帧长切分, 提取特征(MFCC)

2)GMM-HMM进行alignment对齐; 对每一帧进行聚类(音素总数), 获得每帧属于各个音素的概率; HMM进行解码搜索, 获得每一帧最优音素表示序列.

给定音素序列(phoneme), 根据每一帧的GMM似然值,GMM-HMM -> DNN-HMM -> DNN-HMM迭代进行强制对齐。

  1. DNN-HMM; 每一帧(多帧)作为DNN输入, GMM似然值(音素标签)作为输出; 训练DNN参数, …
  1. 用到的技巧(trick)

1)隐层个数

隐层越多(具有更强的函数拟合能力),效果越好,超过9层基本饱和。

2)contextual window

一般使用左右相邻的特征拼接起来作为dnn的输入,一般9-13帧。

在HMM中,有观察独立性假设(任意时刻的观测至于该时刻的状态有关,与其他观测和状态无关)实际上相邻帧是存在一定关系的,并不是完全独立的。DNN的拼帧方法在一定程度上减弱了HMM的独立性假设,更符合实际关系。

3)对senones建模

使用cd-phone的状态比使用monophone的state建模效果更好。

4)pretraining

层数小于5的时候pretraining比较重要;当层数增加以后,pretraining收益变小,但是pretraining可以保证训练的鲁棒性,避免比较糟糕的参数初始化。

5)better alignment

更好的模型可以获得更准确的alignment,除了使用GMM-HMM的模型进行对齐,还可以使用DNN-HMM模型对训练数据进行对齐。[3]

《automatic speech recognition a deep learning approach》 chapter 6

  1. 优缺点

优点: DNN能利用帧的上下文信息,比如前后个扩展5帧

       DNN能学习深层非线性特征变换,表现优于GMM

缺点: 不能利用历史信息来辅助当前任务

  1. 改进为基于CNN-HMM的声学模型

优点:CNN对于语音信号,采用时间延迟卷积神经网络(借鉴RNN的LSTM)可以很好地对信号进行描述学习CNN比其他神经网络更能捕捉到特征的不变形(例如ResNeXt,Xception等)。

 

DNN-CTC模型

  1. CTC(Connectionist Temporal Classification):

A.引入:传统的语音识别的声学模型训练,对于每一帧的数据,需要知道对应的label才能进行有效的训练,在训练数据之前需要做语音对齐的预处理。而语音对齐的过程本身就需要进行反复多次的迭代,来确保对齐更准确,这本身就是一个比较耗时的工作。

许多真实世界中的序列学习任务,往往需要从噪声和未格式化的数据上,预测序列的label(标签),在语音识别中,一个声音信号被转换成words或者是sub-word单元。标签未分割的序列数据是一个普遍存在序列学习任务。尤其是在感知任务中,比如手写识别、语音识别、手势识别等,这些场景中噪声、真实输入数据流将被离散字符标签表达,例如letters或者words。

  目前,图模型例如HMM、CRF以及它们的变体,在序列标签领域都是很有影响力的框架。虽然在很多问题上,这些方法都得到了很好的证明,但是他们仍然存在缺陷:

 

1)他们往往需要大量的任务相关的知识,例如涉及HMM的状态模型,或者选择CRF的输入特征。

2)他们往往依赖显示的模型假设,来保证推理inference容易处理,例如HMM的观察独立性假设。

3)对于标准的HMM,训练是生成式的,但是序列标注任务是判别式的。

Ps:标签错误率Label Error Rate:考虑一个测试集合S`∈Dx×z,定义时序分类h的标签错误率LER=分类结果和目标的平均归一化编辑距离

B.CTC:从字面上理解它是用来解决时序类数据的分类问题。与传统的声学模型训练相比,采用CTC作为损失函数的声学模型训练,是一种完全端到端的声学模型训练,不需要预先对数据做对齐,只需要一个输入序列和一个输出序列即可以训练。这样就不需要对数据对齐和一一标注,并且CTC直接输出序列预测的概率,不需要外部的后处理。既然CTC的方法是关心一个输入序列到一个输出序列的结果,那么它只会关心预测输出的序列是否和真实的序列是否接近(相同),而不会关心预测输出序列中每个结果在时间点上是否和输入的序列正好对齐。                  CTC引入了blank(该帧没有预测值),每个预测的分类对应的一整段语音中的一个spike(尖峰),其他不是尖峰的位置认为是blank。对于一段语音,CTC最后的输出是spike(尖峰)的序列,并不关心每一个音素持续了多长时间。

这种神经网络+CTC的结构除了可以应用到语音识别的声学模型训练上以外,也可以用到任何一个输入序列到一个输出序列的训练上(要求:输入序列的长度大于输出序列)。[4]https://blog.csdn.net/luodongri/article/details/80100297?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522160484785019725266910404%2522%252C%2522scm%2522%253A%252220140713.130102334..%2522%257D&request_id=160484785019725266910404&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~all~top_click~default-1-80100297.pc_first_rank_v2_rank_v28&utm_term=CTC&spm=1018.2118.3001.4449

2.DNN-CTC模型搭建(主要是CRNN-CTC例如百度的LSTM-CTC)

首先,CTC是一种损失函数,它用来衡量输入的序列数据经过神经网络之后,和真实的输出相差有多少。

训练实施方法:CTC的训练过程是通过∂p(z|x)∂w调整w的值使得4中的目标值最大

CRNN:架构模型为CNN+RNN,CNN用于提取图片的特征,然后转换成特征序列,作为RNN的序列输入,RNN网络用于预测序列,RNN生成的序列经过CTC与label进行校正。

优化器:Adadelta函数

3.采用CTC损失函数的优缺点:

优点:在文本识别和语言识别领域中,能够比较灵活地计算损失,进行梯度下降

缺点:就是存在假设前提即每个标签相互独立,因此可以计算路径的概率,才有了接下来的推导过程,但是在很多情况下上下文的标签是有关联的,CTC loss很难考虑这一点,不过这些可以通过引入语言模型解码来解决。

总结

综上,可以归纳语音识别的主要步骤包括: (1)预处理模块: 对输入的原始语音信号进行处理,滤除掉其中的不重要的信息以及背景噪声,并进行相关变换处理。(2)特征提取:提取出反映语音信号特征的关键特征参数形成特征矢量序列,常用的是由频谱衍生出来的Mel频率倒谱系数(MFCC)。典型地,用长度约为10ms的帧去分割语音波形,然后从每帧中提取出MFCC特征,共39个数字,用特征向量来表示。(3)声学模型训练:根据训练语音库的特征参数训练出声学模型参数,识别时将待识别的语音的特征参数同声学模型进行匹配,得到识别结果。目前的主流语音识别系统多采用隐马尔可夫模型HMM进行声学模型建模,这将在下一节进行介绍。(4)语言模型训练:语言建模能够有效的结合汉语语法和语义的知识,描述词之间的内在关系,从而提高识别率,减少搜索范围。对训练文本数据库进行语法、语义分析,经过基于统计模型训练得到语言模型。(5)语音解码:即指语音技术中的识别过程。针对输入的语音信号,根据己经训练好的HMM声学模型、语言模型及字典建立一个识别网络,根据搜索算法在该网络中寻找最佳的一条路径,这个路径就是能够以最大概率输出该语音信号的词串。

而如同深度学习一样,把不同模型匹配上语音识别来提高分类效率,把输入的声音信息学习后高校的呈现某种分布,才是今后在语音处理模型上的发展方向。

你可能感兴趣的:(语音识别,算法)