第 11 章:附录——速查表、模板与资源 (Reference & Resources)
本章摘要:本章是全教程的工具箱。这里没有冗长的理论,只有拿来即用的表格、模板和规范。 适用场景:写 Data Card、设计 Benchmark 协议、查阅指标定义、规范化工程目录。
11.1 终极数据集速查表 (The Master Dataset Cheatsheet)
我们将数据集按细分领域和模态进行了分类。请根据你的任务需求查阅。
11.1.1 语音识别与多模态语音 (ASR & Audio-Visual)
| 数据集 | 语种/口音 | 时长/规模 | 核心特点 | 适用任务 | 许可/访问 |
| 数据集 | 语种/口音 | 时长/规模 | 核心特点 | 适用任务 | 许可/访问 |
|---|---|---|---|---|---|
| AISHELL-1/2/3 | 中文 | 178h / 1k / 85h | 录音室环境,覆盖多口音/多方言 | 中文 ASR 基线,方言适配 | Open / Commercial |
| WenetSpeech | 中文 | 10,000h+ | 互联网来源,强/弱标签混合 | 工业级中文 ASR,鲁棒性训练 | Open |
| LibriSpeech | 英文 | 960h | 有声书,清晰度高,无噪声 | 英文 ASR 学术界标准跑分 | CC-BY |
| GigaSpeech | 英文 | 10,000h+ | 播客/YouTube,多领域,带标点 | 复杂场景英文 ASR | Open |
| AVSpeech | 多语 | 4700h | 仅视频链接,人脸+语音 | 视听语音分离,唇读,语音增强 | Creative Commons |
| VoxCeleb 1/2 | 多语 | 7,000+ IDs | 明星采访视频提取 | 说话人识别 (SRE),声纹验证 | Creative Commons |
| LRS2 / LRS3 | 英文 | 224h / 433h | BBC 视频 / TED 演讲 | 视听语音识别 (AV-ASR),唇读 | Restricted |
11.1.2 音频理解、事件与场景 (Understanding / SED / ASC)
| 数据集 | 标注粒度 | 类别数 | 核心特点 | 适用任务 | Rule-of-Thumb |
| 数据集 | 标注粒度 | 类别数 | 核心特点 | 适用任务 | Rule-of-Thumb |
|---|---|---|---|---|---|
| AudioSet | 弱标签 (片段级) | 527 | 2M+ 片段,音频界的 ImageNet | 预训练 (PANNs),通用音频分类 | 标签有噪声,训练需抗噪策略 |
| NonSpeech7k | 强标签 | 7 | 专注于非语音关键事件 | 关键声事件检测,小样本测试 | 适合作为 OOD 测试集 |
| ESC-50 | 类别标签 | 50 | 环境音,类别平衡,样本少 | Few-shot Learning,教学演示 | 很容易刷爆,不适合大规模评估 |
| FSD50K | 弱标签 | 200 | Freesound 来源,开放版权 | 音效分类,标签传播 | 适合做音效生成的数据源 |
| TUT2017/2018 | 场景标签 | 15+ | 城市声景 (City Environments) | 声学场景分类 (ASC) | 注意录音设备差异带来的偏差 |
| CochlScene | 场景+事件 | 13 | 众包采集,更贴近生活 | 场景感知,上下文理解 | 适合测试模型在非专业录音下的表现 |
11.1.3 音频问答、描述与指令 (Caption / AQA / Instruction)
| 数据集 | 输入 输出 | 规模 | 核心特点 | 评价指标 |
| 数据集 | 输入 输出 | 规模 | 核心特点 | 评价指标 |
|---|---|---|---|---|
| Clotho | Audio Text | 5k Clips | 众包描述,每个音频 5 句不同 Caption | SPICE, CIDEr |
| AudioCaps | Audio Text | 50k Clips | 基于 AudioSet,Youtube 视频描述 | SPICE, CIDEr |
| ClothoAQA | Audio+Q A | 2k Clips | 只有"是/否"或简短回答 | Accuracy |
| Dynamic-SUPERB | Instruction Res | 55 Tasks | 包含判别式和生成式指令任务 | Mixed Metrics |
| MMAU | Multimodal Text | Large | 包含逻辑推理、数学、常识的音频测试 | LLM-as-judge |
| OpenAudioBench | Multiple | Composite | 聚合多个开源任务的统一评测 | Aggregated Score |
11.1.4 生成、TTS 与音乐 (Generation / TTS / Music)
| 数据集 | 采样率 | 核心特点 | 适用任务 | 注意事项 |
| 数据集 | 采样率 | 核心特点 | 适用任务 | 注意事项 |
|---|---|---|---|---|
| LibriTTS | 24kHz | 清洗过的 LibriSpeech,切分更准 | 英文 TTS 基座训练 | 必须要用 LibriTTS-R (Restored) 版 |
| VCTK | 48kHz | 109 个英语口音说话人 | 多说话人 TTS,音色克隆 | 部分说话人数据量极少 |
| Seed-TTS-Eval | - | 包含客观/主观维度的评测集 | 生成式 TTS 综合能力评估 | 关注 Prosody 和 Speaker Similarity |
| VocalSound | 44.1kHz | 包含笑声、哭声、叹气等非语言人声 | 情感语音合成,副语言建模 | 类别极其不平衡 |
| GTZAN | 22kHz | 10 种流派,音乐分类的 MNIST | 音乐流派分类 (Genre) | 数据集太老,仅作入门参考 |
| MusicCaps | 44.1kHz | 音乐片段 + 专家级详细描述 | 文本生成音乐 (T2M) 评测 | 描述质量极高,适合做 Eval |
11.2 指标详解与选择指南 (Metrics Dictionary)
11.2.1 理解类 (Understanding)
- WER (Word Error Rate) / CER (Character Error Rate)
- 定义: 编辑距离 (Levenshtein Distance) / 参考长度。
- 公式: (S=替换, D=删除, I=插入)。
-
Rule-of-Thumb: 英文用 WER,中文/日文用 CER。注意 Text Normalization(如 "10" vs "ten")对分数的巨大影响。
-
mAP (mean Average Precision)
- 定义: PR 曲线下面积 (AUC) 的平均值。
- 适用: 多标签分类 (AudioSet)。
-
Rule-of-Thumb: 关注 mAP@k (前 k 个预测),因为音频中往往包含很多未标注的背景音。
-
DER (Diarization Error Rate)
- 定义: 说话人分割错误率。包含漏检 (Miss)、误检 (False Alarm) 和说话人混淆 (Speaker Error)。
- 注意: 很多时候 Collar(容差时间窗,如 0.25s)的设置决定了分数的高低。
11.2.2 生成类 (Generation)
- FAD (Fréchet Audio Distance)
- 定义: 计算生成音频特征分布与真实音频特征分布的距离。类似图像的 FID。
- 核心: 越低越好。
-
陷阱: FAD 极度依赖 Embedding 模型(常用 VGGish 或 CLAP)和 Reference Set(基准集)。必须注明使用的 Reference Set 是什么(如 FSD50K-test)。
-
KLD (Kullback–Leibler Divergence)
- 定义: 衡量生成音频的物理属性(如 Pitch, Energy)分布与真实分布的差异。
-
适用: 语音合成的韵律评估。
-
CLAP Score / SIM
- 定义: 文本-音频对齐度。计算 Text Embedding 和 Generated Audio Embedding 的余弦相似度。
- 适用: Text-to-Audio / Text-to-Music。
11.2.3 主观类 (Subjective)
- MOS (Mean Opinion Score): 1-5 分绝对打分。需要至少 15-20 人/样本。
- CMOS (Comparative MOS): A/B 测试。让用户选 A 好还是 B 好 (-3 到 +3)。比 MOS 更灵敏,适合比较两个相近的模型。
- MUSHRA: 带参考和锚点(Anchor)的高级盲测,用于高保真音频编解码评测。
11.3 数据集卡片模板 (Standard Dataset Card)
操作指南:直接复制下方 Markdown,在发布新数据时填写。
# Dataset Card for [数据集名称]
## 1. 基本信息 (Metadata)
- **Dataset Name**: `[例如: UrbanSound8K-Clean]`
- **Version**: `[e.g., v1.0.0]`
- **Language/Region**: `[e.g., English (US), Chinese (Mandarin)]`
- **Task Category**: `[e.g., SED, ASR, TTS]`
- **License**: `[e.g., CC-BY-4.0]`
- **Total Duration**: `[e.g., 8.5 hours]`
- **Sample Rate**: `[e.g., 44.1kHz (original), provided as 16kHz]`
## 2. 数据构成与划分 (Structure & Splits)
| Split | Samples | Duration | Speakers/Classes | Description |
| Split | Samples | Duration | Speakers/Classes | Description |
| :--- | :--- | :--- | :--- | :--- |
| `train` | 10,000 | 80h | 50 speakers | 主训练集 |
| `dev` | 1,000 | 8h | 10 speakers | 验证集 (Seen speakers) |
| `test` | 1,000 | 8h | 10 speakers | 测试集 (Unseen speakers) |
## 3. 标注详情 (Annotations)
- **Format**: `[e.g., JSONL, TextGrid]`
- **Granularity**: `[e.g., Strong labels with timestamps / Weak labels]`
- **Label Schema**: `[Link to class mapping file]`
- **Annotation Process**:
- [ ] Automatic Transcribed
- [x] Human Verified (Single annotator)
- [ ] Human Verified (Double blind + Arbitration)
## 4. 采集与处理 (Collection & Processing)
- **Source**: `[e.g., Youtube (Creative Commons filter)]`
- **Recording Environment**: `[e.g., Street, Cafe, Home]`
- **Preprocessing**:
- VAD applied: Yes/No
- Noise removed: Yes/No
- Loudness normalization: -23 LUFS
## 5. 局限性与伦理 (Limitations & Ethics)
- **Bias**: 数据中男性声音占比 80%。
- **Privacy**: 所有 PII (姓名、电话) 已通过自动检测+人工听测掩盖。
- **Known Issues**: 约 5% 的样本背景噪音极大约盖过人声。
11.4 基准评测卡片模板 (Standard Benchmark Card)
操作指南:用于定义一个 Leaderboard 或评测实验。
# Benchmark Card for [基准名称]
## 1. 评测目标 (Objective)
评估模型在 `[场景,如:强混响环境]` 下的 `[能力,如:指令跟随]` 能力。
## 2. 协议定义 (Protocol)
- **Input Modality**: Audio (WAV) + Text Instruction
- **Output Modality**: Text
- **Shot Setting**:
- [x] Zero-shot (标准设置)
- [ ] Few-shot (允许 5-shot,样本需来自 `assets/few_shot_examples.json`)
- **Evaluation Set**: `manifest/test_benchmark_v2.jsonl` (MD5: `...`)
## 3. 推理配置 (Inference Config)
- **Sampling Rate**: 统一重采样至 16kHz
- **Prompt Template**:
> "Listen to the audio. Question: {question} Answer:"
- **Decoding Strategy**: Greedy search (Temperature=0) for reproducibility.
## 4. 评价指标 (Metrics)
| Metric | Implementation | Scope |
| Metric | Implementation | Scope |
| :--- | :--- | :--- |
| **Accuracy** | Exact Match (case-insensitive) | Main Metric |
| **F1-Score** | `sklearn.metrics.f1_score` (macro) | Analysis |
| **RTF** | Real Time Factor on A100 | Efficiency |
## 5. 基线 (Baselines)
| Model | Accuracy | F1 | Notes |
| Model | Accuracy | F1 | Notes |
| :--- | :--- | :--- | :--- |
| Qwen-Audio | 65.2% | 0.60 | Zero-shot |
| SALMONN | 62.1% | 0.58 | - |
11.5 工程规范:目录与文件结构
一个“干净”的音频项目目录结构是复现的关键。
my_audio_project/
├── assets/ # 存放 prompt 模板、类别映射表 (class_map.json)
├── data/ # 【只读】原始数据挂载点 (通常是软链接)
│ ├── aishell/
│ └── audioset/
├── manifest/ # 【核心】数据索引 (JSONL/CSV)
│ ├── v1.0/
│ │ ├── train.jsonl # 格式: {"wav": "path", "txt": "...", "dur": 5.2}
│ │ └── test.jsonl
│ └── processing_scripts/ # 生成 manifest 的脚本
├── recipes/ # 【核心】训练配方 (YAML + Shell)
│ ├── asr_conformer/
│ │ ├── config.yaml # 模型超参、学习率
│ │ └── run.sh # 启动脚本
│ └── tts_vits/
├── checkpoints/ # 模型产出 (按 exp_id 隔离)
│ └── exp_20231027_baseline/
│ ├── tensorboard/
│ ├── best_model.pt
│ └── config_saved.yaml
├── utils/ # 通用工具
│ ├── audio_io.py # 统一音频读取 (Torchaudio/Librosa 封装)
│ └── metric_calc.py # 统一指标计算器
└── README.md # 项目入口文档
推荐的 JSONL 格式 (Unified I/O)
不要用 CSV,CSV 在处理含逗号的文本时很麻烦。统一使用 JSONL。
ASR/TTS 任务:
{"id": "utt_001", "audio_filepath": "/data/wavs/001.wav", "text": "Hello world", "duration": 3.5, "speaker_id": "spk_1"}
多模态/理解任务:
{"id": "qa_001", "audio": "/data/wavs/rain.wav", "instruction": "描述这段声音", "answer": "这是大雨落在屋顶的声音。", "task": "captioning", "dataset": "clotho"}
11.6 结果报告模板 (Result Reporting)
在汇报 Leaderboard 或实验结果时,请使用以下格式,体现专业性。
实验结论摘要:
模型 A 在 [任务名] 上超越了 Baseline B,相对提升 +5.2%。但在 [困难子集,如低信噪比] 场景下性能下降显著 (-10%)。
详细数据表 (Markdown):
| Model | Size | ASR (WER ) | SED (mAP ) | AQA (Acc ) | Inference Time (RTF) |
| Model | Size | ASR (WER ) | SED (mAP ) | AQA (Acc ) | Inference Time (RTF) |
|---|---|---|---|---|---|
| Ours-v1 | 1B | 8.23 | 45.1 | 72.5 | 0.05 |
| Baseline | 1B | 9.10 | 46.0 | 68.0 | 0.04 |
| Diff (%) | - | -9.5% | -2.0% | +6.6% | +25% |
注: 表示越低越好, 表示越高越好。所有测试均在 NVIDIA A100 上完成。
11.7 练习题 (Exercises)
习题 1 (基础):数据集选型
场景:你需要训练一个用于“智能家居”的语音指令模型,要求不仅能识别人声指令(如“开灯”),还要能检测环境事件(如“婴儿哭声”、“玻璃破碎声”)。 问题:你应该组合哪些数据集?
答案: 建议组合:
- 语音指令:AISHELL (中文) 或 Speech Commands (英文) 用于指令词识别。
- 环境事件:AudioSet (筛选家居相关类别) 或 ESC-50 (家居子集) + FSD50K。
- 特殊人声:VocalSound (用于婴儿哭声、咳嗽等副语言现象)。
习题 2 (进阶):指标陷阱
场景:在 TTS 模型评测中,你的模型在 MOS 测试中得分很高(4.5),但在 Speaker Similarity (SIM) 指标上得分很低。 问题:这说明模型出现了什么问题?应该如何改进?
答案: 问题:说明模型生成的语音自然度/音质很好(听起来像真人的声音),但不像目标说话人(音色克隆失败)。 改进:
- 检查 Speaker Encoder 是否在大规模说话人数据(如 VoxCeleb)上预训练充分。
- 增加微调阶段目标说话人的数据权重。
- 检查是否发生了 Over-smoothing,导致音色特征丢失。
习题 3 (工程):数据泄露排查
场景:你的 ASR 模型在验证集上 WER 为 2%,但在实际测试集上 WER 高达 15%。你检查了数据划分代码,发现是用 random_split 随机划分的所有音频文件。
问题:问题出在哪里?如何修复?
答案:
问题:发生了说话人泄露 (Speaker Leakage)。同一个人的语音被切分成了多段,分别进入了训练集和验证集。模型记住了这个人的声纹特征,而不是学会了识别语音。
修复:必须按 Speaker ID 进行划分。确保验证集和测试集中的说话人从未在训练集中出现过 (Unseen Speakers)。
11.8 常见陷阱与错误 (Gotchas)
-
Duration 过滤的坑: * 现象: 训练经常 OOM (Out of Memory) 或 Loss 变为 NaN。 * 原因: 数据集中混入了极长(如 1 小时)或极短(如 0.1 秒)的脏数据。 * 对策: 在生成 Manifest 阶段,强制过滤
0.5s < duration < 30s的数据。 -
音频加载的归一化: * 现象: 模型在不同库(Librosa vs Torchaudio)加载的数据上表现不一致。 * 原因: Librosa 默认加载为 float32 并归一化到 [-1, 1],而某些
wav_read实现可能返回 int16 [-32768, 32767]。 * 对策: 在audio_io.py中统一封装加载逻辑,强制转换为 float32 且归一化。 -
多声道陷阱: * 现象: 输入 shape 不匹配报错。 * 原因: 很多公开数据集(如 AudioSet 部分数据)包含双声道或 5.1 声道音频。 * 对策: 训练前强制
mean(axis=0)转为单声道,或者明确只取第一个通道。 -
评测集被污染: * 现象: 预训练模型在 Zero-shot 评测上高得离谱。 * 原因: 现在的预训练数据量太大(如 WenetSpeech),如果不仔细去重,评测集(如 AISHELL-1 test)的数据很可能已经被包含在预训练语料中了。 * 对策: 使用 n-gram 查重或音频指纹技术,严格剔除训练数据中与评测集相似的样本。