人工智能语音音频深度学习NLP【免费下载链接】espnetEnd-to-End Speech Processing Toolkit项目地址https://gitcode.com/gh_mirrors/es/espnet点击查看免费下载本篇技术指南以 ESPnet 仓库中的egs2/csmsc/tts1recipe关联文档为核心系统讲解如何在 ESPnet2 框架下使用 CSMSCChinese Standard Mandarin Speech Corpus标贝中文标准女声朗读语料库训练中文单说话人 TTS 模型。文中完整继承原文档中 VITS22.05 kHz / 44.1 kHz 全频带、Tacotron2、FastSpeech、FastSpeech2、Transformer 等模型的训练命令与三代预训练结果记录并结合仓库内的 run.sh、local/data.sh 及conf/tuning/下的真实配置源码深入讲解中文拼音 G2P 前端、数据清洗、特征配置、GAN 训练参数与解码参数。读完本文你将能够从零复现 CSMSC TTS 的完整训练-解码-评估流水线并掌握将同一套方法迁移到自有中文数据集的关键要点。CSMSC Recipe 概览语料、目标与目录结构CSMSC 是中文标准普通话女声单说话人朗读语料库egs2/csmsc/tts1是 ESPnet2 中对应的 TTS recipe目标是训练单说话人中文 TTS 模型。原文档将其定位为 Mandarin single female speaker TTS 的标准实验床并记录了三代实验结果Initial / Second / Third Results覆盖从经典的序列到序列模型Tacotron2、Transformer到非自回归模型FastSpeech、FastSpeech2、Conformer 变体再到端到端文本到波形模型VITS的演进。该 recipe 目录下的关键结构如下路径作用run.sh主入口脚本逐 stage 调用tts.shlocal/data.sh数据准备脚本下载、清洗、划分 train/dev/evallocal/data_download.sh语料自动下载脚本db.sh配置语料路径默认CSMSCdownloadsconf/train.yaml默认训练配置Tacotron2conf/decode.yaml默认解码配置conf/tuning/各模型调优配置VITS / FastSpeech / FastSpeech2 / Transformer / Conformer 等tts.sh由 TEMPLATE 继承的 TTS 通用流水线脚本官方使用说明集中在 egs2/TEMPLATE/tts1/README.md 中本文后续的流水线细节、各模型训练方法即以此为骨架展开并结合 CSMSC 特有的中文配置进行落地。TTS Recipe 十一阶段流水线tts.sh由 egs2/TEMPLATE/tts1/tts.sh 提供将 TTS 任务组织为多个可独立执行的 stage每个 stage 都可以通过--stage/--stop-stage单独运行便于逐步理解与调试数据准备Data preparation调用local/data.sh创建 Kaldi 风格数据目录data/tr_no_dev、data/dev、data/eval1包含wav.scp、text、utt2spk、spk2utt、segments等文件。Wav dump / 嵌入准备Wav dump / Embedding preparation将wav.scp重格式化如转 flac支持--use_spk_embed true提取说话人嵌入可选 kaldi / speechbrain / espnet 工具--use_sid true/--use_lid true则生成说话人 ID / 语言 ID。说话人嵌入提取Extract speaker embeddings单独执行嵌入提取。长/短句过滤Removal of long / short data通过--min_wav_duration与--max_wav_duration控制训练/验证数据的时长范围。Token 列表生成Token list generation从srctexts生成词典--token_type支持char与phn--cleaner指定文本清洗器token_typephn时由--g2p指定的 G2P 模块完成音素化。TTS 统计信息收集TTS statistics collection收集输入输出的 shape 信息并计算特征归一化所需的均值/方差。TTS 训练TTS training通过--train_config与--train_args控制模型与训练超参。TTS 解码TTS decoding通过--inference_config与--inference_args控制生成参数。TTS 评估TTS eval using versa使用 versa 计算 PESQ、STOI、MCD、F0 相关/误差、UTMOS、DNSMOS、PLCMOS、说话人相似度等客观指标。可选打包结果Pack results for upload为上传 Hugging Face 打包模型文件。可选上传模型Upload model to Hugging Face共享训练好的模型。egs2/csmsc/tts1/run.sh的默认设置为fs24000、n_fft2048、n_shift300、win_length1200、token_typephn、g2ppypinyin_g2p_phone、cleanernone、--lang zh训练集/验证集/测试集分别为tr_no_dev、dev、eval1。从零开始数据准备与目录结构语料路径与自动下载在 db.sh 中设置CSMSCdownloads默认值表示语料由 recipe 自动下载。如果语料已在本地可改为绝对路径。运行前需在 recipe 目录执行$ vim db.sh # 修改 CSMSC 变量指向语料位置 $ vim cmd.sh # 如需使用任务调度器slurm/pbs 等按 parallelization 文档配置 $ ./run.sh # 一键运行全部 stage数据准备细节local/data.shlocal/data.sh 实现了三个 stagestage -1数据下载调用local/data_download.sh ${db_root}下载 CSMSC 语料。stage 0数据清洗与建目录从CSMSC/Wave下的 wav 文件生成wav.scp与utt2spk说话人统一标记为csmsc并用utils/utt2spk_to_spk2utt.pl生成spk2utt随后对ProsodyLabeling/000001-010000.txt进行中文文本清洗nkf转码后去除韵律标记#1-#4、统一标点例如原文注释所示今天#3快递员#1拿着#1一个#1快递#1在#1办公室#1喊#3秦王#1是#1哪个#3有他#1快递#4→今天快递员拿着一个快递在办公室喊秦王是哪个有他快递最后从PhoneLabeling的.interval文件解析起止时间生成segments。stage 1数据集划分先用utils/subset_data_dir.sh --last data/train 200 data/deveval切出 200 句作为 dev/eval 池再从其中取后 100 句为eval1、前 100 句为dev剩余作为tr_no_dev训练集。运行后的目录结构训练完成后recipe 目录下会生成├── data/ # Kaldi 风格数据目录tr_no_dev / dev / eval1 ├── dump/ # 特征 dump 目录 │ ├── token_list/ # 词典 │ └── raw/ │ ├── org/ # 过滤前的训练/验证集 │ ├── srctexts # 生成词典用的文本 │ └── ... # 过滤后的各集合 └── exp/ # 实验目录 ├── tts_stats_* # 统计信息 └── tts_train_* # 模型目录 ├── config.yaml # 训练配置快照 ├── train.log # 训练日志 ├── *epoch.pth # 模型参数文件 ├── checkpoint.pth # 模型优化器调度器 ├── latest.pth # 最新参数软链接 ├── *.ave_5best.pth # 平均参数 ├── *.best.pth # 最优参数软链接 └── decode_train.loss.ave/ # 解码结果含 wav/、att_ws/、durations 等首次运行时建议按 stage 逐步执行以理解每一步的处理与产物$ ./run.sh --stage 1 --stop-stage 1 $ ./run.sh --stage 2 --stop-stage 2 ... $ ./run.sh --stage 8 --stop-stage 8中文文本前端pypinyin G2P 与音素 tokenCSMSC 是中文语料其文本前端采用基于pypinyin的中文拼音 G2P这是本 recipe 区别于英文 recipe如 ljspeech 的g2p_en的核心点。run.sh 中注释给出了两种 G2P 的效果对比输入卡尔普陪外孙玩滑梯pypinyin_g2pka3 er3 pu3 pei2 wai4 sun1 wan2 hua2 ti1带声调的音节序列pypinyin_g2p_phonek a3 er3 p u3 p ei2 uai4 s un1 uan2 h ua2 t i1声母/韵母拆分声调标记在韵母上在 egs2/TEMPLATE/tts1/README.md 支持的 G2P 列表中pypinyin基于 mozillazg/python-pinyin例如卡尔普陪外孙玩滑梯。→[ka3, er3, pu3, pei2, wai4, sun1, wan2, hua2, ti1, 。]pypinyin_phone将音节拆分为声母和韵母例如卡尔普陪外孙玩滑梯。→[k, a3, er3, p, u3, p, ei2, wai4, s, un1, uan2, h, ua2, t, i1, 。]本 recipe 默认使用pypinyin_g2p_phone即pypinyin_phone的 g2p 实现配合--token_type phn与--cleaner none。G2P 模块的底层实现位于 espnet2/text/phoneme_tokenizer.py新增 G2P 需要在该文件实现模块并将其加入g2p_choices。训练各代 TTS 模型从 Tacotron2 到 VITS默认训练Tacotron2./run.sh默认使用 conf/train.yaml 训练 Tacotron2。该配置相比原论文额外加入了guided attention loss以加速对角注意力学习核心参数包括编码器econv_layers3、econv_chans512、econv_filts5BLSTMelayers1、eunits512注意力atypelocationlocation-sensitive attention、adim512解码器dlayers2、dunits1024、prenetprenet_layers2、prenet_units256、postnetpostnet_layers5损失相关reduction_factor1、use_guided_attn_losstrue、guided_attn_loss_sigma0.4、bce_pos_weight5.0优化器Adamlr1.0e-3max_epoch200、batch_typenumel、batch_bins3750000feats_typeraw 时默认解码使用 Griffin-Lim 从生成特征重建波形如需结合神经网络声码器可在 stage 8 指定--inference_args --vocoder_tag parallel_wavegan/ljspeech_style_melgan.v1或使用自训声码器--vocoder_file /path/to/checkpoint.pkl。FastSpeech 训练知识蒸馏FastSpeech 需要先由教师模型Tacotron2 或 Transformer解码出 duration。首先对全部数据训练/验证/测试集解码$ ./run.sh --stage 8 \ --tts_exp exp/tts_train_raw_phn_tacotron_g2p_en_no_space \ --test_sets tr_no_dev dev eval1这会生成各集合的durations。然后用--teacher_dumpdir指向包含 durations 的目录训练 FastSpeech$ ./run.sh --stage 7 \ --train_config conf/tuning/train_fastspeech.yaml \ --teacher_dumpdir exp/tts_train_raw_phn_tacotron_g2p_en_no_space/decode_train.loss.ave若希望以真实 mel 谱而非教师生成谱作为目标非蒸馏训练解码时需加教师强制$ ./run.sh --stage 8 \ --tts_exp exp/tts_train_raw_phn_tacotron_g2p_en_no_space \ --inference_args --use_teacher_forcing true \ --test_sets tr_no_dev dev eval1FastSpeech2 训练FastSpeech2 流程与 FastSpeech 类似但必须使用教师强制解码且需要额外的 F0 与能量特征因此要从 stage 6 重新计算统计量$ ./run.sh --stage 6 \ --train_config conf/tuning/train_fastspeech2.yaml \ --teacher_dumpdir exp/tts_train_raw_phn_tacotron_g2p_en_no_space/decode_use_teacher_forcingtrue_train.loss.ave \ --tts_stats_dir exp/tts_train_raw_phn_tacotron_g2p_en_no_space/decode_use_teacher_forcingtrue_train.loss.ave/stats \ --write_collected_feats true--tts_stats_dir指定统计量输出目录--write_collected_feats true会在统计阶段同时 dump 特征可加速后续训练。conf/tuning/train_fastspeech2.yaml 的关键配置包括模型adim384、aheads2、编码器/解码器各 4 层、units 1536position-wise 为conv1dkernel 3时长预测器duration_predictor_layers2、duration_predictor_chans256韵律预测器pitch predictor 5 层 256 通道pitch_extract: dio、energy predictor 2 层 256 通道与原始 FastSpeech2 论文不同本配置使用 token 级平均的 pitch/energy同 FastPitch且不做量化优化器Adamlr1.0noamlr调度器model_size384、warmup_steps4000VITS 训练端到端文本到波形VITS 是真正的端到端 text-to-waveform 模型训练时需指定--tts_task gan_tts且配置针对22.05 kHz 或 44.1 kHz 硬编码默认特征为linear_spectrogram。CSMSC recipe 提供了两条官方复现命令22.05 kHz 单说话人 VITS对应 conf/tuning/train_vits.yaml./run.sh \ --stage 1 \ --ngpu 4 \ --fs 22050 \ --n_fft 1024 \ --n_shift 256 \ --dumpdir dump/22k \ --expdir exp/22k \ --win_length null \ --tts_task gan_tts \ --feats_extract linear_spectrogram \ --feats_normalize none \ --train_config ./conf/tuning/train_vits.yaml \ --inference_model train.total_count.ave.pth44.1 kHz 全频带 VITS对应 conf/tuning/train_full_band_vits.yaml该配置注释中说明主要在 CSMSC 与 JSUT 上测试./run.sh \ --stage 1 \ --ngpu 4 \ --fs 44100 \ --n_fft 2048 \ --n_shift 512 \ --dumpdir dump/44k \ --expdir exp/44k \ --win_length null \ --tts_task gan_tts \ --feats_extract linear_spectrogram \ --feats_normalize none \ --train_config ./conf/tuning/train_full_band_vits.yaml \ --inference_model train.total_count.ave.pth模板文档提醒VITS 训练耗时较长约数周但大约 10 万步100k iters即可生成合理的声音训练中可通过tts_conf.plot_pred_mos: true用伪 MOS 预测模型监控合成质量。VITS 与 JETS 训练建议设置cudnn_deterministic: falseGAN-TTS 训练强烈推荐虽然会引入非确定性但能显著加速。Joint text2wav 联合训练可选联合训练将 text2mel 与声码器一起以 GAN 方式训练支持 Tacotron2 / Transformer / FastSpeech / FastSpeech2 作为文本侧ParallelWaveGAN G/D、MelGAN、HiFiGAN、StyleMelGAN 等作为声码器。典型命令$ ./run.sh \ --stage 7 \ --tts_task gan_tts \ --train_config ./conf/tuning/train_joint_conformer_fastspeech2_hifigan.yaml也可基于预训练 text2mel 与声码器做联合微调需先将 ParallelWaveGAN 的.pklcheckpoint 中的 generator/discriminator 拆出保存为.pth再在配置中通过init_param指定路径。VITS 配置源码级解析conf/tuning/train_vits.yaml 是 22.05 kHz 的官方调优配置其结构对理解 VITS 的 ESPnet2 实现非常有价值生成器vits_generator关键参数参数默认值说明hidden_channels192生成器隐层通道数segment_size32训练时随机裁剪的波形片段大小text_encoder_blocks6文本编码器Conformer 风格层数text_encoder_self_attention_layer_typerel_selfattn相对位置自注意力decoder_kernel_size7HiFiGAN 风格解码器卷积核decoder_upsample_scales[8, 8, 2, 2]22k/ [8, 8, 2, 2, 2]44.1k上采样倍率序列decoder_resblock_kernel_sizes[3, 7, 11]ResBlock 卷积核posterior_encoder_layers16后验编码器层数flow_flows/flow_layers4 / 4归一化流层数与每层流数use_only_mean_in_flowtrue推理时流仅使用均值判别器hifigan_multi_scale_multi_period_discriminator多尺度scales1AvgPool 下采样 多周期periods[2, 3, 5, 7, 11]对应官方 HiFiGAN 判别器设计。损失函数lambda_adv1.0、lambda_mel45.0Mel 谱损失n_fft1024、hop_length256、n_mels80、lambda_feat_match2.0、lambda_dur1.0、lambda_kl1.0。mel_loss_params的fs/n_fft/hop_length必须与训练数据一致。优化器与调度器生成器与判别器各用一套 AdamWlr2.0e-4、betas[0.8, 0.99] exponentiallrgamma0.999875generator_first: false。训练超参num_iters_per_epoch1000、max_epoch1000、batch_typenumel、batch_bins500000022k/1000000044.1k、keep_nbest_models10、best_model_criterion为 train 的total_count取 max即按累计样本数保留最优。解码配置conf/tuning/decode_vits.yamlnoise_scale0.667流的噪声尺度、noise_scale_dur0.8随机时长预测器噪声尺度、speed_control_alpha11 变慢、1 变快用于语速控制、use_teacher_forcingfalse。客观评估MCD / F0 / CER / CFSD / SECS模板文档提供了多组客观评估脚本与 CSMSC recipe 的dump/raw/eval1与exp/.../decode_*/eval1/wav配合使用cd egs2/recipe_name/tts1 . ./path.sh # MCDMel 倒谱失真 ./pyscripts/utils/evaluate_mcd.py \ exp/model_dir_name/decode_dir_name/eval1/wav/wav.scp \ dump/raw/eval1/wav.scp # log-F0 RMSE可加 --f0min/--f0max 限制范围提高精度 ./pyscripts/utils/evaluate_f0.py \ exp/model_dir_name/decode_dir_name/eval1/wav/wav.scp \ dump/raw/eval1/wav.scp # 伪 MOSUTMOS/DNSMOS 等 ./pyscripts/utils/evaluate_pseudomos.py \ exp/model_dir_name/decode_dir_name/eval1/wav/wav.scp \ dump/raw/eval1/wav.scp # CER字错误率反映可懂度ASR 模型不带标点建议先去标点 ./scripts/utils/evaluate_asr.sh \ --model_tag asr_model_tag \ --nj 1 \ --inference_args --beam_size 10 --ctc_weight 0.4 --lm_weight 0.0 \ --gt_text dump/raw/eval1/text \ exp/model_dir_name/decode_dir_name/eval1/wav/wav.scp \ exp/model_dir_name/decode_dir_name/asr_results # CFSD / SECS / SpeechBERTScore / SpeechBLEU ./pyscripts/utils/evaluate_cfsd.py exp/.../eval1/wav/wav.scp dump/raw/eval1/wav.scp ./pyscripts/utils/evaluate_secs.py exp/.../eval1/wav/wav.scp dump/raw/eval1/wav.scp ./pyscripts/utils/evaluate_speechbertscore.py exp/.../eval1/wav/wav.scp dump/raw/eval1/wav.scp ./pyscripts/utils/evaluate_speechbleu.py exp/.../eval1/wav/wav.scp dump/raw/eval1/wav.scpMCD 与 log-F0 RMSE 反映音色、韵律与音素内容相似度应用了动态时间规整DTW对齐生成与真实语音的长度差异CER 反映可懂度离散语音指标如 SpeechBERTScore相比 MCD 与主观评价的相关性更高。这些客观指标无法完全反映高保真语音的听感若要细究感知质量仍建议进行主观评测。三代实验结果与预训练模型记录原文档按时间倒序记录了三代实验结果Third ResultsVITS 时代espnet 0.10.3a1环境dateSat Sep 4 19:38:35 JST 2021python3.7.3pytorch1.7.1Git hashdee654041cddf80281048b3e7525c1cdafc377ffcommit dateThu Sep 2 14:45:48 2021 0900csmsc_tts_train_vits_raw_phn_pypinyin_g2p_phone_train.total_count.ave22.05 kHz / 1M iters / 平均最后 10 个 epoch 的模型Zenodo record 5499120csmsc_tts_train_full_band_vits_raw_phn_pypinyin_g2p_phone_train.total_count.ave44.1 kHz / 1M iters / 平均最后 10 个 epoch 的模型Zenodo record 5521404两个模型的完整复现命令即上文 22.05 kHz 与 44.1 kHz 的两条./run.sh命令。Second Resultsespnet 0.9.3环境dateThu Oct 1 14:25:19 JST 2020python3.7.3pytorch1.5.1Git hash51352aee9ae318640e128a645e722d1f7524edb1预训练模型均为_raw_phn_pypinyin_g2p_phone_前缀 train.loss.avecsmsc_tts_train_tacotron2_raw_phn_pypinyin_g2p_phone_train.loss.aveZenodo record 4060517csmsc_tts_train_fastspeech_raw_phn_pypinyin_g2p_phone_train.loss.aveZenodo record 4060522csmsc_tts_train_conformer_fastspeech_raw_phn_pypinyin_g2p_phone_train.loss.aveZenodo record 4060520Initial Resultsespnet 0.9.3环境dateSun Sep 20 19:04:37 JST 2020python3.7.3pytorch1.6.0Git hash08b981aa61e6d4fc951af851f0fa4ebb14f00d4c预训练模型csmsc_tts_train_tacotron2_raw_phn_pypinyin_g2p_phone_train.loss.bestrecord 3969118csmsc_tts_train_fastspeech_raw_phn_pypinyin_g2p_phone_train.loss.bestrecord 3986227csmsc_tts_train_transformer_raw_phn_pypinyin_g2p_phone_train.loss.averecord 4034125csmsc_tts_train_fastspeech2_raw_phn_pypinyin_g2p_phone_train.loss.averecord 4031953csmsc_tts_train_conformer_fastspeech2_raw_phn_pypinyin_g2p_phone_train.loss.averecord 4031955可以看出 CSMSC recipe 覆盖了 ESPnet2 TTS 的主流模型族Tacotron2、Transformer、FastSpeech、FastSpeech2、Conformer 变体、VITS模型命名规范为csmsc_tts_train_{模型}_{特征}_{tokenizer}_{g2p}_train.{选择准则}。上述预训练模型可通过 ESPnet Model Zoo 检索获得也可按模板文档的说明从 Zenodo 下载链接直接加载推理。使用预训练模型推理与微调加载本地或下载的模型进行推理核心接口是 espnet2/bin/tts_inference.py 中的Text2Speechfrom espnet2.bin.tts_inference import Text2Speech # 仅文本到语音模型VITS 可直接生成波形 tts Text2Speech.from_pretrained(model_file/path/to/model.pth) wav tts(卡尔普陪外孙玩滑梯)[wav] # 结合本地声码器 tts Text2Speech.from_pretrained(model_file/path/to/model.pth, vocoder_file/path/to/vocoder.pkl) wav tts(卡尔普陪外孙玩滑梯)[wav] # 结合预训练声码器 tts Text2Speech.from_pretrained(model_file/path/to/model.pth, vocoder_tagparallel_wavegan/ljspeech_style_melgan.v1) wav tts(卡尔普陪外孙玩滑梯)[wav]加载预训练参数使用--init_param file_path:src_key:dst_key:exclude_keys语法# 加载全部参数 python -m espnet2.bin.tts_train --init_param model.pth # 仅加载 decoder 前缀参数并映射到 tts.dec python -m espnet2.bin.tts_train --init_param model.pth:decoder:tts.dec # 排除指定模块如 tts.enc.embed python -m espnet2.bin.tts_train --init_param model.pth:::tts.enc.embed中文 TTS 常见问题与调优建议结合模板 FAQ 与 CSMSC 的中文特性以下问题值得特别注意模型在结尾生成无意义语音通常是停止符预测失败。可尝试推理时开启use_attention_constraintTrue仅 Tacotron2、训练时调大bce_pos_weight如 10.0或改用非自回归模型FastSpeech / FastSpeech2。模型在自己的数据集上训练不佳模板文档强调大多数问题源于数据清洗应检查注意力图TTS 中 loss 值参考意义有限、去除首尾静音可参考local/data.sh中的静音处理思路、拆分中间长静音、优先使用音素而非字符中文对应pypinyin_g2p_phone、尽量清洗文本缩写、数字等、在静音处插入停顿符号小数据集可考虑预训练模型适配或增大 reduction factor 帮助注意力学习。结合神经声码器出现金属噪声常见于未以噪声为输入的声码器MelGAN / HiFiGAN对声学特征失配鲁棒性差。可通过声码器 GTA 微调或 text2mel 与声码器联合训练缓解。Tacotron2 / Transformer 输出非确定解码器 prenet 始终使用 dropout属预期行为如需固定结果可使用--always_fix_seed选项。validate_data_dir.sh 报错全角空白字符在text中不被允许需替换为半角中文文本准备时需注意标点统一CSMSC 的 data.sh 已做了全角标点归一化可参考其sed处理链。小结egs2/csmsc/tts1是 ESPnet2 中最具代表性的中文单说话人 TTS recipe 之一数据侧包含完整的下载、中文文本清洗与三段式数据集划分文本前端采用pypinyin_g2p_phone音素化模型侧覆盖从 Tacotron2 到 VITS 的完整谱系并沉淀了三代可复现的预训练结果。无论你是想快速复现一个中文 TTS 基线还是探索 VITS 全频带端到端合成或是在此基础上迁移到自有中文数据都可以直接复用本 recipe 的 run.sh、local/data.sh 与conf/tuning/中的配置并结合 egs2/TEMPLATE/tts1/README.md 的完整流水线说明按需裁剪。赞分享人工智能语音音频深度学习NLP【免费下载链接】espnetEnd-to-End Speech Processing Toolkit项目地址https://gitcode.com/gh_mirrors/es/espnet点击查看免费下载相关推荐EF Core Native AOT 测试工程解析逐文件生成 AOT 发布工程并约定返回码 100 的验证机制EF Core Native AOT 测试工程解析逐文件生成 AOT 发布工程并约定返回码 100 的验证机制 EF Core 仓库中的 EFCore.Nat人工智能语音音频深度学习NLPTripoSR深度解析如何用单张图片在0.5秒内生成专业级3D模型TripoSR深度解析如何用单张图片在0.5秒内生成专业级3D模型 在3D内容创作领域传统建模流程往往需要数小时甚至数天的专业工作但TripoSR的出现人工智能语音音频深度学习NLP5 分钟跑通LocalAI 私有化部署全攻略5 分钟跑通LocalAI 私有化部署全攻略 公司合规不让把内部文档丢给外部 API 服务内网环境又没法测试模型或者你单纯不想按 token 付费——这就人工智能语音音频深度学习NLP上一篇为什么选择Remirror30扩展助你构建跨平台编辑器的完整解决方案下一篇如何用foobox-cn打造你的终极音乐播放器简单三步美化foobar2000创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
