1.2 语音识别系统架构

1.2.1 经典方法的直观理解

为了让没有接触过语音识别的读者可以对语音识别原理有一个快速的认识,本节将尽可能使用通俗的语言,简短直观地介绍经典语音识别方法。

首先,我们知道声音实际上是一种波。语音识别任务所面对的,就是经过若干信号处理之后的样点序列,也称为波形(Waveform)。图1-1是一个波形的示例。

图1-1 用波形表示的语音信号

语音识别的第一步是特征提取。特征提取是将输入的样点序列转换成特征向量序列,一个特征向量用于表示一个音频片段,称为一帧(Frame)。一帧包含若干样点,在语音识别中,常用25ms作为帧长(Frame length)。为了捕捉语音信号的连续变化,避免帧之间的特征突变,每隔10ms取一帧,即帧移(Frame shift)为10ms,如图1-2所示。

图1-2 语音信号的分帧

采样是声波数字化的方法,而分帧是信号特征化的前提,分帧遵循的前提是,语音信号是一个缓慢变化的过程,这是由人类发声器官决定的,因此在25ms内,认为信号的特性是平稳的,这个前提称为短时平稳假设。正是有了这个假设,可以将语音信号转换为缓慢变化的特征向量序列,进而可以通过时序建模的方法来描述。

在现代语音识别系统中,以隐马尔可夫模型(HMM)为基础的概率模型占据了绝对的主导地位。语音识别开源软件Kaldi也是围绕着以隐马尔可夫模型为基础的概率模型来设计的。为了进行语音识别,所有常见的发音组合可以表示成一个巨大的有向图,这可以用HMM进行建模。语音的每一帧都对应一个HMM状态。如果读者熟悉经典HMM理论,则知道可以从HMM中搜索累计概率最大的路径,其搜索算法为维特比(Viterbi)算法。HMM中累计概率最大的路径所代表的发音内容就是语音识别的结果。这个搜索过程在语音识别中也叫作解码(Decode)。路径的累计概率通过概率模型获取。下一节将介绍概率模型,包括声学模型和语言模型。

1.2.2 概率模型

虽然本书会尽量避免公式的使用,但是对于经典的语音识别概率模型,公式描述会胜过很多文字描述。因此,在本书中会使用一些公式。读者不必担心,这些公式都非常简单易懂。

假设Y是输入的音频信号,w是单词序列,在概率模型下,语音识别的任务其实是在给定音频信号Y的前提下,找出最后可能的单词序列,这个任务可以由以下公式来简单概括:

这个公式所得到的便是语音识别系统基于概率模型所给出的解码结果。上述公式描述起来非常简单易懂,但是执行起来却相当困难,主要原因是概率分布P(w|Y)比较难以用可解的模型来表达。幸运的是,我们可以利用贝叶斯定理对上述公式进行变换,公式变换如下:

在上述变换中,我们用到了一个事实:因为Y已知,因此概率P(Y)是一个常量,在求极值的过程中可以被忽略。

从上述公式可见,语音识别系统的概率模型可以被拆分为两部分:p(Y|w)和P(w),我们需要分别对它们进行建模。概率p(Y|w)的含义是,给定单词序列w,得到特定音频信号Y的概率,在语音识别系统中一般被称作声学模型。概率P(w)的含义是,给定单词序列w的概率,在语音识别系统中一般被称作语言模型。

至此,语音识别的概率模型被拆分为声学模型和语言模型两部分,接下来分别对两部分建模进行介绍。

在介绍声学模型之前,首先简单介绍一下特征提取。在前面提到了音频信号为Y。在实际操作中,由于原始音频信号往往包含一些不必要的冗余信息,因此需要对原始音频信号做特征提取,使得提取出来的特征向量更容易描述语音特性,从而提升建模效率。一般来说,会每隔10ms从一个25ms的语音信号窗口中提取一个特征向量,因此实际应用中我们输入概率模型的Y是一系列特征向量的序列。常用的语音识别特征有梅尔频率倒谱系数(Mel-Frequency Cepstral Coefficient,MFCC)、感知线性预测(Perceptual Linear Prediction,PLP)等。

