刚接触语音识别技术时,我最头疼的就是找不到合适的中文数据集。市面上虽然有不少资源,但要么下载链接失效,要么数据质量参差不齐。经过多次踩坑后,我整理出这份实战指南,重点介绍五个最实用的中文语音数据集。
语音数据集对AI模型训练有多重要?就像厨师需要新鲜食材一样,没有高质量数据,再厉害的算法也发挥不出效果。中文语音数据尤其珍贵,因为相比英文资源,优质的中文数据集更稀缺。我刚开始做语音合成项目时,就曾因为用了不合适的训练数据,导致合成的普通话带着奇怪的腔调。
选择数据集要考虑三个关键因素:数据规模、录音质量和应用场景。比如做方言识别就需要包含各地方言的数据,而语音合成则需要发音清晰的录音。下面要介绍的THCHS-30、CN-Celeb等数据集,都是我亲自使用过且效果不错的资源。
THCHS-30是我最早接触的中文语音数据集,它的全称是"清华大学中文连续语音数据库"。这个数据集包含30小时的中文语音,由40位发音人录制,内容覆盖新闻、故事和日常对话等多种场景。
下载THCHS-30最方便的途径是通过OpenSLR平台:
bash复制wget https://www.openslr.org/resources/18/data_thchs30.tgz
解压后会看到三个主要目录:
这个数据集最大的优点是标注非常规范,每个音频文件都配有准确的文本标注和音素标注。我做过测试,用THCHS-30训练的基础语音识别模型,在普通话场景下能达到85%以上的准确率。
在使用THCHS-30时,有几点经验值得分享:
我曾经用这个数据集做过端到端的语音识别实验,发现它对新手特别友好。数据分布均衡,不会出现某些词汇或发音过度集中的情况。
CN-Celeb是清华大学发布的大规模说话人识别数据集,包含两个子集:
这个数据集的特点是录音环境多样,包含访谈、演讲、影视剧等11种场景。我下载CN-Celeb2时花了整整两天时间,因为压缩包就有200多GB。
下载地址有两个官方来源:
bash复制# 清华大学镜像
wget http://cslt.riit.tsinghua.edu.cn/~data/CN-Celeb/CN-Celeb2_v2.tar.gz
# OpenSLR备份
wget https://www.openslr.org/resources/82/cn-celeb_v2.tar.gz
CN-Celeb最大的价值在于它的多样性。我做过对比实验,用这个数据集训练的声纹模型,在实际应用中的泛化能力明显优于其他数据集。但使用时要注意:
我建议新手先从CN-Celeb1开始,等熟悉数据特性后再处理更大的CN-Celeb2。这个数据集对计算资源要求较高,最好准备足够的存储空间和GPU算力。
Mozilla的Common Voice项目是少有的开放社区数据集,其中文版本包含超过1000小时的语音数据。与其他数据集不同,Common Voice的特点是:
下载方式很简单,直接访问官网注册账号即可选择下载中文数据集。数据以MP3格式提供,配套有详细的元数据标注。
我在多个项目中使用过Common Voice数据,总结出这些经验:
一个实用的预处理脚本示例:
python复制import pandas as pd
from pathlib import Path
# 加载元数据
metadata = pd.read_csv("validated.tsv", sep="\t")
# 筛选高质量样本
high_quality = metadata[
(metadata["age"].notnull()) &
(metadata["gender"].notnull()) &
(metadata["accents"].str.contains("China"))
]
# 生成文件列表
with open("filelist.txt", "w") as f:
for _, row in high_quality.iterrows():
f.write(f"{row['path']}\n")
AISHELL-1和AISHELL-3是两个专业级数据集:
下载需要填写申请表格,但审批速度很快。我去年用AISHELL-3做的多说话人合成系统,效果相当不错。
这是一个免费的300小时中文语音识别数据集,由深圳市智能语音技术有限公司发布。数据特点:
下载地址:
bash复制wget http://www.openslr.org/resources/38/ST-CMDS-20170001_1-OS.tar.gz
处理中文语音数据的标准流程应该是:
我常用的处理命令:
bash复制# 使用sox进行格式转换和重采样
for f in *.flac; do
sox "$f" -r 16000 "${f%.*}.wav"
done
# 使用ffmpeg批量处理
find . -name "*.mp3" -exec ffmpeg -i {} -ar 16000 -ac 1 {}.wav \;
中文标注文件通常需要特殊处理:
一个实用的Python处理示例:
python复制import jieba
def process_text(text):
# 去除特殊符号
text = re.sub(r"[^\u4e00-\u9fa5a-zA-Z0-9]", "", text)
# 分词处理
return " ".join(jieba.cut(text))
根据我的项目经验,不同任务最适合的数据组合是:
存储方面,建议使用NAS或大容量SSD。我现在的数据服务器配置是:
最后提醒新手开发者,使用数据时一定要注意版权声明。有些数据集允许商用,有些则仅限于学术研究。我在处理CN-Celeb时就遇到过授权问题,后来通过联系清华大学数据团队才解决。