最大规模开源中文语音数据集 — aidatatang_1505zh及其语音识别基准实验详解
最大规模开源中文语料库 — aidatatang_1505zh及其语音识别基准实验详解
说在前面
AI正切实影响着社会生产生活的各个方面,目前人工智能产品正在走向实用化、多样化,人工智能应用也正在快速拓展助力传统行业转型升级。算法、算力、数据是驱动人工智能产业快速崛起的三大因素,其中,数据是人工智能的基石,只有拥有大量的数据资源,人工智能才会有更好的发展。
作为人工智能数据服务行业的领军企业,数据堂多年来秉承着“用数据支撑AI,以智能改变世界”的企业愿景。因此,为解决在各应用领域数据匮乏的现状,帮助更多的研究人员拓宽研究领域,丰富研究内容,加速迭代,数据堂推出AI数据开源计划面向高校和学术机构等非商业组织群体,首次开源的数据集为:1505小时中文普通话语音数据集(即:aidatatang_1505zh)。该数据集是目前业内数据量最大、句准确率最高的中文普通话开源数据集。
最全的开源中文语料库
深度学习的引入极大地促进了语音识别技术的发展,同时也促使数据成为更好地训练声学模型的关键。大多数中文语音数据集是商用的,获取它们需要支付昂贵的费用。对一些企业来说,为了训练更好的声学模型完全可以任意购买这些数据集,然而,对于坐在实验室的学生们而言,这些数据集往往可望而不可即。为了测试新的想法,他们大多采用自己录制的小规模数据集,这样不均衡的数据集对语音识别训练的效果具有非常明显的影响,导致算法无法得到有效验证。而“数据开源”活动有效地缓解了这一问题,同时也吸引了越来越多的人投入到语音识别研究领域中。从2015年清华大学首次公开了包含30多小时音频的thchs30数据集开始,陆续有不同规模的中文语音数据集参与到数据开源活动中,下表汇总了目前所有的开源中文语音语料库及其详情。
数据集 | 时长(小时) | 录制人 | 标注准确率 | 数据下载 |
---|---|---|---|---|
thchs30 | 33.47 | 40 | - | 下载 |
Primewords_set1 | 100 | 296 | 98% | 下载 |
aishell1 | 178 | 400 | 95% | 下载 |
ST-CMDS | 500 | 855 | - | 下载 |
aishell2 | 1000 | 1991 | 96% | 下载 |
aidatatang_200zh | 200 | 600 | >98% | 下载 |
aidatatang_1505zh | 1505 | 6408 | >98% | 下载 |
从上表可以看出,aidatatang_1505zh数据集的有效时长达1505小时,由6408名来自中国不同地区的录音人参与录制,是目前规模最大的开源中文语音语料库。经过专业语音校对及转写标注,通过严格质量检验,此数据集的句标注准确率达98%以上,是行业内句准确率的最高标准。更多详情请访问数据堂AI开源计划。
最详细的语音识别实验讲解
除了发布aidatatang_1505zh数据集之外,数据堂也基于该数据集展开了相应的语音识别基准实验,本节将会详细介绍实验的过程。
Kaldi安装
该实验依托于Kaldi语音识别工具箱,因此首先需要在环境中安装Kaldi。
详情请参考基于Kaldi的aidatatang_200zh的训练之葵花宝典。
一键运行
数据准备:
- 数据集下载:请访问数据堂官网申请免费获取aidatatang_1505zh中文语音数据集;
- 将数据集划分成训练集、验证集、测试集,并在每个子集内准备相应wav.scp及trans.txt文件;
程序下载:
请访问数据堂GitHub账户获取相关资源,将aidatatang_1505zh语音识别实验相关程序下载到本地:
cd kaldi/egs
git clone git@github.com:datatang-ailab/aidatatang_1505zh.git
一键识别:
在数据准备阶段,本实验采用了结巴分词工具对标注文本进行分词,因而,须首先在环境中安装jieba工具包,见如下命令:
cd kaldi/tools/extras
./install_jieba.sh
当数据及程序均已准备完成后,即可开启一键式语音识别实验了!
cd kaldi/egs/aidatatang_1505zh
vim run.sh ### 记得将以下地址修改成本地数据集的路径
## trn_set=/export/a05/xna/data/train
## dev_set=/export/a05/xna/data/dev
## tst_set=/export/a05/xna/data/test
./run.sh
如果您只想测试数据集的语音识别效果,那么您阅读到这里就可以了。
如果您想对语音识别的过程有更深入的了解,请继续阅读下面的内容。
实验详解
概览:
词典:DaCiDian
语言模型:kaldi-lm
声学模型:
- GMM-HMM模型
- Chain-TDNN-HMM模型
代码注解:
本实验包括三个重要阶段,如下面总脚本run.sh所示:
# prepare trn/dev/tst data, lexicon, lang etc
if [ $stage -le 1 ]; thenlocal/prepare_all.sh ${trn_set} ${dev_set} ${tst_set} || exit 1;
fi# GMM
if [ $stage -le 2 ]; thenlocal/run_gmm.sh --nj $nj --stage $gmm_stage
fi# chain
if [ $stage -le 3 ]; thenlocal/chain/run_tdnn_1a.sh --nj $nj
fi
1. 准备阶段:(prepare_all.sh)
准备词典:
下载用于中文语音识别的DaCiDian,并为后期编译L.fst提供所需的silence_phones.txt,nonsilence_phones.txt,optional_silence.txt,extra_questions.txt文件。
local/prepare_dict.sh data/local/dict
准备数据:
为数据准备Kaldi依赖的相关映射文件,包括wav.scp,spk2utt,utt2spk,text文件。
local/prepare_data.sh ${trn_set} data/local/dict data/local/train data/train local/prepare_data.sh ${dev_set} data/local/dict data/local/dev data/dev local/prepare_data.sh ${tst_set} data/local/dict data/local/test data/test
准备语言模型
根据词典和数据集的标注文本训练语言模型,包括将音素序列映射成词语序列的L.fst,三元文法语言模型G.fst,以及编译LG.fst。
# L tils/prepare_lang.sh --position-dependent-phones false data/local/dict "<UNK>" data/local/lang data/lang# arpa LM local/train_lms.sh data/local/dict/lexicon.txt data/local/train/text data/local/lm # G compilation, check LG composition utils/format_lm.sh data/lang data/local/lm/3gram-mincount/lm_unpruned.gz data/local/dict/lexicon.txt data/lang_test
2. GMM-HMM模型训练阶段:(run_gmm.sh)
实验进行GMM-HMM模型训练时,采取的是语音的MFCC+pitch特征,如下所示:
for x in train dev test; dosteps/make_mfcc_pitch.sh --pitch-config conf/pitch.conf --cmd "$train_cmd" --nj $nj data/$x exp/make_mfcc/$x mfcc || exit 1;steps/compute_cmvn_stats.sh data/$x exp/make_mfcc/$x mfcc || exit 1;utils/fix_data_dir.sh data/$x || exit 1;
done
为了快速启动模型的训练,本实验从原始数据中抽取了部分数据,如下所示:
# subset the training data for fast startup
for x in 120 320; doutils/subset_data_dir.sh data/train ${x}000 data/train_${x}k
done
用12万条数据启动单音素GMM-HMM模型(mono)的训练:
steps/train_mono.sh --cmd "$train_cmd" --nj $nj \data/train_120k data/lang exp/mono || exit 1;
用训练好的mono模型对抽取的32万条数据做对齐,对这些数据进行三音素GMM-HMM模型(tri1)的快速训练:
steps/align_si.sh --cmd "$train_cmd" --nj $nj \data/train_320k data/lang exp/mono exp/mono_ali || exit 1;steps/train_deltas.sh --cmd "$train_cmd" \5000 40000 data/train_320k data/lang exp/mono_ali exp/tri1 || exit 1;
用训练好的三音素模型对所有数据做对齐,对所有数据再次进行三音素GMM-HMM模型(tri2)的训练:
steps/align_si.sh --cmd "$train_cmd" --nj $nj \data/train data/lang exp/tri1 exp/tri1_ali || exit 1;steps/train_deltas.sh --cmd "$train_cmd" \8000 64000 data/train data/lang exp/tri1_ali exp/tri2 || exit 1;
对特征进行线性判别分析及最大似然线性变换后再次训练三音素GMM-HMM模型(tri3):
steps/train_lda_mllt.sh --cmd "$train_cmd" \11000 88000 data/train data/lang exp/tri2_ali exp/tri3 || exit 1;
3. Chain-TDNN-HMM模型训练阶段:(run_tdnn_1a.sh)
本实验在最后采用了链式模型chain model和TDNN网络搭建了DNN-HMM声学模型结构。
由于DNN-HMM模型在CPU上训练速度较慢,因此最好是在GPU上进行训练,并且确保已经编译CUDA!
在进行DNN-HMM模型训练时,本实验采取的是语音的fbank特征,如下所示:
steps/make_fbank.sh --cmd "$train_cmd" --nj 70 data/${train_set}_fbank exp/make_mfcc/train_fbank mfcc_fbank
steps/compute_cmvn_stats.sh data/${train_set}_fbank exp/make_mfcc/train_fbank mfcc_fbank
utils/fix_data_dir.sh data/${train_set}_fbank
进行LF-MMI训练:
steps/align_fmllr_lats.sh --nj $nj --cmd "$train_cmd" data/$train_set data/lang exp/tri5a exp/tri5a_sp_lats
构造优化的HMM拓扑结构:
silphonelist=$(cat $lang/phones/silence.csl) || exit 1;
nonsilphonelist=$(cat $lang/phones/nonsilence.csl) || exit 1;
# Use our special topology... note that later on may have to tune this topology.
steps/nnet3/chain/gen_topo.py $nonsilphonelist $silphonelist >$lang/topo
根据新的拓扑结构重新生成决策树:
steps/nnet3/chain/build_tree.sh --frame-subsampling-factor 3 \--context-opts "--context-width=2 --central-position=1" \--cmd "$train_cmd" 5000 data/${train_set} $lang $ali_dir $treedir
配置神经网络结构:
本实验的输入为40维特征,共有13层网络层,每层隐藏层有1280个节点,网络的输出为8984个类别。具体的网络描保存在exp/chain/tdnn_1a_sp/configs/目录下。
训练TDNN网络:
steps/nnet3/chain/train.py
构建解码图:
utils/mkgraph.sh --self-loop-scale 1.0 data/lang_test $dir $dir/graph
解码:
steps/nnet3/decode.sh --acwt 1.0 --post-decode-acwt 10.0 --nj 10 --cmd "$decode_cmd" \$graph_dir data/${test_set}_fbank $dir/decode_${test_set} || exit 1;
实验结果
查看实验结果:(local/show_results.sh)
for x in exp/*/decode_test; do [ -d $x ] && grep WER $x/cer_* | utils/best_wer.sh; done 2>/dev/null
下图展示了基于该aidatatang_1505zh数据集进行的GMM-HMM模型(mono、tri1、tri2、tri3)训练及Chain-TDNN-HMM模型训练后的字错误率(CER)结果。
由结果可知,DNN-HMM模型训练的效果确实比GMM-HMM模型训练的效果准确。
模型开源
继数据开源之后,数据堂决定将上述语音识别模型开源,以便更多研究人员对自有数据进行中文语音识别的研究。模型下载请访问 DataTang Mandarin ASR System。
更多数据资源
数据堂是一家专业的人工智能数据服务提供商,致力于为全球人工智能企业提供数据获取、处理及数据产品服务,覆盖语音、图像、文本等数据类型,涵盖生物识别、语音识别、自动驾驶、智能家居、智能制造、新零售、OCR场景、智能医疗、智能交通、智能安防、手机娱乐等领域。
- 获取更多开源数据集,请访问这里
- 了解更多商业数据集,请点击这里
数据堂将持续开源更多高质量商业数据集,帮助研究人员拓宽研究领域,丰富研究内容,加速迭代。敬请期待!
最大规模开源中文语音数据集 — aidatatang_1505zh及其语音识别基准实验详解相关推荐
- “智源-MagicSpeechNet 家庭场景中文语音数据集挑战赛”上线
2019 年 12 月,北京智源人工智能研究院联合爱数智慧和数据评测平台 Biendata,共同发布了"智源 MagicSpeechNet 家庭场景中文语音数据集",其中包含数百小 ...
- CN-Celeb 无约束条件说话人识别的中文语音数据集
CN-Celeb 无约束条件说话人识别的中文语音数据集 数据源:http://www.openslr.org/82/ 项目源:http://cslt.riit.tsinghua.edu.cn/medi ...
- 一篇运维老司机的大数据平台监控宝典(1)-联通大数据集群平台监控体系进程详解
一篇运维老司机的大数据平台监控宝典(1)-联通大数据集群平台监控体系进程详解 "如果你是一个经验丰富的运维开发人员,那么你一定知道ganglia.nagios.zabbix.elastics ...
- 【Android语音合成TTS】百度语音接入方法,和使用技巧详解
请尊重他人的劳动成果,转载请注明出处:[Android语音合成TTS]百度语音接入方法,和使用技巧详解 Ps. 依托于百度开放云,百度语音为合作伙伴提供了业界领先.永久免费的语音技术服务,目前已上线的 ...
- 史上最全开源中文 NLP 数据集:包括10大类、142条数据源,总有你钟意的那一款!...
关注上方"深度学习技术前沿",选择"星标公众号", 资源干货,第一时间送达! 有了这个开源项目,再也不用担心找不到好用的中文 NLP 数据集,142 条数据集, ...
- Android 悬浮窗语音识别功能开发详解
笔者是一个普通不能再普通的程序员,本着出处兴趣,花时间研究了一下,想实现手机的悬浮窗语音识别功能,这样不影响自己其它操作的,语音识别技术是用百度云语音sdk,应该不难实现,很难实现就是核心语音识别技术 ...
- snort + barnyard2如何正确读取snort.unified2格式的数据集并且入库MySQL(图文详解)...
不多说,直接上干货! 为什么,要写这篇论文? 是因为,目前科研的我,正值研三,致力于网络安全.大数据.机器学习研究领域! 论文方向的需要,同时不局限于真实物理环境机器实验室的攻防环境.也不局限于真实物 ...
- TensorFlow学习笔记(二十四)自制TFRecord数据集 读取、显示及代码详解
在跑通了官网的mnist和cifar10数据之后,笔者尝试着制作自己的数据集,并保存,读入,显示. TensorFlow可以支持cifar10的数据格式, 也提供了标准的TFRecord 格式,而关于 ...
- CentOs8安装、CentOs8中文拼音输入法安装、Nginx安装配置详解
文章目录 CentOs8安装配置 CentOs8安装中文拼音输入法 CentOs8快捷键设置 CentOs8 Nginx安装 1.安装gcc 2.pcre.pcre-devel安装 3.zlib安装 ...
- OpenAI的人工智能语音识别模型Whisper详解及使用
1 whisper介绍 拥有ChatGPT语言模型的OpenAI公司,开源了 Whisper 自动语音识别系统,OpenAI 强调 Whisper 的语音识别能力已达到人类水准. Whisper是一个 ...
最新文章
- mysql 优化表 3000万_mysql优化:专题三、关于单表查询,可以这么优化
- Android邮件发送详解
- Cannot resolve method addSource
- POJ3067 Japan(归并排序)
- 单机上搭建Node集群
- bash之read命令
- Hive metastore入门
- Altium Designer20 PCB封装库制作
- 原创度检测工具-免费原创度检测软件-在线伪原创免费工具
- matlab归一化mapminmax警告,利用mapminmax归一化的问题
- GPU 编程与CG 语言之阳春白雪下里巴人——CG学习读书笔记之数学函数(三)
- KIBA 和 Davis 数据集下载 以及部分学习笔记
- ios App加载网页,点击网页链接调用App处理
- python爬取京东图书_Python抓取京东图书评论数据
- riscv-sodor-rv32_1stage(2)
- C/C++植物大战僵尸之CE找基址+修改器制作(基础版)
- MySQL之启动选项
- zynq pl访问ps ddr
- 【干货】初中数学思维导图
- 126篇殿堂级深度学习论文分类整理,从入门到应用