ASR 与 Whisper 模型
ASR 是自动语音识别技术,现代端到端的主流 ASR 架构为:
音频 → [预处理 → 神经网络编码 → 解码] → 文本
信号处理 → 深度学习
Whisper 是由 OpenAI 于 2022 年发布的开源语音识别模型。它是一个基于 Transformer 架构的端到端模型,具有以下核心特点:多任务模型、多语言支持、多种格式、强鲁棒性和无需微调开箱即用。
一、ASR
音频输入与预处理一般通过 ffmpeg 与 VAD 配合完成。
1. 特征提取与编码
现在的 ASR 通常使用声学特征直接输入神经网络。
常见的声学特征有以下四种,但是现在一般直接使用神经网络自动学习特征,例如 Conformer 编码器就是神经网络组成的。
- MFCC(梅尔频率倒谱系数):13-40 维
- 梅尔频谱(Mel-Spectrogram):80-128 维
- 滤波器组(Filter Bank):40-80 维
- 原始波形(Raw Waveform):端到端模型直接使用
- Conformer 编码器:输入 (T, 80) # T 个时间帧,每帧 80 维梅尔特征
Conformer 编码器结构:
- 子采样卷积层:(T, 80) → (T/4, 512)
- 位置编码:加入时序信息
- N 个 Conformer Block:
- 前馈网络(Feed Forward)
- 多头自注意力(Multi-Head Self-Attention)
- 卷积模块(捕捉局部特征)
- 残差连接 + 层归一化
- 输出:(T/4, 512) # 高层声学表示
def mel_filter_bank(magnitude_spectrum, sr=16000, n_mels=80):
# 1. 创建梅尔尺度滤波器
mel_filters = librosa.filters.mel(sr=sr, n_fft=512, n_mels=n_mels)
# 2. 应用滤波器组
mel_spectrum = np.dot(magnitude_spectrum, mel_filters.T)
# 3. 取对数(人耳对声音强度的感知是对数的)
log_mel_spectrum = np.log(mel_spectrum + 1e-10)
return log_mel_spectrum # shape: (帧数,80)
# 梅尔频率:模拟人耳听觉特性
# 低频分辨率高,高频分辨率低
# 现代 ASR(如 Whisper)直接使用梅尔频谱图
def extract_mel_spectrogram(audio, sr=16000):
mel_spec = librosa.feature.melspectrogram(
y=audio, sr=sr, n_mels=80, # Whisper 使用 80 维
n_fft=,
hop_length=,
fmin=, fmax=
)
log_mel_spec = np.log(np.clip(mel_spec, a_min=))
log_mel_spec.T

