第09章 · 音频与语音 · 阶段测试题答案¶
一 · 单选 (8 题)¶
1.1 A - 采样率 16 kHz 满足人声 Nyquist 定理。
1.2 B - FFT 把时域转频域。
1.3 C - MFCC 是常见声学特征。
1.4 A - CTC 损失处理时序对齐。
1.5 B - Whisper 是 OpenAI 多语言 ASR。
1.6 A - HMM-GMM 是传统 ASR。
1.7 C - Tacotron/Transformer-TTS 是端到端。
1.8 B - 梅尔频谱接近人耳感知。
二 · 多选 (4 题)¶
2.1 ABCD - 都是语音处理任务。
2.2 ABD - C 错: 时域信号本身无频域信息。
2.3 ABC - 都是 TTS 方法。
2.4 ABD - 都是语音识别常用方法。
三 · 简答 (5 题)¶
3.1 ASR 流水线¶
传统: 音频 → 特征(MFCC) → 声学模型(HMM-GMM) → 发音词典 → 语言模型 → 文字 端到端: 音频 → Encoder → Decoder → 文字 (Whisper / Conformer) CTC: 音频 → 神经网络 → CTC 损失 → 文字
3.2 梅尔频谱 vs 线性频谱¶
FFT: 线性频率轴(0-8 kHz), 不符合人耳感知 Mel 频谱: - Mel = 2595 × log(1 + f/700) - 符合人耳对数感知 - 低频分辨率高, 高频低
3.3 HMM-GMM ASR¶
HMM: 建模时序状态转移(音素) GMM: 建模每个状态的声学特征分布 问题: 假设太强(独立性), 性能有限
DNN-HMM: GMM 替换为 DNN, 大幅提升 端到端: 直接从音频到文字, 无中间模块
3.4 TTS 三大范式¶
| 范式 | 代表 | 特点 |
|---|---|---|
| 拼接 | Unit Selection | 自然, 但需大量录音 |
| 参数 | Tacotron / FastSpeech | 灵活, 可控 |
| 神经声码器 | WaveNet / HiFi-GAN | 高质量 |
端到端: 文本 → Mel 频谱 → 声码器 → 音频
3.5 说话人识别¶
说话人验证: 1:1 (这是 John 吗?) 说话人识别: 1:N (这是谁?)
特征: x-vector / d-vector (DNN 嵌入) 模型: - GMM-UBM: 传统 - i-vector: 中期主流 - x-vector (DNN): 当前主流 - ECAPA-TDNN: SOTA
损失: Softmax / AAM-Softmax / Prototypical
四 · 编程 (2 题)¶
4.1 特征提取¶
import librosa
audio, sr = librosa.load("speech.wav", sr=16000)
mfcc = librosa.feature.mfcc(y=audio, sr=sr, n_mfcc=13)
mel_spec = librosa.feature.melspectrogram(y=audio, sr=sr, n_mels=80)
print(f"MFCC shape: {mfcc.shape}") # (13, T)
print(f"Mel spec shape: {mel_spec.shape}") # (80, T)
4.2 简单 ASR¶
from transformers import WhisperProcessor, WhisperForConditionalGeneration
processor = WhisperProcessor.from_pretrained("openai/whisper-small")
model = WhisperForConditionalGeneration.from_pretrained("openai/whisper-small")
# 推理
input_features = processor(audio, sampling_rate=16000, return_tensors="pt").input_features
predicted_ids = model.generate(input_features)
transcription = processor.batch_decode(predicted_ids, skip_special_tokens=True)
print(transcription)