AISHELL-1数据集下载与预处理全指南:从获取到实战应用

1次阅读
没有评论

共计 2359 个字符,预计需要花费 6 分钟才能阅读完成。

image.webp

背景介绍

AISHELL- 1 是目前最常用的开源中文语音识别数据集之一,包含 178 小时的高质量录音,覆盖 400 个不同说话人。该数据集具有以下特点:

AISHELL- 1 数据集下载与预处理全指南:从获取到实战应用

  • 专业录音设备采集,采样率 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

多数据集混合

建议与以下数据集搭配使用:

  1. THCHS-30:补充更多说话人
  2. ST-CMDS:增加日常对话场景
  3. Primewords:丰富领域覆盖

混合训练时注意统一:

  • 采样率(建议全部重采样到 16kHz)
  • 文本编码(统一 UTF-8)
  • 音频格式(建议 FLAC)

结语

通过本文介绍的标准化处理流程,开发者可以快速将 AISHELL- 1 数据集应用到实际语音识别项目中。建议在预处理阶段就建立完整的数据质量检查机制,后续可结合数据增强技术进一步提升模型鲁棒性。

正文完
 0
评论(没有评论)