对于声学特性来说,单词是一个比较大的建模单元,因此声学模型p(Y|w)中的单词序列w会被进一步拆分成一个音素序列。假设Q是单词序列w对应的发音单元序列,这里简化为音素序列,那么声学模型p(Y|w)可以被进一步转写为:

其中,公式中的求和是对和单词序列w所对应的所有可能的音素序列Q集合计算边缘分布概率。这样,声学模型就被拆分成了两部分:p(Y|Q)和p(Q|w)。

第二部分p(Q|w)是一个相对容易计算的概率分布。假设单词序列w=w1,...,wL,也即单词序列w由单词w1w2,...,wL共L个单词组成,再假设每个单词wl所对应的可能发音是qwl,那么第二部分p(Q|w)可以进行如下拆分:

其中,概率分布P(qwl|wl)的含义是单词wl的发音为qwl的概率。词典中同一个单词可能有多个发音,但是在人类语言中,多音词的不同发音往往不会有很多,因此第二部分P(Q|w)可以非常容易地从发音词典中计算出来。

第一部分p(Y|Q)是声学模型的核心所在,一般会用隐马尔可夫模型来进行建模。简单来理解,对于音素序列Q中的每一个音素,都会构建一个音素级隐马尔可夫模型单元,根据音素序列Q,会把这些隐马尔可夫模型单元拼接成一个句子级别的隐马尔可夫模型,而特征序列Y便是隐马尔可夫模型的可观察输出。在实际的语音识别系统中,隐马尔可夫模型的应用会比这个简单描述复杂得多,比如,实际系统中我们会以上下文相关的三音子单元作为最小的隐马尔可夫模型单元。关于声学模型的训练,将在本书第4章详细介绍。

类似地,可以将语言模型P(w)进行拆分和建模。假设单词序列w=w1,...,wL由L个单词组成,语言模型P(w)可以进行如下概率转换:

其中,概率分布Pwl|wl−1,...,w1)的具体含义是,已知单词序列w1,...,wl−1,下一个单词为wl的概率。在实践中会发现,一个已经出现的单词,对于后续出现的单词的影响会随着距离的增大而越来越小,因此,我们一般会把单词序列的历史限制在N−1,对应的语言模型也叫作N元语法模型,用概率表示如下:

在实践中,一般使用N=3或N=4。概率分布Pwl|wl−1wl−2,...,wlN+1)的含义是,已知单词序列wlN+1,...,wl−1,下一个单词为wl的概率。为了统计这个概率分布,需要收集大量的文本作为训练语料,在这些文本中统计一元词组、二元词组直到N元词组的个数,然后根据出现的个数统计每个N元词组的概率。由于训练语料往往是有限的,为了避免稀疏概率或零概率的问题,在实际操作中往往需要采用平滑(Smoothing)、回退(Back off)等技巧。语言模型的训练和使用将在本书第5章详细介绍。

1.2.3 端到端语音识别

2014年左右,谷歌的研究人员发现,在大量数据的支撑下,直接用神经网络可以从输入的音频或音频对应的特征直接预测出与之对应的单词,而不需要像我们上面描述的那样,拆分成声学模型和语言模型。研究人员使用双向长短期记忆神经网络(Bidirectional long short-term memory network),附之以一个叫作Connectionist Temporal Classification(CTC)的目标函数,可以直接将音频信号转换成文字,而不需要经过传统的基于隐马尔可夫模型的语音识别系统中的中间建模单元(比如基于上下文的三音子建模单元)。由于这种系统直接将音频转换成文字,所以也被称作“端到端”系统。2016年左右,基于注意力(Attention)机制的端到端语音识别系统被提出,并迅速成为热门的研究方向。从2014年到现在,基于不同神经网络结构的端到端语音识别系统不断地被提出来,在特定场景中的效果也逐渐接近并超越传统的基于隐马尔可夫模型的语音识别系统的效果。同为概率模型,端到端语音识别系统极大地简化了语音识别系统的建模过程,是未来语音识别系统非常有潜力的一个方向。本书对于端到端语音识别系统的具体细节不做详细描述,建议读者关注语音识别技术在这个方向上的发展。