Skip to article frontmatterSkip to article content
Site not loading correctly?

This may be due to an incorrect BASE_URL configuration. See the MyST Documentation for reference.

15.5 语音识别的特征提取:对数 Mel 频谱

我们用于分析波形声学语音学的工具,也经常作为语音处理算法的输入。本节介绍一种信号处理流程,它常被用于自动语音识别(automatic speech recognition,ASR)等任务,正如第 16 章将看到的。语音处理的第一步通常是把输入波形转换为一系列声学特征向量,每个向量表示信号一个很小时间窗口中的信息。有时,语音识别或语音处理算法会从波形开始;这时,处理由我们将在第 16 章介绍的卷积网络(convnet)完成。

另一些系统则从更高层的对数 Mel 频谱开始。因此,本节介绍这种常用特征向量:对数 Mel 频谱向量序列。下一节将介绍另一种向量,即 MFCC 表示。这里会以相对较高的层次介绍这些概念;如需更多细节,建议学习语音信号处理课程。

我们先重复 15.4.2 节介绍的模拟语音波形数字化和量化过程。

15.5.1 采样与量化

语音识别器的输入是一连串复杂的气压变化。这些气压变化显然源自说话人,是由空气通过声门并从口腔或鼻腔流出的具体方式造成的。我们通过绘制气压随时间的变化来表示声波。理解这类图形时,有一个比喻有时很有帮助:想象一块阻挡气压波的竖直板(可能是说话人口前的麦克风,或听者耳中的鼓膜)。图形测量的是这块板处空气分子的压缩或稀疏(减压)程度。图 15.25(由图 15.11 重复)展示了取自 Switchboard 电话语音语料库的一小段波形,是某人说 “she just had a baby” 时的元音 [iy]。

图 15.25 元音 [iy] 的一个实例(单词 “baby” 的最后一个元音)的波形。Y 轴表示高于和低于正常大气压的气压水平,X 轴表示时间。注意波形会有规律地重复。由图 15.11 重复。

将图 15.11 这样的声波数字化,第一步是把模拟表示(先是气压,再是麦克风中的模拟电信号)转换为数字信号。模数转换分为两步:采样和量化。对信号采样,就是在特定时间测量其振幅;采样率是每秒采集的样本数。为了准确测量一个波,每个周期至少需要两个样本:一个测量波的正向部分,一个测量负向部分。每周期多于两个样本会提高振幅精度,但少于两个样本会完全漏掉该波的频率。因此,能够测量的最大频率波,其频率是采样率的一半(因为每个周期需要两个样本)。给定采样率时,这个最大频率称为奈奎斯特频率。人类语音的大多数信息处在 10,000 Hz 以下,因此要完全准确地记录语音,需要 20,000 Hz 的采样率。但电话语音会经过交换网络滤波,电话只传输低于 4,000 Hz 的频率。因此,对于 Switchboard 语料库这样的电话带宽语音,8,000 Hz 的采样率已经足够;麦克风语音通常使用 16,000 Hz 采样。

虽然使用更高采样率会提高 ASR 准确率,但不能在 ASR 系统的训练和测试中混用不同采样率。因此,如果在电话语料库(如 8 kHz 采样的 Switchboard)上测试,就必须把训练语料库下采样到 8 kHz。同样,如果在多个语料库上训练,而其中一个包含电话语音,就要把所有宽带语料库都下采样到 8 kHz。

振幅测量值存储为整数,可以是 8 位(取值 -128–127)或 16 位(取值 -32768–32767)。将实数表示为整数的过程称为量化;所有彼此差异小于最小粒度(量子大小)的值都用同一个值表示。在数字化、量化的波形中,我们把时间索引为 nn 的每个样本记作 x[n]x[n]

数据量化后会以各种格式保存。这些格式的一个参数是前面讨论过的采样率和样本大小:电话语音通常以 8 kHz 采样并以 8 位样本保存,麦克风数据通常以 16 kHz 采样并以 16 位样本保存。另一个参数是通道数。对于立体声数据或双方对话,可以把两个通道存储在同一个文件中,也可以存储在不同文件中。最后一个参数是单个样本的存储方式——线性存储或压缩存储。电话语音常用的一种压缩格式是 μ\mu-law(通常写作 u-law,但仍读作 \mu-law)。μ\mu-law 这类对数压缩算法的直觉是:人耳对小强度比对大强度更敏感;对数表示会更忠实地表示小值,但代价是大值的误差更大。线性(未取对数)值通常称为线性 PCM 值(PCM 是脉冲编码调制的缩写,此处不展开)。把线性 PCM 样本值 xx 压缩为 8 位 μ\mu-law 的公式如下(8 位时 μ=255\mu=255):

F(x)=sgn(x)log(1+μx)log(1+μ)1x1(15.10)F (x) = \frac {\operatorname{sgn} (x) \log (1 + \mu | x |)}{\log (1 + \mu)} - 1 \leq x \leq 1\tag{15.10}

15.5.2 加窗

从波形的数字化、量化表示中,我们需要从一小段语音窗口提取频谱特征,该窗口描述特定音素的一部分。在这个小窗口内,可以粗略地把信号看作平稳的(即这一区域内统计性质不变)。(相比之下,一般而言语音是非平稳信号,即其统计性质会随时间变化。)我们使用一个在某一区域内非零、其他地方为零的窗口,在语音信号上移动该窗口,并将其与输入波形相乘,从而提取这段近似平稳的语音,生成加窗波形。

