
人工智能语音音频深度学习NLP【免费下载链接】espnetEnd-to-End Speech Processing Toolkit项目地址https://gitcode.com/gh_mirrors/es/espnet点击查看免费下载本篇技术指南围绕 ESPnet2 仓库中的 egs2/jtubespeech/tts1/README.md 展开完整讲解如何基于 JTubeSpeech 语料构建日语多说话人 TTS 系统从自动下载约 20GB 的单说话人子集、用 CTC-score 阈值对低质量语音进行数据剪枝到通过 tts.sh 与各模型配置Tacotron2 / FastSpeech2 GST X-vector完成训练与解码。读者读完即可复现该 recipe 的全流程并掌握调整数据剪枝阈值、切换文本前端与模型架构的具体方法。JTubeSpeech 语料与 recipe 概览egs2/jtubespeech/tts1 是 ESPnet2 中面向 JTubeSpeech 语料库的日语多说话人 TTS recipe。JTubeSpeech 是一个大规模日语语音语料库其语音来自 YouTube 等渠道语料中包含多人发音的语音与对应文本。该 recipe 的核心特点是自动下载数据脚本会自动下载并使用一个约20GB 的单说话人子集single-speaker split无需手动准备语料基于 CTC 分数的数据剪枝因为 YouTube 自动字幕中可能存在识别错误或噪声recipe 使用预先计算的 CTC 分数对语音进行过滤默认阈值为-0.1可通过local/data.sh的参数调整多说话人建模训练时默认启用 speaker embeddingx-vector支持 GST X-vector 等多说话人扩展多种模型可切换默认配置为 Tacotron2也可通过 tuning 配置切换为 FastSpeech2Conformer 编码器等。该 recipe 的完整运行方式、各模型的训练指南均继承自 ESPnet2 的 TTS 模板文档 egs2/TEMPLATE/tts1/README.md本文会逐条给出对应的仓库内链接。数据准备流水线从下载到 Kaldi 风格数据目录recipe 的run.sh会依次执行数据下载、预处理、切分、静音去除与数据子集划分。其中数据准备部分由 local/data.sh 驱动分为 4 个阶段阶段说明调用的脚本stage -1数据下载local/download.shstage 0初始数据规范化切分 剪枝local/data_prep.shstage 1静音去除trim silencescripts/audio/trim_silence.shstage 2训练/开发/测试集划分utils/subset_data_dir.sh自动下载download.shlocal/download.sh 使用gdown从 Google Drive 下载jtuberaw.tar.gzGoogle Drive 文件 ID 为1X_harC0e1tjMX1FtCldD67XOysQuq_Ib下载后解压到downloads/jtuberaw目录。若目录已存在则自动跳过保证脚本可重复执行。依赖db.sh中的JTUBESPEECH变量指定存放位置# egs2/jtubespeech/tts1/db.sh JTUBESPEECHdownloadslocal/data.sh在启动时会检查该变量if [ -z ${JTUBESPEECH} ]; then log Fill the value of JTUBESPEECH of db.sh exit 1 fi db_root${JTUBESPEECH}切分与剪枝split.py prune.py下载得到的原始数据为整段 YouTube 音频及其字幕文本需要先按句子边界切分成句级片段再用 CTC 分数过滤掉低质量片段。local/data_prep.sh 依次调用两个 Python 脚本# 切分 wav 文件 python local/split.py --db_raw ${dbr} --db_split ${dbs} # 基于预计算的 ctcscore 剪枝 python local/prune.py --score_thresh ${scorethresh} --db_raw ${dbr} --db_split ${dbs}切分split.py读取原始目录下的txt/speaker/*.txt字幕文件其中每行是起始时间\t结束时间\t文本格式。脚本按时间段从原始 16kHz 波形中截取片段输出为jtubesplit/wav16k/stem/stem_idx.wav同时生成transcript_raw.txt格式为片段ID 文本。片段 ID 由原始文件名加 4 位序号组成如stem_0000。剪枝prune.pyJTubeSpeech 提供了预先计算的 CTC 分数文件ctcscore.txt。prune.py 将该文件中每个片段 ID 的 CTC 分数与阈值--score_thresh比较仅保留分数大于阈值的片段写出transcript_prune.txt。核心逻辑见 local/prune.pyd_ctcscore dict() with open(ctcscore_path, r) as fr: for line in fr: line_list line.strip().split( , 5) d_ctcscore[line_list[0]] float(line_list[4]) with open(raw_transcript_path, r) as fr: for line in fr: line_list line.strip().split( , 1) stem line_list[0] try: if d_ctcscore[stem] thresh_ctc: with open(pruned_transcript_path, a) as fa: fa.write(line) except KeyError: pass从源码可见剪枝阈值越高保留的语音越“干净”要求更高的 CTC 置信度保留的数据量也越小阈值越低则保留更多数据但可能混入更多识别错误或噪声片段。recipe 默认在local/data.sh中设置ctcscore_pruning_threshold-0.1ctcscore_pruning_threshold-0.1调整阈值的方法直接以参数形式覆盖默认值即可例如保留更干净的数据./local/data.sh --ctcscore_pruning_threshold 0.0或放宽筛选、保留更多数据./local/data.sh --ctcscore_pruning_threshold -0.5注意该参数通过utils/parse_options.sh解析而prune.py自身的默认阈值是-0.5两者以local/data.sh的传入值为准。生成 Kaldi 风格数据目录剪枝完成后local/data_prep.sh 遍历transcript_prune.txt生成标准数据文件text片段ID 文本wav.scp片段ID 绝对路径通过find定位 wav16k 目录下的文件utt2spk说话人 ID 取自文件名的前 11 个字符spkr${filename:0:11}spk2utt由utils/utt2spk_to_spk2utt.pl从utt2spk反向生成。随后local/data.sh的 stage 1 调用scripts/audio/trim_silence.sh去除静音--fs 16000 --win_length 1024 --shift_length 256 --threshold 35并行度nj8stage 2 用utils/subset_data_dir.sh划分出dev250 条、test250 条验证/测试集剩余数据构成训练集tr_no_dev并最终产出data/all、data/devtest、data/dev、data/test、data/tr_no_dev等目录。run.sh训练入口与日语文本前端完成数据准备后egs2/jtubespeech/tts1/run.sh 调用通用的 tts.sh 执行后续的特征提取、token 列表生成、统计量收集、训练与解码。其关键参数如下参数值说明--lang jp日语语言设置--feats_type rawraw直接使用 16kHz 波形fs16000--fs 1600016000采样率16000 时强制--audio_format wav--n_fft 10241024FFT 点数--n_shift 256256帧移--win_length 10241024窗长--use_spk_embed truetrue启用说话人嵌入多说话人建模--spk_embed_tool kaldikaldi说话人嵌入工具需编译 Kaldi自动使用 xvector--spk_embed_tag xvectorxvector嵌入类型--token_type phnphn音素级 token--cleaner jaconvjaconv文本清理器日语假名/汉字转换--g2p pyopenjtalkpyopenjtalk文本到音素转换--train_set tr_no_dev/--valid_set dev/--test_sets dev test—数据集划分--train_config conf/train.yaml—训练配置默认 Tacotron2--inference_config conf/decode.yaml—解码配置日语文本前端g2p是日语 TTS 的关键环节。run.sh 中注释给出了四种可选方案输入示例こ、こんにちはPhoneme Pause默认g2ppyopenjtalkk o pau k o N n i ch i w a——音素加停顿符号适合常规训练Kana Symbolg2ppyopenjtalk_kanaコ 、 コ ン ニ チ ワ——假名加标点符号Phoneme Accentg2ppyopenjtalk_accentk 1 0 o 1 0 k 5 -4 ...——音素级声调accent标记可提升韵律Phoneme Accent Pauseg2ppyopenjtalk_accent_with_pausek 1 0 o 1 0 pau k 5 -4 ...——同时包含声调与停顿。启用声调标注的方案3、4需要在训练与解码配置中配套使用use_phone_accent等选项可根据目标音色表现与韵律质量自行切换。模型配置解析Tacotron2 默认配置与 FastSpeech2 调优配置默认配置Tacotron2 GST X-vectorconf/train.yamlconf/train.yaml 中默认训练 Tacotron2并同时启用GSTGlobal Style Tokens与X-vector 说话人嵌入同时使用 guided attention loss 加速对角注意力学习。文件头注释说明在 V100 上约需 4 天完成训练。关键配置项配置项值说明tts: tacotron2—模型架构embed_dim: 512512字符/音素嵌入维度elayers: 1/eunits: 512—编码器 BLSTM 层数与单元数econv_layers: 3/econv_chans: 512/econv_filts: 5—编码器卷积层配置atype: location—location-based attentionadim: 512512注意力维度dlayers: 2/dunits: 1024—解码器 LSTM 层数与单元数prenet_layers: 2/prenet_units: 256—prenet 配置postnet_layers: 5/postnet_chans: 512/postnet_filts: 5—postnet 配置spk_embed_dim: 512512说话人嵌入维度spk_embed_integration_type: addadd说话人嵌入融合方式use_gst: true/gst_heads: 4/gst_tokens: 16—GST 多头注意力与全局风格 token 数dropout_rate: 0.5/zoneout_rate: 0.1—dropout 与 zoneoutreduction_factor: 11解码 reduction factoruse_guided_attn_loss: true—启用 guided attention lossguided_attn_loss_sigma: 0.4/lambda: 1.0—guided attention loss 参数optim: adam/lr: 1.0e-03—优化器与学习率num_iters_per_epoch: 500/max_epoch: 500—每轮迭代数与最大轮数batch_bins: 3750000/batch_type: numel—按元素数打包 batchfeats_typerawkeep_nbest_models: 55保留的最优模型数调优配置Conformer FastSpeech2 GST X-vectortuning/train_gstxvector_conformer_fastspeech2.yaml 提供了 FastSpeech2 方案Conformer 编码器/解码器 GST X-vector注释说明需要 4 张 32GB 显存的 GPU在 V100 上约 3 天完成训练。与原始 FastSpeech2 论文相比该配置使用 token 平均的 pitch 与 energy与 FastPitch 一致且不做量化。由于 FastSpeech2 需要显式提取 pitch 与 energy必须配合feats_typeraw使用。核心差异点配置项值说明tts: fastspeech2—非自回归模型adim: 384/aheads: 2—注意力维度与头数elayers: 4/eunits: 1536/dlayers: 4/dunits: 1536—编解码器层数与 FFN 单元数encoder_type: conformer/decoder_type: conformer—Conformer 编解码器positionwise_layer_type: conv1d/kernel_size: 3—位置前馈层duration_predictor_layers: 2/chans: 256/kernel_size: 3—时长预测器pitch_predictor_layers: 5/energy_predictor_layers: 2—韵律预测器pitch_extract: dio/pitch_normalize: global_mvn—基频提取与归一化energy_extract: energy/energy_normalize: global_mvn—能量提取与归一化scheduler: noamlr/warmup_steps: 4000—Noam 学习率调度batch_bins: 18000000—更大的 batch 容量raw 特征该目录下还提供了其他组合配置如train_gst_fastspeech2.yaml、train_xvector_tacotron2.yaml、train_gstxvector_transformer.yaml等可通过--train_config参数自由切换./run.sh --train_config conf/tuning/train_gstxvector_conformer_fastspeech2.yaml训练、解码与评估继承模板文档的完整流程recipe 的执行方式、训练各类模型的具体命令、解码与评估等均以 ESPnet2 TTS 模板文档 egs2/TEMPLATE/tts1/README.md 为准。该文档按 11 个 stage 组织流程数据准备 → wav dump / 嵌入提取 → 说话人嵌入提取 → 长/短数据过滤--min_wav_duration/--max_wav_duration→ token 列表生成--token_type char|phn→ TTS 统计量收集 → 训练--train_config/--train_args→ 解码--inference_config/--inference_args→ 基于 VERSA 的评估 → 打包 → 上传 Hugging Face。与本 recipe 直接相关的训练/使用入口如下均为仓库内相对链接如何运行 recipecd进入 recipe 目录、按需修改db.sh与cmd.sh、直接执行./run.sh完成全部阶段也推荐首次运行时用--stage/--stop-stage逐步执行以理解各阶段产物。FastSpeech 训练需先训练教师模型Tacotron2 / Transformer-TTS用--tts_exp指定教师模型并以--test_sets tr_no_dev dev eval1对所有数据解码生成durations再通过--teacher_dumpdir训练 FastSpeech。FastSpeech2 训练FastSpeech2 是自回归无关的非自回归模型可直接使用上文 tuning 配置训练。多说话人模型X-vector训练本 recipe 的run.sh已默认开启--use_spk_embed true --spk_embed_tool kaldi训练时会自动提取 x-vector 作为说话人嵌入。多说话人模型Speaker ID训练若希望改用说话人 ID 嵌入需在数据准备阶段保证utt2spk正确并切换--use_sid true等相关选项。VITS 训练VITS 为端到端 text2wav 模型可直接生成波形无需额外声码器。联合 text2wav 训练训练可同时输出声学特征与波形的联合模型。FAQ涵盖 ESPnet1 模型兼容性、minibatch 调整、新 recipe 创建、g2p/cleaner 扩展、预训练模型加载与微调、任意文本测试、vocoder 训练等常见问题。运行./run.sh后recipe 目录会生成data/Kaldi 风格数据目录、dump/特征与 token_list、exp/tts_stats_*统计量、tts_train_*模型与decode_*解码结果其中wav/为通过 Griffin-Lim 重建的波形。解码阶段默认使用 Griffin-Lim 生成波形如需更高质量的神经声码器可参照模板文档通过--inference_args --vocoder_tag ...或--vocoder_file接入 ParallelWaveGAN 等模型。结语JTubeSpeech TTS recipe 是 ESPnet2 中一个典型的大规模互联网语料 自动质量筛选的实战范例约 20GB 的原始语音只需一次命令即可自动下载配合预计算的 CTC 分数完成数据剪枝再经由标准的 tts.sh 流水线训练出带 X-vector 说话人嵌入的日语多说话人 TTS 模型。其数据剪枝阈值ctcscore_pruning_threshold、文本前端pyopenjtalk 系列 g2p与模型配置Tacotron2 / FastSpeech2 GST X-vector均可灵活调整为研究者在自有日语语料上构建多说话人 TTS 提供了可直接复用的完整流程。赞分享人工智能语音音频深度学习NLP【免费下载链接】espnetEnd-to-End Speech Processing Toolkit项目地址https://gitcode.com/gh_mirrors/es/espnet点击查看免费下载相关推荐Vitest Mocking Globals 全局变量模拟实战stubGlobal 与 unstubGlobals 完全指南Vitest Mocking Globals 全局变量模拟实战stubGlobal 与 unstubGlobals 完全指南 在 jsdom 或 node 环人工智能语音音频深度学习NLPSymPy Docstring 风格指南从 Single-Sentence Summary 到 Sphinx 交叉引用的完整写作规范SymPy Docstring 风格指南从 Single Sentence Summary 到 Sphinx 交叉引用的完整写作规范 本文基于 SymPy 官人工智能语音音频深度学习NLPESPnet2 J-KAC 日语单说话人 TTS 配方实战指南从语料准备到模型训练与调优ESPnet2 J KAC 日语单说话人 TTS 配方实战指南从语料准备到模型训练与调优 本篇技术指南以 egs2/jkac/tts1/README.md h人工智能语音音频深度学习NLP上一篇ActionBarSherlock的启动器图标适配自适应图标实现下一篇DLSS-Enabler打破硬件壁垒让所有GPU都能享受DLSS黑科技的终极解决方案创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考