asr

Kaldi(A1)语音识别原理

2018-03-01  本文已影响315人  Seeker_zz

Ref

语音识别的原理 https://www.zhihu.com/question/20398418
HTK Book http://www.ee.columbia.edu/ln/LabROSA/doc/HTKBook21/HTKBook.html
如何用简单易懂的例子解释隐马尔可夫模型? https://www.zhihu.com/question/20962240/answer/33438846
《统计学习方法》第10章 隐马尔可夫模型

强烈建议先看完以上资料


语音识别的原理

语音识别的过程可以理解为找路:
一个朋友告诉你他从杭州站走到杭州东经过了水、桥、广场,想让你猜猜他走的是哪条路,你该怎么办呢?

那我们就找这些特征所对应的建筑吧,分别是公园、高架桥、娱乐广场,啊,在图上最可能的就是蓝色的这条线了! 于是我们就从朋友的特征描述得到了他的行走路径,这就相当于从音频得到了发出这些音频的文字,即语音识别。


上述过程有几个问题,包括

Observe值

在语音识别中,朋友告诉你的特征被称作Observe值,观测值,其提取的流程如下图所示


流程示意

音频波形 => (每一帧的)频域特征序列 => (每一帧的)Observe值

上图中这些圈圈是什么意思呢?

HMM:发音可能的路径

举一个具体的例子,比如我发了Hi这个单词(在计算机里面使用音素phone来表明这个单词是如何发音的,Hi对应于sil-h-ay-sil,sli指silence),下图为计算发音为sil-h-ay-h-ay-sil-h-ay-sil的概率


首先我们需要规定发音可能的路径,对Hi这个单词而言,发音只可能是(sil-h)-(ay-sil)的组合,比如我把H拖得比较长,说的是HHHHHHi那就是(sil-h)(sil-h)(sil-h)…-(ay-sil)啦,前面一长串的重复对应于上图中箭头指向自己,Hiiiiiiiii~~~同理。使用上图这种链式的HMM就可以表示出这种发音的路径。真正的识别当然不止Hi这一条路径,还有Hello,Hey,Apple等等,是所有可能的状态路径的集合,语音识别就是从中找出一个对应于Observe序列最可能的状态路径出来(这里的状态相当于找路中的建筑)。那么怎么知道哪个是最可能的呢?这里先提出HMM相关的3个问题。

关于HMM的3个问题

问题1:已知模型和状态序列,求产生特定观测序列的概率

计算过程

解释一下上图中符号的含义:

回到这个问题本身。最简单的,直接根据概率相乘计算;然后,其实这个直接算的过程可以优化,于是有了Forward Algorithm,向前算法,或者 Backward Algo,向后算法。后续的Baum-Welch Algo也会用到这个算法。

问题2:已知模型和观测序列,求这个观测序列对应的状态序列

相当于语音中的解码问题。最简单的,暴力破解,根据问题1算出所有状态序列产生这个观测序列的概率,找一个最大的。采用动态规划优化之后的算法为Viterbi Algo,维特比算法。

问题3:已知多个观测序列,求模型(即求模型的a b π参数)

若已知对应的状态序列,则为监督算法,根据频数进行估计。


监督学习

若并不知道对应的状态序列,则为无监督算法,Baum-Welch Algo。

GMM:特定Observe值对应于某一状态的概率b(o)

GMM对应于上图中的函数曲线b(o),是多个正态分布的叠加(如虚线所示),应用GMM进行计算的过程如下图所示(这里是问题1:已知模型和状态序列,求产生特定观测序列的概率):

计算过程
注意这里的0.7 0.4(就是a啦)对应于HMM部分中状态转移的概率(箭头上的概率),通过以上计算过程我们就能分别计算出Hi,Hello,Hey这些单词的概率来了,概率最大的就是识别出来的文本啦。
这里仅仅展示了Hey这一个单词的计算过程,而不同的单词概率密度函数(pdf)是不同的,如HTK Book里面的这张图所示:
不同的单词
针对所有待识别的单词需要都构建这样的一串函数(即图中的模型)然后才能选出最大概率的作为最终识别结果。
再来一个总体的图方便大家理解。
Yes对应的概率计算

HMM-GMM如何被构建出来?

以上过程有两个问题:

这里便对应问题3:已知多个观测序列,求模型,需要我们通过语料库里的语音进行训练,由Baum-Welch Algo得到整个模型的参数。它也是个EM算法,需要先设定一个初始值,HTK里面的做法是先将观测值均分,和整个句子的所有状态近似对应,计算出初始值,然后进行迭代得到更好的值,使在该模型下产生这个观测值的概率提高,最终状态值和观测值就能更好地对齐在一起(句子里面每个单词的状态对准到了相应的语音特征)。其中迭代优化的值包括π a b,还有一个中间参数Lj(t),他表示t时刻观测值对应于状态j的概率,这就和对齐alignment联系上啦。更详细的介绍参考HTK Book。

维特比(Viterbi)解码

当训练过程完成之后,要使用这个模型便对应问题2:已知模型和观测序列,求这个观测序列对应的状态序列,亦即已知wav文件对应的特征序列,求其对应的状态,而状态是单词的更小级别的展开,最终可以转换为单词实现语音识别。
Viterbi解码的算法如下图所示,

Viterbi算法
1代表开始的状态,6代表结束的状态,我们的任务就是沿着一条最可能发生的路径从1走到6,而路径上每个黑点的概率都是知道的,Viterbi算法便可以通过动态规划的方式找出这条道路。不过Kaldi里面有另外一种解码的方式,Lattice,这个后续再说。

总结

一张图作为收尾和下一章的开始:

HMM结构
b(o)特定观测值对应某一状态的概率不仅可以用GMM的方式计算,还可以通过DNN的方式,这就是声学模型。而Kaldi里用到的转移模型便是WFST,这又究竟是个什么呢?
上一篇下一篇

猜你喜欢

热点阅读