ASR 模型实战指南)
人工智能语音音频【免费下载链接】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点击查看免费下载TAL_CSASRTAL English Class Speech ASR是面向中英混合语音识别场景的公开教学语料集由 TAL好未来发布包含 200 说话人、总计约 587 小时的英语课堂真实录音。本指南以 PaddleSpeech 仓库中的 dataset/tal_cs/README.md 数据集说明为主体结合 dataset/tal_cs/tal_cs.py 数据处理脚本与 examples/tal_cs/asr1 完整训练示例系统讲解从数据集理解、Manifest 生成、特征与词表构建到 Conformer/TransformerU2 架构模型训练、Top-k 平均、多策略解码评测与单音频推理的完整闭环。读完本文你将能够独立基于 TAL_CSASR 数据复现 PaddleSpeech 的 u2 中英混合 ASR 训练流水线并理解其中每个环节的源码级实现细节。一、TAL_CSASR 数据集概览TAL_CSASR 是 TAL 发布的英语课堂音频数据集音频内容为英语教师授课录音其最显著的特点是中英混合语音教师讲解中会自然穿插中文属于典型的代码切换Code-Switching语音识别场景。根据 dataset/tal_cs/README.md 官方说明数据集关键规格如下项目规格总数据量587Htrain_set: 555.9Hdev_set: 8Htest_set: 23.6H文件体积63.36G采样率16000 Hz采样位深16 bit录音设备麦克风说话人数200每条音频仅含单说话人录音时间2019 年数据格式音频.wav文本.txt音频时长1–60 秒数据内容英语教师授课音频中英比例中文字符与英文单词之比约 13:1值得特别说明的是原文档中强调的两点句内与句间混合该数据集同时包含句内混合intra-sentence mixing一句话内部中英夹杂与句间混合inter-sentence mixing整句为中文、整句为英文交替出现两种样本这正是真实课堂场景的语言特点单说话人每条音频只包含一个说话人因此说话人信息可作为辅助特征在 Manifest 中以utt2spk字段记录也便于后续做说话人相关分析。说明数据集需要从 TAL 官方数据集页面下载对应代码中的TALCS_corpus目录仓库脚本并不内置下载逻辑下载后需手动解压到指定目录详见下文 Stage -1 的说明。二、目录结构与 Manifest 生成机制2.1 仓库中与 TAL_CSASR 相关的组成PaddleSpeech 仓库中与本数据集直接相关的文件分为两部分数据集工具dataset/tal_cs/tal_cs.py —— 负责把原始语料转换为训练所需的 Manifest 文件完整实验示例examples/tal_cs/asr1 —— 包含数据处理、训练、评测、推理的整套脚本与配置。其中asr1示例目录结构如下examples/tal_cs/asr1/ ├── path.sh # 环境变量MAIN_ROOT、BIN_DIR 等 ├── run.sh # 流水线总入口stage 0-51 ├── RESULTS.md # 已发布模型在测试集上的 MER 结果 ├── conf/ │ ├── conformer.yaml # 离线 Conformer 模型配置 │ ├── chunk_conformer.yaml# 流式chunkConformer 配置 │ └── tuning/ │ ├── decode.yaml # 解码策略配置 │ └── chunk_decode.yaml └── local/ ├── data.sh # 数据处理manifest/CMVN/vocab/SPM ├── train.sh # 模型训练 ├── test.sh # 测试集评测 └── test_wav.sh # 单音频文件推理2.2 Manifest 的生成tal_cs.py 源码解析dataset/tal_cs/tal_cs.py 是数据接入的核心脚本。其输入是解压后的语料目录结构约定为TALCS_corpus/ ├── train_set/ │ ├── wav/ # 音频文件.wav │ └── label.txt # 每行音频ID 转写文本 ├── dev_set/ │ └── ... └── test_set/ └── ...脚本通过命令行参数控制输入输出python dataset/tal_cs/tal_cs.py \ --target_dir 数据集目录 \ --manifest_prefix Manifest 输出前缀其中--target_dir指向包含train_set、dev_set、test_set三个子目录的根目录--manifest_prefix指定输出前缀。脚本内部逻辑见 tal_cs.py依次处理train_set、dev_set、test_set分别生成manifest.train.raw、manifest.dev.raw、manifest.test.raw遍历每个子集下wav目录逐行读取label.txt把每行按空白切分第一列为音频文件名不含扩展名其余列为转写文本使用soundfile读取音频duration len(audio_data) / samplerate计算时长秒以-连接音频 ID 的前两段作为说话人 IDutt2spk -.join(utt.split(-)[:2])。每条样本被序列化为一行 JSON字段如下字段含义utt音频 ID文件名去掉 .wavutt2spk说话人 ID由音频 ID 推导feat音频文件的绝对路径feat_shape音频时长秒形如[10.5]text转写文本统一转为小写同时脚本还会在 Manifest 同目录输出.meta统计文件tal_cs.py记录每个子集的utt数量、总时长小时、总字符数与字符速率方便核对数据规模test_set.meta ---------- test: 1234 utts 23.6 h ... char ... char/sec ... sec/utt文本统一lower()处理是因为中英混合场景下英文大小写对识别无意义可降低词表冗余。这一设计在 tal_cs.py 中体现。三、环境准备与 Stage -1 数据接入asr1示例通过run.sh组织整条流水线全部阶段定义如下源自 examples/tal_cs/asr1/README.mdStage功能-1检查语料是否存在并调用 tal_cs.py 生成 raw Manifest0计算训练集 CMVN均值/方差归一化、生成词表与 sentencepiece 模型1训练模型2对 top-k 模型参数做平均得到最终模型k1 即选最优单模型3在测试集上评测最终模型4使用最终模型对测试数据做 CTC 对齐当前脚本中未启用5对单个音频文件进行推理51导出 JIT 模型注释标记为 Not supported at now先初始化环境变量path.sh 定义了MAIN_ROOT、PYTHONPATH、BIN_DIR等source path.sh source ${MAIN_ROOT}/utils/parse_options.sh # 支持 --variable value 传参Stage -1 是数据接入的第一步见 local/data.sh脚本会检查${MAIN_ROOT}/dataset/tal_cs/TALCS_corpus目录是否存在若不存在则提示先下载并解压数据集原文档给出数据 md5 参考值4c879b3c9c05365fc9dee1fc68713afe随后执行python ${MAIN_ROOT}/dataset/tal_cs/tal_cs.py \ --target_dir ${MAIN_ROOT}/dataset/tal_cs/TALCS_corpus/ \ --manifest_prefix data/四、Stage 0特征统计、词表与子词模型构建Stage 0 在 local/data.sh 中由三个步骤构成对应的关键参数为feat_dim80、sample_rate16000、stride_ms20、window_ms30、bpemodebpe、nbpe11297。4.1 计算 CMVN 统计量调用 utils/compute_mean_std.py 在训练集 raw Manifest 上统计 fbank 特征的均值与方差python3 ${MAIN_ROOT}/utils/compute_mean_std.py \ --manifest_pathdata/manifest.train.raw \ --num_samples-1 \ --spectrum_typefbank \ --feat_dim80 \ --delta_deltafalse \ --sample_rate16000 \ --stride_ms20 \ --window_ms30 \ --use_dB_normalizationFalse \ --num_workers$(nproc) \ --output_pathdata/mean_std.json要点--num_samples-1表示使用全部样本统计输出data/mean_std.json供后续format_data.py做特征归一化训练时 CMVN 不再实时计算。4.2 构建词表与 sentencepiece 模型调用 utils/build_vocab.py以unit_typespm在训练集文本上训练 BPE 子词模型python3 ${MAIN_ROOT}/utils/build_vocab.py \ --unit_type spm \ --count_threshold0 \ --vocab_pathdata/lang_char/vocab.txt \ --manifest_pathsdata/manifest.train.raw \ --spm_modebpe \ --spm_vocab_size11297 \ --spm_model_prefixdata/lang_char/bpe_bpe_11297 \ --spm_character_coverage1产物data/lang_char/vocab.txt最终词表供模型vocab_filepath引用data/lang_char/bpe_bpe_11297.model与bpe_bpe_11297.vocabsentencepiece 模型及对应词表。之所以采用 11297 规模的 BPE 子词而非纯汉字词表正是因为 TAL_CSASR 中英混合文本同时包含汉字与英文单词子词模型能有效控制词表规模并覆盖中英两种语言的形态学变化。4.3 格式化 Manifest调用 utils/format_data.py 把 raw Manifest 转换为带 token id 的训练格式train/dev/test 并行处理python3 ${MAIN_ROOT}/utils/format_data.py \ --cmvn_path data/mean_std.json \ --unit_type spm \ --spm_model_prefix data/lang_char/bpe_bpe_11297 \ --vocab_pathdata/lang_char/vocab.txt \ --manifest_pathdata/manifest.${sub}.raw \ --output_pathdata/manifest.${sub}完成后data/目录结构与 asr1/README.md 中描述的一致data/ ├── dev_set.meta ├── lang_char/ │ ├── bpe_bpe_11297.model │ ├── bpe_bpe_11297.vocab │ └── vocab.txt ├── manifest.dev ├── manifest.dev.raw ├── manifest.test ├── manifest.test.raw ├── manifest.train ├── manifest.train.raw ├── mean_std.json ├── test_set.meta └── train_set.meta只执行数据处理时bash run.sh --stage 0 --stop_stage 0 # 或逐条手动执行 . ./path.sh bash ./local/data.sh五、模型配置解析conformer.yamlconf/conformer.yaml 是 U2 架构混合 CTC/注意力论文见 asr1 README 所引 u2的完整配置分为网络结构、数据、DataLoader、训练四部分。5.1 编码器Conformerencoder: conformer encoder_conf: output_size: 512 # attention 维度 attention_heads: 8 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 cnn_module_kernel: 15 use_cnn_module: True activation_type: swish pos_enc_layer_type: rel_pos selfattention_layer_type: rel_selfattn关键设计采用相对位置编码rel_pos/rel_selfattn使模型对音频时长泛化能力更强cnn_module_kernel: 15的卷积模块用于建模局部上下文normalize_before: True表示 Pre-Norm 结构训练更稳定。5.2 解码器与混合 CTC/Attentiondecoder: transformer decoder_conf: attention_heads: 8 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.0 model_conf: ctc_weight: 0.3 # CTC 损失权重0~1 lsm_weight: 0.1 # 标签平滑 length_normalized_loss: false init_type: kaiming_uniform # 注意需配合收敛性验证ctc_weight: 0.3意味着最终损失为0.3 * CTC 0.7 * Attention CE这是 U2 架构的核心——训练阶段联合优化 CTC 与注意力解码阶段则可切换多种策略见第七节。5.3 数据与 DataLoadertrain_manifest: data/manifest.train dev_manifest: data/manifest.dev test_manifest: data/manifest.test vocab_filepath: data/lang_char/vocab.txt spm_model_prefix: data/lang_char/bpe_bpe_11297 unit_type: spm preprocess_config: conf/preprocess.yaml feat_dim: 80 stride_ms: 20.0 window_ms: 30.0 sortagrad: 0 # -1: 全部 epoch 按长度排序0: 关闭其他: 指定 epoch 开启 batch_size: 5 maxlen_in: 512 # 输入长度超过该值则自动调小 batch maxlen_out: 150 # 输出长度超过该值则自动调小 batch batch_count: auto num_workers: 2 subsampling_factor: 1 num_encs: 180 维 fbank 特征、20ms 帧移、30ms 窗长与 Stage 0 数据处理参数保持一致。5.4 训练超参n_epoch: 100 accum_grad: 4 # 梯度累积步数 global_grad_clip: 5.0 optim: adam optim_conf: lr: 0.002 weight_decay: 1.0e-6 scheduler: warmuplr scheduler_conf: warmup_steps: 25000 lr_decay: 1.0 log_interval: 100 checkpoint: kbest_n: 50 # 按验证集指标保留 top-50 latest_n: 5 # 同时保留最近 5 个100 个 epoch、25000 步 warmup、学习率 0.002 配合accum_grad: 4等效 batch size 放大 4 倍是 RESULTS.md 中Epoch 100、3 张 V100-32G训练配置的复现基础。六、Stage 1-2模型训练与 Top-k 平均6.1 训练入口run.sh中 Stage 1 调用 local/train.shCUDA_VISIBLE_DEVICES${gpus} ./local/train.sh ${conf_path} ${ckpt} ${ips}train.sh的关键逻辑见 local/train.shngpu0时单进程 CPU 训练python3 -u ${BIN_DIR}/train.py --ngpu 0 ...多卡时使用python3 -m paddle.distributed.launch --gpus${CUDA_VISIBLE_DEVICES}拉起分布式训练可传--ips指定多机地址设置FLAGS_allocator_strategynaive_best_fit以避免显存耗尽时训练挂起支持--seed默认 0 不启用开启时同时置FLAGS_cudnn_deterministicTrue但注释提示 seed 可能影响收敛。实际执行# 训练多卡 bash run.sh --stage 1 --stop_stage 1 --gpus 0,1,2,3 # 或仅用 CPU 手动执行 . ./path.sh bash ./local/data.sh CUDA_VISIBLE_DEVICES ./local/train.sh conf/conformer.yaml conformer训练产物统一输出到exp/conformer/目录--output exp/${ckpt_name}checkpoint 前缀由配置文件名推导ckpt$(basename ${conf_path} | awk -F. {print $1})即conf/conformer.yaml→conformerconf/chunk_conformer.yaml→chunk_conformer。6.2 Top-k 模型平均每个 epoch 结束都会保存 checkpoint按kbest_n: 50/latest_n: 5策略Stage 2 用 utils/avg.sh 对验证集上最优的 k 个模型做参数平均avg.sh best exp/conformer/checkpoints 10其中avg_num10对应最终模型exp/conformer/checkpoints/avg_10。参数平均是 ESPnet 系工作流的标准技巧能有效平滑训练后期震荡、提升测试集泛化性能。七、Stage 3测试集评测与四种解码策略7.1 评测入口CUDA_VISIBLE_DEVICES0 ./local/test.sh ${conf_path} ${decode_conf_path} exp/conformer/checkpoints/avg_10local/test.sh 会依次用四种解码方式评测结果分别写入ckpt_prefix/type.rsl解码方式batch_size特点attention64chunk 模式为 1纯注意力自回归解码ctc_greedy_search64chunk 模式为 1CTC 贪心搜索速度最快ctc_prefix_beam_search1CTC 前缀束搜索attention_rescoring1CTC 束搜索 注意力重打分精度最高脚本通过配置文件名是否匹配chunk_*.yaml自动开启chunk_mode流式解码强制batch_size1。python3 -u ${BIN_DIR}/test.py \ --ngpu ${ngpu} \ --config ${config_path} \ --decode_cfg ${decode_config_path} \ --result_file ${output_dir}/${type}.rsl \ --checkpoint_path ${ckpt_prefix} \ --opts decode.decoding_method ${type} \ --opts decode.decode_batch_size ${batch_size}7.2 已发布模型的评测结果RESULTS.md 记录了离线与流式两个版本在 test_set 上的 MER混合错误率中英混合场景的评测指标结果Conformer离线conf/conformer.yaml训练 100 epoch3×V100-32Gtop-10 平均参数量 47.63M。解码方式MERattention0.102786ctc_greedy_search0.103538ctc_prefix_beam_search0.103317attention_rescoring0.084374Chunk Conformer流式conf/chunk_conformer.yaml同样 47.63M 参数。解码方式MERattention0.080488ctc_greedy_search0.093244ctc_prefix_beam_search0.093251attention_rescoring0.079193可以看出attention_rescoringCTC 束搜索 注意力重打分在两种架构下均取得最低 MER这也是 U2 架构推荐的默认解码策略而流式 chunk_conformer 在 attention_rescoring 下甚至优于离线版本0.079193 vs 0.084374说明流式推理在该任务上无损甚至更优。八、Stage 5单音频文件推理8.1 使用自训模型推理单音频推理由 local/test_wav.sh 承接run.sh 中对应 Stage 5CUDA_VISIBLE_DEVICES0 ./local/test_wav.sh \ conf/conformer.yaml \ conf/tuning/decode.yaml \ exp/conformer/checkpoints/avg_10 \ data/demo_01_03.wav前提条件待推理音频采样率必须为 16K与训练特征一致否则需先重采样。8.2 使用预训练模型也可以直接下载官方预训练模型模型清单见 docs/source/released_model.mdwget https://paddlespeech.cdn.bcebos.com/s2t/tal_cs/asr1/asr1_conformer_talcs_ckpt_1.4.0.model.tar.gz tar xzvf asr1_conformer_talcs_ckpt_1.4.0.model.tar.gz source path.sh # 若尚未处理数据并生成 Manifest先执行以下两步 bash local/data.sh --stage -1 --stop_stage -1 bash local/data.sh --stage 2 --stop_stage 2 CUDA_VISIBLE_DEVICES ./local/test.sh conf/conformer.yaml conf/tuning/decode.yaml exp/conformer/checkpoints/avg_10下载演示音频后即可推理wget -nc https://paddlespeech.cdn.bcebos.com/datasets/single_wav/zh/demo_01_03.wav -P data/ CUDA_VISIBLE_DEVICES ./local/test_wav.sh \ conf/conformer.yaml \ conf/tuning/decode.yaml \ exp/conformer/checkpoints/avg_10 \ data/demo_01_03.wav九、完整流水线速查把 run.sh 中的stage/stop_stage组合使用即可灵活控制执行范围# 端到端数据处理 → 训练 → 平均 → 评测 bash run.sh --stage 0 --stop_stage 3 # 只训练在已处理数据基础上 bash run.sh --stage 1 --stop_stage 1 --gpus 0,1,2,3 # 训练 平均 评测 bash run.sh --stage 1 --stop_stage 3 --avg_num 10常用局部变量均可通过--variable value覆盖ckpt除外变量默认值含义gpus0,1,2,3训练用 GPU 列表置空表示仅用 CPUstage/stop_stage0/50起始 / 结束阶段conf_pathconf/conformer.yaml模型配置路径decode_conf_pathconf/tuning/decode.yaml解码配置路径avg_num10Top-k 平均个数k1 表示选最优单模型audio_filedata/demo_01_03.wavStage 5 单文件推理路径ckpt由 conf_path 文件名推导checkpoint 前缀如conformer例如同时指定 GPU 与平均个数bash run.sh --gpus 0,1 --avg_num 10十、总结与适用场景TAL_CSASR 是 PaddleSpeech 仓库中面向中英混合代码切换语音识别的典型基准587 小时真实课堂录音、200 说话人、句内/句间混合样本配合仓库内完整的 u2Conformer/Transformer示例脚本形成了从数据接入tal_cs.py→ 特征/词表构建data.sh→ 训练train.sh→ 评测test.sh的端到端可复现闭环。从 RESULTS.md 可见离线与流式 Conformer 在该数据集上 MER 均低于 0.11attention_rescoring解码可进一步将离线模型 MER 压至约 0.084、流式模型至约 0.079。对于需要落地中英混合课堂、会议等场景的开发者可直接复用本示例的流水线与配置作为起点若需进一步优化可从词表规模nbpe、CTC 权重ctc_weight、warmup 步数以及流式 chunk 配置等方向入手并结合 docs/source/released_model.md 中的预训练模型做迁移学习。赞分享人工智能语音音频【免费下载链接】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点击查看免费下载相关推荐fairseq Speech Synthesis 实战基于 LJSpeech 数据集训练 Transformer 与 FastSpeech 2 语音合成模型fairseq Speech Synthesis 实战基于 LJSpeech 数据集训练 Transformer 与 FastSpeech 2 语音合成模型人工智能深度学习预训练NLP语音PaddleSpeech U2/U2-Kaldi 语音识别模型训练入口与训练流程深度解析PaddleSpeech U2/U2 Kaldi 语音识别模型训练入口与训练流程深度解析 导读 本文以 PaddleSpeech 中 paddlespeech.人工智能语音音频NLP媒体生成PaddleSpeech SpeechX 实战U2/U2/DeepSpeech2 模型的 C 流式 ASR 部署指南PaddleSpeech SpeechX 实战U2/U2/DeepSpeech2 模型的 C 流式 ASR 部署指南 SpeechX 是 Paddle人工智能语音音频NLP媒体生成创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考