从每个窗口中提取的语音称为帧。加窗由三个参数刻画:窗口大小或帧大小(窗口的宽度,以毫秒计)、连续窗口之间的帧步长(也称平移或偏移),以及窗口的形状。

为了提取信号,我们把时间 nn 的信号值 s[n]s[n] 与时间 nn 的窗口函数值 w[n]w[n] 相乘:

y[n]=w[n]s[n](15.11)y [ n ] = w [ n ] s [ n ]\tag{15.11}

图 15.26 中勾勒的窗口形状是矩形;可以看到,提取出的加窗信号看起来和原信号完全一样。然而,矩形窗口会在边界处突然截断信号,在进行傅里叶分析时造成问题。因此,在创建声学特征时,我们更常使用汉明窗,它会使信号值在窗口边界处趋近于零,从而避免不连续。图 15.27 展示了两者;假设窗口长度为 LL 帧,方程如下:

图 15.26 加窗:25 ms 矩形窗口,步长为 10 ms。

矩形w[n]={10nL10其他汉明w[n]={0.540.46cos(2πnL)0nL10其他(15.12)\begin{array}{l l} \text {矩形} & w [ n ] = \left\{ \begin{array}{l l} 1 & 0 \leq n \leq L - 1 \\ 0 & \text {其他} \end{array} \right. \\ \text {汉明} & w [ n ] = \left\{ \begin{array}{l l} 0. 5 4 - 0. 4 6 \cos (\frac {2 \pi n}{L}) & 0 \leq n \leq L - 1 \\ 0 & \text {其他} \end{array} \right. \end{array}\tag{15.12}

(15.13)

图 15.27 使用矩形窗或汉明窗对正弦波加窗。

15.5.3 离散傅里叶变换

下一步是为加窗信号提取频谱信息;我们需要知道信号在不同频带包含多少能量。对于离散时间(采样)信号,提取离散频带频谱信息的工具是离散傅里叶变换(discrete Fourier transform,DFT)。

DFT 的输入是加窗信号 x[n]...x[m]x[n]...x[m];对于 NN 个离散频带中的每一个,输出是复数 X[k]X[k],表示原始信号中相应频率成分的幅度和相位。如果把幅度相对于频率绘制出来,就可以看到频谱(关于频谱的更多内容见第 15 章)。例如,图 15.28 展示了信号的一段 25 ms 汉明窗波形,以及由 DFT(再加上一些平滑处理)计算出的频谱。

(a)

(b)

图 15.28 (a)元音 [iy] 的一段 25 ms 汉明窗信号;(b)由 DFT 计算出的频谱。

这里不介绍 DFT 的数学细节,只指出傅里叶分析依赖欧拉公式,其中 jj 是虚数单位:

ejθ=cosθ+jsinθ(15.14)e ^ {j \theta} = \cos \theta + j \sin \theta\tag{15.14}

对于已经学习过信号处理的读者,简要回顾一下,DFT 定义如下:

X[k]=n=0N1x[n]ej2πNkn(15.15)X [ k ] = \sum_ {n = 0} ^ {N - 1} x [ n ] e ^ {- j \frac {2 \pi}{N} k n}\tag{15.15}

计算 DFT 的常用算法是快速傅里叶变换(fast Fourier transform,FFT)。这种 DFT 实现非常高效,但只适用于 NN 为 2 的幂的情况。

15.5.4 Mel 滤波器组与对数

FFT 的结果告诉我们每个频带上的能量。然而,人耳对所有频带的敏感度并不相同;对较高频率的敏感度较低。这种偏向低频的性质有助于人类识别,因为低频信息(如共振峰)对区分元音或鼻音至关重要,而高频信息(如塞音爆破或摩擦音噪声)对成功识别的重要性较低。以同样方式建模这一人类感知属性,也能改善语音识别性能。

我们按照听觉频率标度 mel 收集能量,而不是在各频带上等量收集,从而实现这一思想。mel(Stevens et al., 1937;Stevens and Volkmann, 1940)是一种音高单位。感知上音高等距的声音对之间相差相同数量的 mel。mel 频率 mm 可以通过对原始声学频率进行对数变换计算:

mel(f)=1127ln(1+f700)(15.16)m e l (f) = 1 1 2 7 \ln (1 + \frac {f}{7 0 0})\tag{15.16}

我们创建一个滤波器组,从每个频带收集能量,并按对数方式展开:低频处的分辨率非常细,高频处分辨率较低。图 15.29 展示了实现这一思想的一组示例三角滤波器;把它们与频谱相乘,就能得到 Mel 频谱。

图 15.29 Mel 滤波器组(Davis and Mermelstein, 1980)。每个三角滤波器沿 mel 标度按对数间隔排列,收集给定频率范围内的能量。

最后,对 Mel 频谱中的每个值取对数。人类对信号水平的反应是对数的(与人类对频率的反应类似)。与低振幅相比,人类对高振幅下的细微振幅差异不那么敏感。此外,取对数还能使特征估计对输入变化不那么敏感,例如说话人嘴巴靠近或远离麦克风导致的功率变化。

我们把特定滤波器的每个标量输出称为一个通道,因此滤波器组对每个输入帧的输出是一个向量,例如包含 80 或 128 个通道;每个通道表示某个(按 mel 间隔排列的)频带的对数能量。

在把这个对数 Mel 通道向量送入下游神经网络层之前,语音系统通常会重新缩放它们,使其范围具有可比性。语音中一种常见的归一化方法,是将输入缩放到 -1 和 1 之间,并使整个预训练数据集上的均值为零(见第 4 章 4.3.2 节)。