语音识别(Automatic Speech Recognition, ASR)是将人类语音信号转换为文本的技术,其核心在于从连续的声波中提取特征,并通过数学模型匹配到最可能的词序列。这一过程涉及信号处理、概率统计、机器学习等多个领域。本文将深入解析其背后的数学原理与算法公式,并通过实例说明关键步骤。
1. 声音信号的数学表示与预处理
声音是空气压力的连续波动,在计算机中被采样为离散的数字信号。设采样率为 ( f_s )(通常为16kHz),则时间 ( t ) 处的声压值 ( x[n] ) 可表示为:
[ x[n] = x(t = n / f_s), \quad n = 0, 1, 2, \dots ]
1.1 预加重(Pre-emphasis)
由于语音信号的高频部分能量较低,预加重通过一阶高通滤波器提升高频分量,增强信号的频谱特征。滤波器传递函数为:
[ H(z) = 1 - \alpha z^{-1}, \quad \alpha \in [0.95, 0.97] ]
在时域中,预加重后的信号 ( y[n] ) 为:
[ y[n] = x[n] - \alpha x[n-1] ]
示例:若 ( \alpha = 0.97 ),对于采样点 ( x[100] = 0.5 ),( x[99] = 0.4 ),则 ( y[100] = 0.5 - 0.97 \times 0.4 = 0.112 )。
1.2 分帧与加窗
语音信号是非平稳的,但短时(20-40ms)内可视为平稳。将信号分割为帧,帧长 ( L ) 通常为25ms(400点@16kHz),帧移 ( S ) 为10ms(160点)。第 ( m ) 帧的信号为:
[ x_m[n] = x[mS + n], \quad n = 0, 1, \dots, L-1 ]
为减少频谱泄漏,对每帧加窗(如汉明窗):
[ w[n] = 0.54 - 0.46 \cos\left(\frac{2\pi n}{L-1}\right) ]
加窗后的帧: ( x_m^{\text{win}}[n] = x_m[n] \cdot w[n] )。
1.3 快速傅里叶变换(FFT)
对加窗后的帧进行FFT,得到频谱 ( X_m[k] ):
[ Xm[k] = \sum{n=0}^{L-1} x_m^{\text{win}}[n] \cdot e^{-j 2\pi k n / L}, \quad k = 0, 1, \dots, L-1 ]
功率谱 ( P_m[k] = |X_m[k]|^2 )。
2. 特征提取:从频谱到特征向量
2.1 梅尔频率倒谱系数(MFCC)
MFCC是语音识别中最常用的特征,模拟人耳对频率的非线性感知。
步骤:
- 梅尔滤波器组:将频率轴映射到梅尔尺度,梅尔频率 ( m ) 与实际频率 ( f ) 的关系为:
[ m = 2595 \log_{10}\left(1 + \frac{f}{700}\right) ]
设计一组三角形滤波器 ( H_i(k) )(通常20-40个),覆盖0到奈奎斯特频率。第 ( i ) 个滤波器的中心频率 ( f_i ) 在梅尔尺度上均匀分布。
- 对数能量:计算每个滤波器的输出能量 ( E_i ):
[ Ei = \sum{k=0}^{L/2-1} P_m[k] \cdot H_i(k) ]
取对数: ( \log(E_i) )。
- 离散余弦变换(DCT):对 ( \log(E_i) ) 应用DCT,得到倒谱系数 ( c_j ):
[ cj = \sum{i=0}^{M-1} \log(E_i) \cdot \cos\left(\frac{j \pi (i + 0.5)}{M}\right), \quad j = 0, 1, \dots, M-1 ]
通常保留前12-13个系数(( j=1 ) 到 ( 12 )),并添加能量项 ( c_0 )。最终特征向量为 ( \mathbf{c} = [c_0, c1, \dots, c{12}] )。
示例:假设一个帧的对数能量为 ( \log(E) = [1.2, 1.5, 1.8] )(3个滤波器),M=3。计算 ( c_1 ):
[ c1 = \sum{i=0}^{2} \log(E_i) \cdot \cos\left(\frac{\pi (i + 0.5)}{3}\right) = 1.2 \cdot \cos(\pi/6) + 1.5 \cdot \cos(\pi/2) + 1.8 \cdot \cos(5\pi/6) ]
[ = 1.2 \cdot 0.866 + 1.5 \cdot 0 + 1.8 \cdot (-0.866) \approx 1.0392 - 1.5588 = -0.5196 ]
2.2 其他特征
- 线性预测系数(LPC):通过线性预测模型 ( \hat{x}[n] = \sum_{i=1}^{p} a_i x[n-i] ) 求解系数 ( a_i ),最小化预测误差。
- 深度学习特征:现代ASR使用卷积神经网络(CNN)或Transformer直接从频谱图中学习特征,无需手工设计。
3. 声学模型:从特征到音素概率
声学模型将特征序列映射到音素(或子词单元)的概率分布。传统方法使用隐马尔可夫模型(HMM),现代方法使用深度神经网络(DNN)。
3.1 隐马尔可夫模型(HMM)
HMM假设语音由一系列状态生成,每个状态对应一个音素或子状态。设状态序列 ( Q = q_1, q_2, \dots, q_T ),观测序列 ( O = o_1, o_2, \dots, o_T )(特征向量)。
- 状态转移概率:( a{ij} = P(q{t+1}=j | q_t=i) )
- 发射概率:( b_j(o_t) = P(o_t | q_t=j) ),通常用高斯混合模型(GMM)建模:
[ b_j(ot) = \sum{k=1}^{K} w_{jk} \mathcal{N}(ot; \mu{jk}, \Sigma_{jk}) ]
其中 ( \mathcal{N} ) 是多元高斯分布,( w_{jk} ) 是混合权重。
- 前向算法:计算观测序列的概率 ( P(O|\lambda) ),其中 ( \lambda = (A, B, \pi) ) 是HMM参数。
前向变量 ( \alpha_t(i) = P(o_1, o_2, \dots, o_t, q_t=i | \lambda) ) 的递推公式:
[ \alpha_1(i) = \pi_i b_i(o_1) ]
[ \alphat(j) = \sum{i=1}^{N} \alpha{t-1}(i) a{ij} b_j(o_t) ]
最终概率: ( P(O|\lambda) = \sum_{i=1}^{N} \alpha_T(i) )。
示例:假设两个状态 ( q_1, q_2 ),初始概率 ( \pi = [0.6, 0.4] ),转移矩阵 ( A = \begin{bmatrix} 0.7 & 0.3 \ 0.4 & 0.6 \end{bmatrix} ),发射概率 ( b_1(o_1) = 0.8, b_2(o_1) = 0.5 )。计算 ( \alpha_1(1) = 0.6 \times 0.8 = 0.48 ),( \alpha_1(2) = 0.4 \times 0.5 = 0.2 )。
3.2 深度神经网络(DNN)
现代ASR使用DNN直接预测音素或状态的概率。设特征向量 ( o_t ),DNN输出 ( P(q_t | o_t) )。常用架构包括:
- DNN-HMM混合模型:DNN替代GMM计算发射概率。
- 端到端模型:如CTC(Connectionist Temporal Classification)、RNN-T(Recurrent Neural Network Transducer)或Transformer,直接输出字符或词序列。
CTC损失函数:对于输入序列 ( \mathbf{x} = (x_1, \dots, x_T) ) 和输出标签 ( \mathbf{y} = (y_1, \dots, y_U) ),CTC允许输出序列包含空白标签(blank)和重复标签。损失函数为负对数似然:
[ \mathcal{L}{\text{CTC}} = -\log P(\mathbf{y} | \mathbf{x}) = -\log \sum{\pi \in \mathcal{B}^{-1}(\mathbf{y})} \prod_{t=1}^{T} P(\pi_t | \mathbf{x}) ]
其中 ( \pi ) 是所有可能的路径,( \mathcal{B} ) 是合并重复和删除空白的映射函数。
示例:输入“hello”,标签为“h e l l o”。可能的CTC路径包括“h- e- l- l- o”、“hh- e- l- l- o”等。模型学习将高概率路径映射到正确标签。
4. 语言模型:约束词序列的合理性
语言模型(LM)估计词序列 ( W = w_1, w_2, \dots, w_N ) 的概率 ( P(W) ),用于解码时选择最可能的文本。
4.1 N-gram模型
基于马尔可夫假设,N-gram模型使用前 ( N-1 ) 个词预测下一个词:
[ P(W) = \prod_{i=1}^{N} P(wi | w{i-N+1}^{i-1}) ]
常用N=3(trigram)。平滑技术(如Kneser-Ney)处理未见词序列。
示例:对于句子“the cat sat”,trigram概率:
[ P(\text{cat} | \text{the}) \times P(\text{sat} | \text{the cat}) ]
4.2 神经语言模型
使用RNN、LSTM或Transformer建模长距离依赖。例如,LSTM语言模型的概率:
[ P(wt | w{1:t-1}) = \text{softmax}(W_s h_t + b_s) ]
其中 ( h_t ) 是LSTM在时间 ( t ) 的隐藏状态。
5. 解码:搜索最优词序列
解码是结合声学模型和语言模型,搜索最可能的词序列 ( \hat{W} ):
[ \hat{W} = \arg\max{W} P(W | O) = \arg\max{W} P(O | W) P(W) ]
其中 ( P(O | W) ) 由声学模型给出,( P(W) ) 由语言模型给出。
5.1 维特比算法(Viterbi)
对于HMM,维特比算法找到最优状态序列。定义 ( \delta_t(i) ) 为在时间 ( t ) 状态 ( i ) 的最大概率:
[ \deltat(i) = \max{q1, \dots, q{t-1}} P(q_1, \dots, q_t=i, o_1, \dots, o_t | \lambda) ]
递推公式:
[ \deltat(j) = \max{i} [\delta{t-1}(i) a{ij}] b_j(o_t) ]
回溯得到最优路径。
5.2 集束搜索(Beam Search)
对于端到端模型,由于搜索空间巨大,使用集束搜索限制宽度 ( B )。在每一步保留概率最高的 ( B ) 个部分序列。
示例:假设 ( B=3 ),在时间 ( t ),部分序列“the”、“a”、“this”的概率分别为0.5、0.3、0.2。扩展后保留概率最高的3个新序列。
6. 端到端语音识别系统
现代ASR系统(如Whisper、Conformer)采用端到端架构,直接从音频到文本。以Transformer为例:
- 编码器:将音频特征序列 ( \mathbf{X} = (x_1, \dots, x_T) ) 映射到隐藏表示 ( \mathbf{H} = (h_1, \dots, h_T) )。
- 解码器:自回归生成文本序列 ( \mathbf{y} = (y_1, \dots, y_U) ),每一步计算:
[ P(yt | y{}, \mathbf{X}) = \text{softmax}(W_o h_t^{\text{dec}}) ]
其中 ( h_t^{\text{dec}} ) 是解码器在时间 ( t ) 的隐藏状态。
训练目标:最大化对数似然:
[ \mathcal{L} = \sum_{t=1}^{U} \log P(yt | y{}, \mathbf{X}) ]
示例代码(伪代码):
import torch
import torch.nn as nn
class ASRTransformer(nn.Module):
def __init__(self, vocab_size, d_model, nhead, num_layers):
super().__init__()
self.encoder = nn.TransformerEncoder(
nn.TransformerEncoderLayer(d_model, nhead), num_layers
)
self.decoder = nn.TransformerDecoder(
nn.TransformerDecoderLayer(d_model, nhead), num_layers
)
self.output_layer = nn.Linear(d_model, vocab_size)
def forward(self, audio_features, text_tokens):
# audio_features: (T, batch, d_model)
enc_out = self.encoder(audio_features)
# text_tokens: (U, batch, d_model)
dec_out = self.decoder(text_tokens, enc_out)
logits = self.output_layer(dec_out)
return logits
7. 评估与挑战
7.1 评估指标
- 词错误率(WER):( \text{WER} = \frac{S + D + I}{N} ),其中 ( S ) 是替换错误,( D ) 是删除错误,( I ) 是插入错误,( N ) 是参考词数。
- 句子错误率(SER):完全正确的句子比例。
7.2 挑战
- 噪声与混响:使用数据增强(如添加噪声、混响)或鲁棒特征(如MFCC的差分和二阶差分)。
- 口音与方言:通过多口音数据训练或自适应技术。
- 低资源语言:使用迁移学习或无监督预训练(如wav2vec 2.0)。
8. 总结
语音识别将声音转化为文字的过程涉及从信号处理到概率建模的多个数学步骤。核心包括:
- 特征提取:MFCC等将频谱转换为特征向量。
- 声学建模:HMM或DNN学习特征到音素的映射。
- 语言建模:N-gram或神经LM约束词序列。
- 解码:维特比或集束搜索找到最优文本。
随着深度学习的发展,端到端模型简化了流程,但数学原理仍是理解ASR的基础。通过结合数学公式与实例,我们可以更深入地掌握语音识别技术的内在机制。
