最大规模开源中文语料库 — 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的训练之葵花宝典。

一键运行

数据准备:

  1. 数据集下载:请访问数据堂官网申请免费获取aidatatang_1505zh中文语音数据集;
  2. 将数据集划分成训练集、验证集、测试集,并在每个子集内准备相应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及其语音识别基准实验详解相关推荐

  1. “智源-MagicSpeechNet 家庭场景中文语音数据集挑战赛”上线

    2019 年 12 月,北京智源人工智能研究院联合爱数智慧和数据评测平台 Biendata,共同发布了"智源 MagicSpeechNet 家庭场景中文语音数据集",其中包含数百小 ...

  2. CN-Celeb 无约束条件说话人识别的中文语音数据集

    CN-Celeb 无约束条件说话人识别的中文语音数据集 数据源:http://www.openslr.org/82/ 项目源:http://cslt.riit.tsinghua.edu.cn/medi ...

  3. 一篇运维老司机的大数据平台监控宝典(1)-联通大数据集群平台监控体系进程详解

    一篇运维老司机的大数据平台监控宝典(1)-联通大数据集群平台监控体系进程详解 "如果你是一个经验丰富的运维开发人员,那么你一定知道ganglia.nagios.zabbix.elastics ...

  4. 【Android语音合成TTS】百度语音接入方法,和使用技巧详解

    请尊重他人的劳动成果,转载请注明出处:[Android语音合成TTS]百度语音接入方法,和使用技巧详解 Ps. 依托于百度开放云,百度语音为合作伙伴提供了业界领先.永久免费的语音技术服务,目前已上线的 ...

  5. 史上最全开源中文 NLP 数据集:包括10大类、142条数据源,总有你钟意的那一款!...

    关注上方"深度学习技术前沿",选择"星标公众号", 资源干货,第一时间送达! 有了这个开源项目,再也不用担心找不到好用的中文 NLP 数据集,142 条数据集, ...

  6. Android 悬浮窗语音识别功能开发详解

    笔者是一个普通不能再普通的程序员,本着出处兴趣,花时间研究了一下,想实现手机的悬浮窗语音识别功能,这样不影响自己其它操作的,语音识别技术是用百度云语音sdk,应该不难实现,很难实现就是核心语音识别技术 ...

  7. snort + barnyard2如何正确读取snort.unified2格式的数据集并且入库MySQL(图文详解)...

    不多说,直接上干货! 为什么,要写这篇论文? 是因为,目前科研的我,正值研三,致力于网络安全.大数据.机器学习研究领域! 论文方向的需要,同时不局限于真实物理环境机器实验室的攻防环境.也不局限于真实物 ...

  8. TensorFlow学习笔记(二十四)自制TFRecord数据集 读取、显示及代码详解

    在跑通了官网的mnist和cifar10数据之后,笔者尝试着制作自己的数据集,并保存,读入,显示. TensorFlow可以支持cifar10的数据格式, 也提供了标准的TFRecord 格式,而关于 ...

  9. CentOs8安装、CentOs8中文拼音输入法安装、Nginx安装配置详解

    文章目录 CentOs8安装配置 CentOs8安装中文拼音输入法 CentOs8快捷键设置 CentOs8 Nginx安装 1.安装gcc 2.pcre.pcre-devel安装 3.zlib安装 ...

  10. OpenAI的人工智能语音识别模型Whisper详解及使用

    1 whisper介绍 拥有ChatGPT语言模型的OpenAI公司,开源了 Whisper 自动语音识别系统,OpenAI 强调 Whisper 的语音识别能力已达到人类水准. Whisper是一个 ...

最新文章

  1. mysql 优化表 3000万_mysql优化:专题三、关于单表查询,可以这么优化
  2. Android邮件发送详解
  3. Cannot resolve method addSource
  4. POJ3067 Japan(归并排序)
  5. 单机上搭建Node集群
  6. bash之read命令
  7. Hive metastore入门
  8. Altium Designer20 PCB封装库制作
  9. 原创度检测工具-免费原创度检测软件-在线伪原创免费工具
  10. matlab归一化mapminmax警告,利用mapminmax归一化的问题
  11. GPU 编程与CG 语言之阳春白雪下里巴人——CG学习读书笔记之数学函数(三)
  12. KIBA 和 Davis 数据集下载 以及部分学习笔记
  13. ios App加载网页,点击网页链接调用App处理
  14. python爬取京东图书_Python抓取京东图书评论数据
  15. riscv-sodor-rv32_1stage(2)
  16. C/C++植物大战僵尸之CE找基址+修改器制作(基础版)
  17. MySQL之启动选项
  18. zynq pl访问ps ddr
  19. 【干货】初中数学思维导图
  20. 126篇殿堂级深度学习论文分类整理,从入门到应用

热门文章

  1. JavaScript网页游戏开发实战视频教程
  2. RecyclerView 实现多种布局(上半部Gridview样式,下半部Listview样式)以及多种数据类型实现不同布局
  3. 远程调用中间件(RPC
  4. Python 练习题
  5. 【游戏开发】卡牌游戏战斗系统设计与实现
  6. 【LeetCode】3月18日打卡-Day3
  7. CDN是什么?CDN的工作原理?使用CDN有什么优势?
  8. C#利用vbs控制3D Stereoscopic Player播放器
  9. 直播app源码开发,聊天服务器的搭建教程
  10. 开发大脑潜能的11种良方法