ARTICLE DETAIL

资讯详情

深耕网站视觉设计与运营推广的一线实战洞察。

PaddleSpeech 英中语音翻译实战:基于 TED_En_Zh 的 Transformer 端到端语音翻译(ST)模型训练与评估指南

PaddleSpeech 英中语音翻译实战:基于 TED_En_Zh 的 Transformer 端到端语音翻译(ST)模型训练与评估指南 人工智能语音音频【免费下载链接】PaddleSpeechEasy-to-use Speech Toolkit including Self-Supervised Learning model, SOTA/Streaming ASR with punctuation, Streaming TTS with text frontend, Speaker Verification System, End-to-End Speech Translation and Keyword Spotting. Won NAACL2022 Best Demo Award.项目地址https://gitcode.com/gh_mirrors/pa/PaddleSpeech点击查看免费下载语音翻译Speech Translation, ST是同时处理语音识别 机器翻译的端到端任务输入一段英文语音直接输出中文译文无需中间的英文转写文本。本指南以 PaddleSpeech 仓库中examples/ted_en_zh/st0示例为核心完整讲解如何在 TED_En_ZhTED 英中双语数据集上通过run.sh分阶段完成 Transformer 语音翻译模型的数据预处理、多任务训练、Top-k 模型平均与 Char-BLEU 评测并深入解读配套配置文件与底层实现U2ST 模型帮助你掌握一套可复现、可迁移的端到端语音翻译训练方案。st0示例覆盖了从原始音频/文本到最终评估结果的完整流水线Stage 0 数据预处理manifest 生成、CMVN 统计、BPE 词表构建、token 格式化、Stage 1 模型训练支持多卡分布式、Stage 2 最优 Top-k 模型参数平均、Stage 3 模型测试Char-BLEU 指标。下文将结合 run.sh、data.sh、train.sh、test.sh 以及 transformer_mtl_noam.yaml 等仓库文件逐一展开。一、示例总览run.sh的四阶段流水线st0示例的所有操作都封装在examples/ted_en_zh/st0/run.sh中。它遵循 PaddleSpeech 示例统一的阶段化执行约定每个 Stage 负责一个独立环节通过stage与stop_stage两个变量控制执行区间既可一键全流程运行也可只跑其中某几步。Stage功能核心脚本0数据处理计算训练集 CMVN、生成词表、构建训练/开发/测试集的 manifest 文件local/data.sh1训练模型local/train.sh2平均 Top-k 个最优模型得到最终模型k1 表示直接选最优模型utils/avg.sh3测试最终模型性能local/test.sh例如只想执行 Stage 2 和 Stage 3bash run.sh --stage 2 --stop_stage 3当stage与stop_stage相等时则只运行单个阶段。例如只做数据预处理bash run.sh --stage 0 --stop_stage 0run.sh中阶段判断的骨架代码如下run.shif [ ${stage} -le 0 ] [ ${stop_stage} -ge 0 ]; then # prepare data bash ./local/data.sh --data_dir ${data_path} || exit -1 fi if [ ${stage} -le 1 ] [ ${stop_stage} -ge 1 ]; then # train model, all ckpt under exp dir CUDA_VISIBLE_DEVICES${gpus} ./local/train.sh ${conf_path} ${ckpt} ${ips} fi if [ ${stage} -le 2 ] [ ${stop_stage} -ge 2 ]; then # avg n best model avg.sh best exp/${ckpt}/checkpoints ${avg_num} fi if [ ${stage} -le 3 ] [ ${stop_stage} -ge 3 ]; then # test ckpt avg_n CUDA_VISIBLE_DEVICES0 ./local/test.sh ${conf_path} ${decode_conf_path} exp/${ckpt}/checkpoints/${avg_ckpt} || exit -1 fi注意run.sh末尾还预留了stage 51导出 JIT 推理模型的逻辑本文只覆盖 README 主流程的 Stage 03。二、环境准备path.sh与parse_options.sh示例运行前必须先加载环境变量脚本examples/ted_en_zh/st0/path.shREADME 中写作source path.h实际文件名是path.shsource path.sh该脚本path.sh主要完成以下设置将仓库根目录MAIN_ROOT即examples/ted_en_zh/st0/../../../解析出的路径及utils目录加入PATH将MAIN_ROOT加入PYTHONPATH保证 Python 能直接导入paddlespeech包设置LC_ALLC与PYTHONIOENCODINGUTF-8规避终端编码导致的 UnicodeDecodeError将模型运行目录BIN_DIR指向paddlespeech/s2t/exps/u2_st/bin语音翻译模型为 U2ST即 U2 结构与 ST 任务的结合。还需要加载另一个脚本它负责把--variable value这种命令行传参方式接入所有 bash 脚本source ${MAIN_ROOT}/utils/parse_options.sh之后所有脚本包括run.sh、data.sh、train.sh都能通过--gpus 0,1 --avg_num 5这种形式接收参数。局部变量说明run.sh顶部定义了本示例的局部变量变量含义默认值gpus使用的 GPU 编号设为空gpus表示仅用 CPU0,1,2,3stage/stop_stage实验执行的起始 / 结束阶段0/50conf_path模型配置文件路径conf/transformer_mtl_noam.yamldecode_conf_path解码配置文件路径conf/tuning/decode.yamldata_path数据集所在路径下载解压后的目录./TED_EnZhavg_num参与平均的 Top-k 模型个数5ckpt模型 checkpoint 前缀名由conf_path文件名自动推导如transformer_mtl_noam自动除ckpt由配置文件名自动推导外其余变量均可通过命令行覆盖。例如指定 GPU 与平均个数bash run.sh --gpus 0,1 --avg_num 5三、Stage 0数据预处理manifest / CMVN / BPE 词表Stage 0 负责把原始 TED_En_Zh 语料加工成可训练的数据形态。README 中该阶段的代码为if [ ${stage} -le 0 ] [ ${stop_stage} -ge 0 ]; then bash ./local/data.sh || exit -1 fi对应脚本为 local/data.sh。它内部又拆成 4 个子阶段-1、0、1、2全部完成后即产出data/manifest.{train,dev,test}。3.1 数据集下载与目录结构TED_En_Zh 数据集需要自行下载PaddleSpeech 不内置数据。README 给出的下载方式为百度网盘解压后目录需符合以下结构data.sh的 Stage -1 会先做存在性检查缺失则报错退出. |-- En-Zh # 双语文本train.en-zh / tst2010.en-zh / tst2015.en-zh |-- test-segment | |-- tst2010 # 开发集音频 | |-- tst2015 # 测试集音频 |-- train-split | |-- train-segment # 训练集音频 |-- README.md通过--data_dir传入解压路径run.sh默认是./TED_EnZhbash run.sh --stage 0 --stop_stage 0 # 等价于 source path.sh bash ./local/data.sh3.2 生成原始 manifestStage -1data.sh调用仓库工具 dataset/ted_en_zh/ted_en_zh.py 将数据集转成 manifest每行一个 JSON 的元数据文件python3 ${TARGET_DIR}/ted_en_zh/ted_en_zh.py \ --manifest_prefixdata/manifest \ --src-dir${data_dir}从源码可见其数据划分约定ted_en_zh.pytraintrain-split/train-segmentEn-Zh/train.en-zhdevtest-segment/tst2010En-Zh/tst2010.en-zhtesttest-segment/tst2015En-Zh/tst2015.en-zh。每条文本行以\t分隔audio_id、英文转写transcription、中文译文translation脚本会用soundfile读取音频计算真实时长过滤小于 30KB 的音频并把text字段写为[中文译文, 英文转写]的列表形式ted_en_zh.py——这正是后续多任务ST ASR联合训练的数据基础。输出为data/manifest.{train,dev,test}.raw。3.3 计算 CMVN 统计量Stage 0python3 ${MAIN_ROOT}/utils/compute_mean_std.py \ --manifest_pathdata/manifest.train.raw \ --num_samples-1 \ --spectrum_typefbank \ --feat_dim80 \ --delta_deltafalse \ --sample_rate16000 \ --stride_ms10 \ --window_ms25 \ --use_dB_normalizationFalse \ --num_workers${num_workers} \ --output_pathdata/mean_std.json该命令遍历训练集按 16kHz 采样率、80 维 fbank、10ms 帧移、25ms 窗长提取特征统计全局均值和方差输出data/mean_std.json供后续特征归一化CMVN使用。num_samples-1表示使用全部样本。3.4 构建 BPE 词表Stage 1TED_En_Zh 使用 SentencePiece 子词建模SPM默认 8000 个 unigram 单元python3 ${MAIN_ROOT}/utils/build_vocab.py \ --unit_type spm \ --spm_vocab_size8000 \ --spm_mode unigram \ --spm_model_prefix data/lang_char/bpe_unigram_8000 \ --spm_character_coverage 1. \ --vocab_pathdata/lang_char/vocab.txt \ --text_keys text \ --manifest_pathsdata/manifest.train.raw产物为data/lang_char/bpe_unigram_8000.modelSPM 模型data/lang_char/bpe_unigram_8000.vocabSPM 词表data/lang_char/vocab.txtPaddleSpeech 使用的词表文件。nbpe词表大小与bpemodeunigram/bpe均可通过--nbpe、--bpemode调整是控制词表规模与模型大小的关键超参数。3.5 格式化 manifestStage 2最后把原始 manifest 中的文本按词表转成 token id并附加 CMVN 信息for set in train dev test; do python3 ${MAIN_ROOT}/utils/format_data.py \ --cmvn_path data/mean_std.json \ --unit_type spm \ --spm_model_prefix data/lang_char/bpe_unigram_8000 \ --vocab_pathdata/lang_char/vocab.txt \ --manifest_pathdata/manifest.${set}.raw \ --output_pathdata/manifest.${set} done三个集合并行处理最终得到可直接送入 DataLoader 的data/manifest.train、data/manifest.dev、data/manifest.test。数据时长分布可参考 RESULTS.md训练集单条音频 0.94260 秒开发集 1.15139 秒测试集 1.142.746 秒。四、Stage 1模型训练数据处理完成后即可训练。README 中该阶段代码如下if [ ${stage} -le 1 ] [ ${stop_stage} -ge 1 ]; then # train model, all ckpt under exp dir CUDA_VISIBLE_DEVICES${gpus} ./local/train.sh ${conf_path} ${ckpt} fi执行 Stage 0 Stage 1bash run.sh --stage 0 --stop_stage 1也可以脱离run.sh手动执行以下为仅 CPU 版本source path.sh bash ./local/data.sh CUDA_VISIBLE_DEVICES ./local/train.sh conf/transformer_mtl_noam.yaml transformer_mtl_noam4.1train.sh做了什么local/train.sh 接收config_path、ckpt_name两个必选参数和可选的ips分布式训练节点 IP 列表核心逻辑train.sh根据CUDA_VISIBLE_DEVICES中的逗号数量推导ngpu单卡/CPUngpu 0时直接调用paddlespeech/s2t/exps/u2_st/bin/train.py多卡时通过python3 -m paddle.distributed.launch --gpus${CUDA_VISIBLE_DEVICES}拉起分布式训练可选--ips指定多机节点所有 checkpoint 输出到exp/${ckpt_name}/目录下seed0表示不固定随机种子避免破坏收敛当 seed 非 0 时会设置FLAGS_cudnn_deterministicTrue保证可复现。训练入口train.py对应的训练器是U2STTrainerpaddlespeech/s2t/exps/u2_st/model.py其底层模型为U2STModel从源码 import 语句可见其定义于paddlespeech/s2t/models/u2_st.py。U2ST 是U2Unified Streaming and Non-streaming 2结构与语音翻译任务的结合编码器Encoder 解码器Decoder构成注意力翻译主干同时引入 CTC 分支做多任务学习。4.2 多任务学习MTL机制U2STTrainer.train_batch的关键逻辑model.py在于当 batch 中的text是列表即 manifest 中的[中文译文, 英文转写]时会同时传入译文与转写两者模型一次前向返回 4 个损失loss, st_loss, attention_loss, ctc_loss self.model( audio, audio_len, text, text_len, text_transcript, text_transcript_len)也就是说conf/transformer_mtl_noam.yaml名字中的mtl即 Multi-Task Learning配置下模型同时优化ST 注意力损失翻译任务英语语音 → 中文译文ASR 注意力损失识别任务英语语音 → 英文转写作为辅助任务CTC 损失作用于编码器输出的对齐分支。这正是 README 结果表中TransformerASR MTL的含义。对应的损失权重在model_conf中配置model_conf: asr_weight: 0.5 # ASR转写辅助任务的权重 ctc_weight: 0.3 # CTC 损失权重 lsm_weight: 0.1 # 标签平滑label smoothing length_normalized_loss: false对照地conf/transformer.yaml 中asr_weight: 0.0、ctc_weight: 0.0表示纯 ST不做 ASR 辅助的配置用于消融对比。4.3 训练配置详解transformer_mtl_noam.yamlconf/transformer_mtl_noam.yaml 是 Stage 1 默认配置按模块逐段说明数据与 DataLoader 段配置项值说明train_manifest/dev_manifest/test_manifestdata/manifest.{train,dev,test}各数据集 manifest 路径min_input_len/max_input_len0.05/30.0过滤音频时长范围秒min_output_len/max_output_len0.0/400.0过滤输出 token 数范围min_output_input_ratio/max_output_input_ratio0.01/20.0输出/输入长度比过滤vocab_filepathdata/lang_char/vocab.txt词表文件unit_typespm子词单元类型spm_model_prefixdata/lang_char/bpe_unigram_8000SPM 模型前缀mean_std_filepathCMVN 均值方差文件与cmvn_file二选一preprocess_configconf/preprocess.yaml特征预处理管线配置batch_size16批大小maxlen_in/maxlen_out5/150输入/输出长度超过阈值时自动调小批大小raw_wavTrue使用原始波形而非 Kaldi 预提取特征spectrum_type/feat_dimfbank/80特征类型与维度dither1.0特征抖动dithering幅度target_sample_rate16000采样率stride_ms/window_ms10.0/25.0fbank 帧移 / 窗长use_dB_normalization/target_dBTrue/-20是否做分贝归一化及目标值sortagradTrue前若干 epoch 按时长排序加速收敛shuffle_methodbatch_shuffle批次级打乱num_workers2DataLoader 并行进程数网络结构段Transformer 编码器 Transformer 解码器encoder: transformer encoder_conf: output_size: 256 # 注意力维度 attention_heads: 4 # 注意力头数 linear_units: 2048 # 前馈网络隐藏单元数 num_blocks: 12 # 编码器层数 dropout_rate: 0.1 positional_dropout_rate: 0.1 attention_dropout_rate: 0.0 input_layer: conv2d # 输入下采样层conv2d / conv2d6 / conv2d8 normalize_before: true decoder: transformer decoder_conf: attention_heads: 4 linear_units: 2048 num_blocks: 6 # 解码器层数 dropout_rate: 0.1 positional_dropout_rate: 0.1 self_attention_dropout_rate: 0.0 src_attention_dropout_rate: 0.0input_layer: conv2d表示编码器输入先经过二维卷积做 4 倍下采样等价于 ESPnet 风格的 subsampling 模块normalize_before: true采用 Pre-Norm 结构Transformer 中更稳定的训练方式。README 提到本示例也可替换为 Conformer 编码器文中仅引用论文标题训练需自行调整配置。训练策略段n_epoch: 120 # 训练轮数 accum_grad: 2 # 梯度累积步数 global_grad_clip: 5.0 # 全局梯度裁剪 optim: adam optim_conf: lr: 2.5 # 峰值学习率配合 noam scheduler 使用 weight_decay: 1.0e-06 scheduler: noam # Noam 学习率调度 scheduler_conf: warmup_steps: 25000 # 预热步数 lr_decay: 1.0 log_interval: 50 # 每 50 步打印一次日志 checkpoint: kbest_n: 50 # 按验证集损失保留最优 50 个 checkpoint latest_n: 5 # 保留最近 5 个 checkpointNoam 调度器配合较大的峰值学习率lr: 2.5是 Transformer 类模型训练的标准做法先线性预热 25000 步再按步数倒数衰减。accum_grad: 2表示每 2 个 batch 累积一次梯度更新等效于放大批大小。特征预处理管线conf/preprocess.yamlpreprocess.yaml串联了 5 个处理步骤fbank_kaldi从 PCM 波形提取 Kaldi 风格 fbank16kHz、80 维 mel、帧移 160 点 ≈10ms、窗长 400 点 ≈25ms、dither 0.1cmvn_json加载data/mean_std.json做均值方差归一化time_warpSpecAugment 时间弯曲最大 5 帧PIL 模式freq_mask频带掩蔽F302 个掩蔽带time_mask时间掩蔽T402 个掩蔽带。后三步即 SpecAugment 数据增强能显著提升模型泛化能力。五、Stage 2Top-k 模型平均训练过程中每个 epoch 都会保存 checkpoint。PaddleSpeech 的做法不是直接取最后一个模型而是从验证集损失最优的 k 个模型中按参数平均出一个最终模型k1时即最优单模型。对应代码if [ ${stage} -le 2 ] [ ${stop_stage} -ge 2 ]; then # avg n best model avg.sh best exp/${ckpt}/checkpoints ${avg_num} fiavg.sh定义于仓库 utils/avg.sh由path.sh加入PATH支持两种模式avg.sh best exp/ckpt/checkpoints 5 # 按验证集损失选最优 5 个模型平均 avg.sh latest exp/ckpt/checkpoints 5 # 取最近 5 个 checkpoint 平均best模式调用avg_model.py --val_best按验证损失排序取优latest模式直接取最新 checkpoint。输出为exp/ckpt/checkpoints/avg_k.pdparams。模型平均是序列模型常用的免费涨点技巧能平滑训练后期的参数震荡。完成 Stage 02 的命令bash run.sh --stage 0 --stop_stage 2 # 等价手动执行仅 CPU source path.h bash ./local/data.sh CUDA_VISIBLE_DEVICES ./local/train.sh conf/transformer_mtl_noam.yaml transformer_mtl_noam avg.sh best exp/transformer_mtl_noam/checkpoints 5六、Stage 3模型测试Char-BLEU 评测Stage 3 用平均后的模型在测试集上做解码评估if [ ${stage} -le 3 ] [ ${stop_stage} -ge 3 ]; then # test ckpt avg_n CUDA_VISIBLE_DEVICES0 ./local/test.sh ${conf_path} exp/${ckpt}/checkpoints/${avg_ckpt} || exit -1 fi注意测试使用CUDA_VISIBLE_DEVICES0单卡且run.sh实际传给test.sh的是三个参数${conf_path}、${decode_conf_path}、${avg_ckpt}。local/test.sh 对fullsentence这一种解码方式进行评估脚本中for type in fullsentence循环python3 -u ${BIN_DIR}/test.py \ --ngpu ${ngpu} \ --config ${config_path} \ --decode_cfg ${decode_config_path} \ --result_file ${ckpt_prefix}.fullsentence.rsl \ --checkpoint_path ${ckpt_prefix} \ --opts decode.decoding_method fullsentence完整跑通训练 测试的命令仅 CPU 手动版source path.h bash ./local/data.sh CUDA_VISIBLE_DEVICES ./local/train.sh conf/transformer_mtl_noam.yaml transformer_mtl_noam avg.sh latest exp/transformer_mtl_noam/checkpoints 5 CUDA_VISIBLE_DEVICES ./local/test.sh conf/transformer_mtl_noam.yaml conf/tuning/decode.yaml exp/transformer_mtl_noam/checkpoints/avg_56.1 解码配置conf/tuning/decode.yamldecode.yaml 定义了评测方式batch_size: 1 error_rate_type: char-bleu # 评测指标字符级 BLEU decoding_method: fullsentence # fullsentence, simultaneous beam_size: 10 # 集束搜索宽度 word_reward: 0.7 # 每生成一个词追加的奖励 maxlenratio: 0.3 # 输出长度上限比例相对输入 decoding_chunk_size: -1 # 0: 解码用全 chunk0: 固定 chunk0: 训练专用禁止 num_decoding_left_chunks: -1 # 解码时左侧 chunk 数-1 表示非流式 simulate_streaming: False # 是否模拟流式推理error_rate_type: char-bleu表明语音翻译任务用Char-BLEU字符级 BLEU而非 WER 作为主指标适合中文译文的评测beam_size: 10与word_reward: 0.7是集束搜索的超参word_reward鼓励生成更长句子能缓解 BLEU 对短句的惩罚decoding_chunk_size: -1/simulate_streaming: False表示当前为非流式整句解码。若改为流式decoding_chunk_size 0则可评估边说边译的流式语音翻译效果这与示例目录中 st1 等更进阶配置呼应。七、实验结果与模型规模RESULTS.md 记录了本示例的基准结果数据为仓库已发布记录供参考模型参数量配置Char-BLEUTransformer ASR MTL50.26Mconf/transformer_joint_noam.yaml17.38需要说明该结果表中记录的配置名为transformer_joint_noam.yamlASR 联合训练asr_weight非 0 的多任务版本而当前st0/conf目录下实际提供的是transformer_mtl_noam.yamlMTL 权重asr_weight: 0.5、ctc_weight: 0.3与纯 ST 的transformer.yaml。训练时以run.sh默认的conf_pathconf/transformer_mtl_noam.yaml为准两者在ASR 辅助任务思想上一致具体超参可按需对照调整。八、从源码看实现U2ST 训练闭环为便于深入理解这里串起训练闭环涉及的核心仓库文件数据入口dataset/ted_en_zh/ted_en_zh.py 生成带[译文, 转写]双文本字段的 manifest是 MTL 训练的源头预处理工具utils/compute_mean_std.py、utils/build_vocab.py、utils/format_data.py 分别完成 CMVN、BPE 词表与 token 化 manifest训练器paddlespeech/s2t/exps/u2_st/model.py 的U2STTrainer处理(audio, audio_len, text, text_len)四元组并在多任务模式下扩展为双文本输入输出loss / st_loss / attention_loss / ctc_loss四个监控量梯度累积逻辑accum_grad与 Noam 学习率更新也在此处实现模型定义U2STModel位于paddlespeech/s2t/models/u2_st.py由 model.py 的 import 语句确认组合编码器、解码器与 CTC 分支参数平均utils/avg.sh 封装avg_model.py支持best/latest两种平均模式评估paddlespeech/s2t/exps/u2_st/bin/test.py结合decode.yaml完成集束搜索解码并输出 Char-BLEU。九、常见操作速查只跑数据预处理bash run.sh --stage 0 --stop_stage 0数据 训练 模型平均bash run.sh --stage 0 --stop_stage 2全流程预处理 → 训练 → 平均 → 测试bash run.sh --stage 0 --stop_stage 3指定 GPU 与平均个数bash run.sh --gpus 0,1 --avg_num 5仅 CPU 运行--gpus 或CUDA_VISIBLE_DEVICES留空。切换模型配置修改run.sh中的conf_path如换成纯 ST 的conf/transformer.yamlckpt会自动跟随文件名变化若想替换为 Conformer 编码器需按论文实现调整encoder配置。结语通过examples/ted_en_zh/st0示例可以看到 PaddleSpeech 将数据预处理 → 多任务训练 → 模型平均 → 指标评测封装成了高度可复用的分阶段流水线run.sh负责流程编排local/*.sh负责具体执行YAML 配置集中管理数据、结构、训练与解码策略。以 U2ST 模型Transformer 编码器 解码器 CTC 分支为骨架配合 ASR 多任务辅助与 SpecAugment 增强即可在 TED_En_Zh 上训练出 Char-BLEU 约 17.38 的端到端英中语音翻译模型。这套流程同样适用于更换数据集、更换编码器如 Conformer或切换流式/非流式解码是进入 PaddleSpeech 语音翻译方向的可靠起点。赞分享人工智能语音音频【免费下载链接】PaddleSpeechEasy-to-use Speech Toolkit including Self-Supervised Learning model, SOTA/Streaming ASR with punctuation, Streaming TTS with text frontend, Speaker Verification System, End-to-End Speech Translation and Keyword Spotting. Won NAACL2022 Best Demo Award.项目地址https://gitcode.com/gh_mirrors/pa/PaddleSpeech点击查看免费下载相关推荐PaddleSpeech 端到端语音翻译实战基于 TED_En_Zh 训练 Transformer/Conformer ST1 模型全流程指南PaddleSpeech 端到端语音翻译实战基于 TED_En_Zh 训练 Transformer/Conformer ST1 模型全流程指南 导读 本文以人工智能语音音频PaddleSpeech TED_En_Zh ST0 实战指南基于 Transformer/Conformer 的端到端语音翻译ASR MTL完整训练与评估流程PaddleSpeech TED_En_Zh ST0 实战指南基于 Transformer/Conformer 的端到端语音翻译ASR MTL完整训练与评人工智能语音音频NLP媒体生成PaddleSpeech TED En→Zh 端到端语音翻译实战Transformer/Conformer ST 模型从数据准备到训练、评测PaddleSpeech TED En→Zh 端到端语音翻译实战Transformer/Conformer ST 模型从数据准备到训练、评测 导读 本文围绕人工智能语音音频上一篇Rails代码质量检查神器rails_best_practices模型层最佳实践详解下一篇drupal-composer/drupal-project常见问题解答开发者必知的15个FAQ创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表