十年匠心定制 · 商业建站与技术教学双线并行 咨询热线:400-886-1026 service@lmnt.cn
ARTICLE DETAIL

资讯详情

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

基于 fairseq S2T 的 CoVoST 2 语音翻译实战:数据准备、ASR/ST 训练与评估全流程

基于 fairseq S2T 的 CoVoST 2 语音翻译实战:数据准备、ASR/ST 训练与评估全流程 基于 fairseq S2T 的 CoVoST 2 语音翻译实战数据准备、ASR/ST 训练与评估全流程【免费下载链接】unilmLarge-scale Self-supervised Pre-training Across Tasks, Languages, and Modalities项目地址: https://gitcode.com/GitHub_Trending/un/unilm本指南以本仓库中 speech_to_text 示例 提供的 CoVoST 2 复现文档为核心系统讲解如何在 fairseq 的 S2TSpeech-to-Text框架下完成语音识别ASR与语音到文本翻译ST的完整流程。你将掌握从 Common Voice 原始语料到 manifest/特征/词表/配置的预处理、En ASR 编码器预训练、多语向 ST 微调、checkpoint 平均、WER/ BLEU 评测以及交互式解码的端到端方案并理解底层数据管线与 S2T Transformer 的实现原理。一、任务背景复现 CoVoST 2 论文实验该示例复现了CoVoST 2 and Massively Multilingual Speech-to-Text TranslationWang et al., 2020中的实验。CoVoST 2 是一个大规模多语种语音翻译语料库包含 21 个语向到英语XX-En以及 15 个语向从英语出发En-XX的语音翻译标注其数据建立在 Mozilla Common Voice 众包语音语料之上。在本仓库的 prep_covost_data.py 中CoVoST数据类对语向做了硬性约束见 prep_covost_data.py#L59-L104XX-EN 语向v2fr、de、es、ca、it、ru、zh-CN、pt、fa、et、mn、nl、tr、ar、sv-SE、lv、sl、ta、ja、id、cy共 21 个EN-XX 语向v2de、tr、fa、sv-SE、mn、zh-CN、cy、ca、sl、et、id、ar、ta、lv、ja共 15 个。ASR 与 ST 的训练与推理统一使用 fairseq 的speech_to_text任务与fairseq-train/fairseq-generate/fairseq-interactive三个统一接口这为后续扩展到 LibriSpeech ASR、MuST-C ST、Multilingual TEDx 等任务提供了同一套心智模型。二、S2T 数据形态TSV manifest ZIP 特征 YAML 配置在开始预处理前先理解 fairseq S2T 的数据组织方式详见 speech_to_text README每一切分split对应一个 TSV manifest 文件每个数据字段是一列核心字段为id、audio、n_frames、tgt_text、speaker见 prep_covost_data.py#L35语音特征可预计算log-mel filter bank对数梅尔滤波器组特征在训练期间固定预处理阶段一次性提取为 NumPy 文件并打包进未压缩 ZIPmanifest 中以zip路径:字节偏移:长度的形式引用大幅提升 I/O 性能data_utils.py#L101-L133YAML 配置文件描述数据侧配置目标文本的 tokenizer 类型与词典路径、特征变换CMVN、SpecAugment、温度采样等。需要注意README 的 Updates 一节指出数据预处理脚本提取 filterbank 特征时不做 CMVNCMVN 改为在训练时按配置在线应用详见第五节。三、数据准备Common Voice v4 prep_covost_data.py3.1 前置依赖S2T 数据处理与训练需要额外 Python 包pip install pandas torchaudio sentencepiece其中pandas用于 TSV 合并与 manifest 生成torchaudio用于音频读取与 fbank 特征提取备用方案 pyKaldisentencepiece用于训练子词模型。3.2 下载并摆放 Common Voice v4从 Common Voice 官方数据集页面下载并解压 v4 语料到${COVOST_ROOT}/${SOURCE_LANG_ID}目录下。目录内应包含validated.tsv、clips/等标准文件——CoVoST数据集类会校验${COVOST_ROOT}/${SRC_LANG}/validated.tsv必须存在prep_covost_data.py#L131-L132。3.3 运行预处理脚本# En ASR python examples/speech_to_text/prep_covost_data.py \ --data-root ${COVOST_ROOT} --vocab-type char --src-lang en # ST python examples/speech_to_text/prep_covost_data.py \ --data-root ${COVOST_ROOT} --vocab-type char \ --src-lang fr --tgt-lang en脚本参数与默认值对应 prep_covost_data.py#L257-L273 的 argparse 定义参数简写必填默认值说明--data-root-d是—数据根目录内部按root/src_lang存放各语向子目录--src-lang-s是—源语言音频语言如en、fr--tgt-lang-t否None目标语言文本翻译语言不传则视为 ASR 任务--vocab-type—是—词表类型可选bpe/unigram/char--vocab-size—否1000词表大小char类型时忽略关键行为说明自动下载 CoVoST 标注CoVoST类会按模板covost_v2.{src_lang}_{tgt_lang}.tsv.tar.gz自动下载 CoVoST 翻译标注并解压prep_covost_data.py#L51-L54、#L134-L140然后与 Common Voice 的validated.tsv在path字段上做内连接合并ASR 用 CoVoST 训练切分的扩展ASR 模式下脚本将target_language临时设为占位语言en源取de否则取en从而借用 CoVoST TSV 中的split列——ASR 训练切分是 Common Voice 训练切分的超集traintrain_covost这一hack在 prep_covost_data.py#L123-L127 有注释说明ASR 与 ST 的目标文本不同manifest 的tgt_text在 ASR 模式下写入源语言转写src_utt在 ST 模式下写入翻译文本tgt_uttprep_covost_data.py#L226。3.4 生成的产物运行完毕后产物全部落在${COVOST_ROOT}/${SOURCE_LANG_ID}下产物说明train_/dev_/test_{task}.tsv三个切分的 manifesttask为asr_en或st_fr_en等fbank80.zip80 维 log-mel filter bank 特征包提取完成后临时目录fbank80/会被清理见 prep_covost_data.py#L254spm_char_{task}.model/.txtSentencePiece 模型与 fairseq 词典char类型时无spm_前缀编号config_{task}.yaml数据配置文件如config_asr_en.yaml、config_st_fr_en.yaml3.5 底层实现特征、词表与配置生成三个关键子流程均在 data_utils.py 中实现fbank 特征提取extract_fbank_featuresdata_utils.py#L73-L98先转单声道并缩放为 16-bit 有符号整数以兼容 Kaldi默认 80 个 mel 分箱n_mel_bins80优先走 pyKaldi缺失时回退 torchaudio词表生成gen_vocabdata_utils.py#L32-L70用 SentencePiece 训练bpe/unigram/char模型character_coverage1.0固定unk/bos/eos/pad四个特殊符号 id再导出 fairseq 词典.txt配置生成gen_config_yamldata_utils.py#L136-L202写入词典文件名、input_channels1、input_feat_per_channel80、SentencePiece tokenizer 配置、特征变换列表——训练切分应用utterance_cmvnspecaugment其余切分仅应用utterance_cmvnCMVN 因此是在线计算而非预计算。CoVoST 脚本固定使用specaugment_policylbprep_covost_data.py#L247-L252。四、ASREn ASR 模型训练与评估ASR 是全部 ST 模型的编码器预训练来源因此文档先复现 En ASR。4.1 训练fairseq-train ${COVOST_ROOT}/en \ --config-yaml config_asr_en.yaml --train-subset train_asr_en --valid-subset dev_asr_en \ --save-dir ${ASR_SAVE_DIR} --num-workers 4 --max-tokens 50000 --max-update 60000 \ --task speech_to_text --criterion label_smoothed_cross_entropy --label-smoothing 0.1 \ --report-accuracy --arch s2t_transformer_s --dropout 0.15 --optimizer adam --lr 2e-3 \ --lr-scheduler inverse_sqrt --warmup-updates 10000 --clip-norm 10.0 --seed 1 --update-freq 8其中${ASR_SAVE_DIR}为 checkpoint 根目录。要点--task speech_to_text--arch s2t_transformer_s--config-yaml是 S2T 训练的三要素见 speech_to_text README#Model-Training--update-freq 8用单卡模拟 8 卡即每 8 个 micro-batch 累计一次梯度更新等效于 8 卡批量。若使用多卡应按实际卡数相应调整--max-tokens为每 batch 的 token 上限--max-update 60000为总更新步数上限优化器为 Adam学习率 2e-3配合inverse_sqrt调度器与 10000 步 warmup梯度裁剪 10.0使用标签平滑 0.1 的交叉熵损失并上报 token 准确率。--arch s2t_transformer_s由 s2t_transformer.py 注册register_model(s2t_transformer)其结构为Conv1d 子采样器 标准 Transformer 编码器/解码器子采样器是两层 stride2 的一维卷积 GLU 门控线性单元将输入的 80 维 fbank 序列按约 4 倍下采样并投影到编码器维度s2t_transformer.py#L32-L78显著降低注意力计算量。4.2 推理与评估CHECKPOINT_FILENAMEavg_last_10_checkpoint.pt python scripts/average_checkpoints.py \ --inputs ${ASR_SAVE_DIR} --num-epoch-checkpoints 10 \ --output ${ASR_SAVE_DIR}/${CHECKPOINT_FILENAME} fairseq-generate ${COVOST_ROOT}/en \ --config-yaml config_asr_en.yaml --gen-subset test_asr_en --task speech_to_text \ --path ${ASR_SAVE_DIR}/${CHECKPOINT_FILENAME} --max-tokens 50000 --beam 5 \ --scoring wer --wer-tokenizer 13a --wer-lowercase --wer-remove-punct先用 fairseq 自带的 scripts/average_checkpoints.py 平均最后 10 个 epoch 的 checkpoint得到单文件avg_last_10_checkpoint.pt在test_asr_en切分上做束搜索--beam 5解码并用WER评分--wer-tokenizer 13a采用 13a 规范化 tokenizer同时--wer-lowercase转小写、--wer-remove-punct去标点。4.3 ASR 结果--archParamsEnWERs2t_transformer_s31M25.6该 En ASR 模型权重约 31M 参数由 fairseq S2T 官方发布可用于后续 ST 训练的编码器初始化。五、ST多语向语音翻译训练与评估5.1 训练以 Fr-En 为例fairseq-train ${COVOST_ROOT}/fr \ --config-yaml config_st_fr_en.yaml --train-subset train_st_fr_en --valid-subset dev_st_fr_en \ --save-dir ${ST_SAVE_DIR} --num-workers 4 --max-update 30000 --max-tokens 40000 \ # --max-tokens 50000 for en-* --task speech_to_text --criterion label_smoothed_cross_entropy --label-smoothing 0.1 --report-accuracy \ --arch s2t_transformer_s --encoder-freezing-updates 1000 --optimizer adam --lr 2e-3 \ --lr-scheduler inverse_sqrt --warmup-updates 10000 --clip-norm 10.0 --seed 1 --update-freq 8 \ --load-pretrained-encoder-from ${ASR_SAVE_DIR}/${CHECKPOINT_FILENAME}与 ASR 相比ST 训练有三个关键差异编码器用 En ASR 预训练初始化--load-pretrained-encoder-from ASR checkpoint 路径将 ASR checkpoint 中的编码器权重载入 ST 模型以加快收敛并提升翻译性能。其实现位于 s2t_transformer.py#L243-L257build_encoder通过checkpoint_utils.load_pretrained_component_from_model只抽取并加载编码器组件路径不存在时会告警并跳过--encoder-freezing-updates 1000训练前 1000 步冻结编码器仅更新解码器与子采样器之后解除冻结联合微调参数定义见 s2t_transformer.py#L236-L241--max-update 30000--max-tokens 40000ST 总步数减半注意注释提示en-* 语向应改用--max-tokens 50000英语源语音句长分布不同。--update-freq 8同样用于以单卡模拟 8 卡多卡时需相应调整。若需复现 En-De、En-Ca 等方向将${COVOST_ROOT}/fr与对应 config/manifest 名替换为相应语对即可预处理阶段需为每个语向单独运行一次prep_covost_data.py。5.2 推理与评估CHECKPOINT_FILENAMEavg_last_10_checkpoint.pt python scripts/average_checkpoints.py \ --inputs ${ST_SAVE_DIR} --num-epoch-checkpoints 10 \ --output ${ST_SAVE_DIR}/${CHECKPOINT_FILENAME} fairseq-generate ${COVOST_ROOT}/fr \ --config-yaml config_st_fr_en.yaml --gen-subset test_st_fr_en --task speech_to_text \ --path ${ST_SAVE_DIR}/${CHECKPOINT_FILENAME} \ --max-tokens 50000 --beam 5 --scoring sacrebleu与 ASR 流程一致但评分器换成--scoring sacrebleu报告 BLEU 分数sacrebleu 为 ST 社区标准评测口径。5.3 ST 结果BLEU--archParamsFr-EnDe-EnEs-EnCa-EnEn-DeEn-CaEn-FaEn-Ets2t_transformer_s31M27.217.723.119.316.121.612.912.8上述 8 个语向的预训练模型权重均由 fairseq S2T 官方发布可与文档中列出的对应 checkpoint 一一对应。综合 ASR 与 ST 表格可见同一s2t_transformer_s31M 参数架构在编码器预训练初始化 编码器冻结策略下即可覆盖从识别到翻译的全部 9 个方向。六、交互式解码直接输入音频路径训练完成后无需准备解码脚本即可在交互式控制台内即时体验模型该能力于 2021-02-04 加入见 speech_to_text README#Updatesfairseq-interactive ${COVOST_ROOT}/fr --config-yaml config_st_fr_en.yaml \ --task speech_to_text --path ${SAVE_DIR}/${CHECKPOINT_FILENAME} \ --max-tokens 50000 --beam 5提示符出现后每行输入一个 WAV / FLAC / OGG 音频文件的路径控制台即输出对应的识别或翻译结果。该机制同样适用于 ASR 模型将数据根目录与 config 换成config_asr_en.yaml即可。七、从示例到扩展若想对比其他数据集与任务本仓库还提供 LibriSpeech ASR、MuST-C ST、Multilingual TEDx、SimulST 等示例它们的预处理脚本prep_librispeech_data.py、prep_mustc_data.py、prep_mtedx_data.py与数据工具函数完全共用多语种扩展时可在 xm_transformer.py 中看到带语言标签的 Transformer 变体同样支持--load-pretrained-encoder-from若希望复现其他论文如间接训练数据、自训练等方向可参考 speech_to_text README#Whats-Next 中列出的相关工作与迁移计划。八、常见问题与注意点${COVOST_ROOT}/en不存在预处理脚本要求先手动下载并解压 Common Voice v4 到对应语向目录且validated.tsv必须存在prep_covost_data.py#L194-L195 会直接抛NotADirectoryError--update-freq语义文档中的数值8针对单卡设定多卡训练时按卡数等比调整以保证等效全局 batch 一致en-* 语向的--max-tokensST 训练注释明确建议 en-* 使用 50000其余语向 40000直接照搬会导致显存或收敛差异CMVN 位置预处理阶段不计算 CMVN训练时由 config YAML 中的utterance_cmvn特征变换在线完成因此修改 CMVN 策略如切换global_cmvn只需调整配置文件无需重新提取特征data_utils.py#L182-L195词表类型选择CoVoST 示例采用char词表对应官方发布的预训练模型脚本同样支持bpe/unigram此时需同时指定合理的--vocab-size。至此你已经具备了从 Common Voice 原始音频出发独立完成 En ASR 预训练、多语向 ST 微调、WER/ BLEU 评测与交互式解码的完整能力并理解了 manifest/ZIP/config 三位一体的 fairseq S2T 数据管线及其 Transformer 模型结构。【免费下载链接】unilmLarge-scale Self-supervised Pre-training Across Tasks, Languages, and Modalities项目地址: https://gitcode.com/GitHub_Trending/un/unilm创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表