共计 2359 个字符,预计需要花费 6 分钟才能阅读完成。
背景介绍
AISHELL- 1 是目前最常用的开源中文语音识别数据集之一,包含 178 小时的高质量录音,覆盖 400 个不同说话人。该数据集具有以下特点:

- 专业录音设备采集,采样率 16kHz
- 文本内容覆盖新闻、科技、生活等多个领域
- 每个录音文件均提供精确的音素级别标注
在中文语音识别模型开发中,AISHELL- 1 常被用于:
- 端到端 ASR 模型的基准测试
- 预训练模型的微调
- 多模态学习的语音输入源
下载指南
官方源下载
通过官网申请后可使用 wget 下载(需替换 TOKEN):
wget --header="Authorization: Bearer YOUR_TOKEN" \
https://www.openslr.org/resources/33/data_aishell.tgz
国内镜像源
推荐使用清华镜像站加速下载:
axel -n 8 https://mirrors.tuna.tsinghua.edu.cn/openslr/33/data_aishell.tgz
下载完成后验证文件完整性:
md5sum data_aishell.tgz # 应输出 d0e71b144b0a5e3fb6b5835f6b5a2c0e
预处理实战
目录结构处理
解压后标准目录结构应为:
data_aishell/
├── transcript
│ └── aishell_transcript_v0.8.txt
└── wav
├── dev
├── test
└── train
使用 Python 整理目录的示例代码:
import os
from pathlib import Path
def organize_dir(root_path: str):
"""处理解压后的原始目录结构"""
root = Path(root_path)
if not (root/"wav").exists():
raise FileNotFoundError("Invalid AISHELL-1 directory structure")
# 创建符号链接保持结构统一
os.symlink(root/"transcript/aishell_transcript_v0.8.txt",
root/"transcript.txt")
生成 manifest 文件
训练需要准备如下格式的 manifest 文件:
{"audio_filepath": "path/to/wav", "text": "对应的文本", "duration": 3.14}
生成脚本示例:
import json
from tqdm import tqdm
def create_manifest(data_dir: str, output_file: str):
transcripts = {}
with open(f"{data_dir}/transcript.txt", "r", encoding="utf-8") as f:
for line in f:
parts = line.strip().split(" ")
transcripts[parts[0]] = " ".join(parts[1:])
records = []
for wav_path in tqdm(Path(f"{data_dir}/wav").rglob("*.wav")):
key = wav_path.stem
records.append({"audio_filepath": str(wav_path.absolute()),
"text": transcripts[key],
"duration": get_duration(wav_path) # 需实现音频时长获取
})
with open(output_file, "w") as f:
for r in records:
f.write(json.dumps(r, ensure_ascii=False) + "\n")
格式转换
使用 FFmpeg 批量转换格式(例如转为 FLAC 节省空间):
find wav/ -name "*.wav" -print0 | xargs -0 -I {} ffmpeg -i {} -c:a flac {}.flac
避坑指南
文件权限问题
解压后可能遇到权限错误,建议统一设置:
chmod -R 755 data_aishell
中文路径处理
在 Python 中建议使用 pathlib 处理路径:
from pathlib import Path
wav_path = Path("数据目录") / "wav" # 自动处理中文路径
磁盘空间预防
预处理前检查可用空间(GB 为单位):
import shutil
total, used, free = shutil.disk_usage("/")
if free < 50: # 确保剩余 50GB 以上
raise RuntimeError("Insufficient disk space")
进阶建议
数据增强方案
推荐使用以下增强组合:
- 时域:添加随机噪声、速度扰动(±10%)
- 频域:SpecAugment 时间 / 频率掩码
实现示例:
def augment_wav(wav, sr=16000):
# 速度扰动
speed_factor = 0.9 + 0.2 * random.random()
wav = librosa.effects.time_stretch(wav, rate=speed_factor)
# 添加高斯噪声
noise = 0.001 * np.random.randn(len(wav))
return wav + noise
多数据集混合
建议与以下数据集搭配使用:
- THCHS-30:补充更多说话人
- ST-CMDS:增加日常对话场景
- Primewords:丰富领域覆盖
混合训练时注意统一:
- 采样率(建议全部重采样到 16kHz)
- 文本编码(统一 UTF-8)
- 音频格式(建议 FLAC)
结语
通过本文介绍的标准化处理流程,开发者可以快速将 AISHELL- 1 数据集应用到实际语音识别项目中。建议在预处理阶段就建立完整的数据质量检查机制,后续可结合数据增强技术进一步提升模型鲁棒性。
正文完
