第 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 (基础):数据集选型

场景:你需要训练一个用于“智能家居”的语音指令模型,要求不仅能识别人声指令(如“开灯”),还要能检测环境事件(如“婴儿哭声”、“玻璃破碎声”)。 问题:你应该组合哪些数据集?

答案: 建议组合:

  1. 语音指令:AISHELL (中文) 或 Speech Commands (英文) 用于指令词识别。
  2. 环境事件:AudioSet (筛选家居相关类别) 或 ESC-50 (家居子集) + FSD50K。
  3. 特殊人声:VocalSound (用于婴儿哭声、咳嗽等副语言现象)。
习题 2 (进阶):指标陷阱

场景:在 TTS 模型评测中,你的模型在 MOS 测试中得分很高(4.5),但在 Speaker Similarity (SIM) 指标上得分很低。 问题:这说明模型出现了什么问题?应该如何改进?

答案问题:说明模型生成的语音自然度/音质很好(听起来像真人的声音),但不像目标说话人(音色克隆失败)。 改进

  1. 检查 Speaker Encoder 是否在大规模说话人数据(如 VoxCeleb)上预训练充分。
  2. 增加微调阶段目标说话人的数据权重。
  3. 检查是否发生了 Over-smoothing,导致音色特征丢失。
习题 3 (工程):数据泄露排查

场景:你的 ASR 模型在验证集上 WER 为 2%,但在实际测试集上 WER 高达 15%。你检查了数据划分代码,发现是用 random_split 随机划分的所有音频文件。 问题:问题出在哪里?如何修复?

答案问题:发生了说话人泄露 (Speaker Leakage)。同一个人的语音被切分成了多段,分别进入了训练集和验证集。模型记住了这个人的声纹特征,而不是学会了识别语音。 修复:必须按 Speaker ID 进行划分。确保验证集和测试集中的说话人从未在训练集中出现过 (Unseen Speakers)。


11.8 常见陷阱与错误 (Gotchas)

  1. Duration 过滤的坑: * 现象: 训练经常 OOM (Out of Memory) 或 Loss 变为 NaN。 * 原因: 数据集中混入了极长(如 1 小时)或极短(如 0.1 秒)的脏数据。 * 对策: 在生成 Manifest 阶段,强制过滤 0.5s < duration < 30s 的数据。

  2. 音频加载的归一化: * 现象: 模型在不同库(Librosa vs Torchaudio)加载的数据上表现不一致。 * 原因: Librosa 默认加载为 float32 并归一化到 [-1, 1],而某些 wav_read 实现可能返回 int16 [-32768, 32767]。 * 对策: 在 audio_io.py 中统一封装加载逻辑,强制转换为 float32 且归一化。

  3. 多声道陷阱: * 现象: 输入 shape 不匹配报错。 * 原因: 很多公开数据集(如 AudioSet 部分数据)包含双声道或 5.1 声道音频。 * 对策: 训练前强制 mean(axis=0) 转为单声道,或者明确只取第一个通道。

  4. 评测集被污染: * 现象: 预训练模型在 Zero-shot 评测上高得离谱。 * 原因: 现在的预训练数据量太大(如 WenetSpeech),如果不仔细去重,评测集(如 AISHELL-1 test)的数据很可能已经被包含在预训练语料中了。 * 对策: 使用 n-gram 查重或音频指纹技术,严格剔除训练数据中与评测集相似的样本。