ARTICLE DETAIL

资讯详情

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

SpeechBrain 实战:基于 LibriSpeech 的 Transformer / Whisper / SpeechLLM 语音识别食谱全解析

SpeechBrain 实战:基于 LibriSpeech 的 Transformer / Whisper / SpeechLLM 语音识别食谱全解析 SpeechBrain 实战基于 LibriSpeech 的 Transformer / Whisper / SpeechLLM 语音识别食谱全解析【免费下载链接】speechbrainA PyTorch-based Speech Toolkit项目地址: https://gitcode.com/GitHub_Trending/sp/speechbrain本指南围绕 SpeechBrain 仓库中的recipes/LibriSpeech/ASR/transformer食谱展开系统讲解如何在该仓库环境下完成三类主流 ASR 方案的训练与评测自研 Transformer 编码器-解码器模型含 CTC/Attention 联合解码与 Transformer 语言模型、基于 HuggingFace 的 Whisper 编码器-解码器微调支持 LoRA 参数高效微调以及以 WavLM 等 SSL 模型提取特征、以 LLaMA 等大语言模型为解码器的 SpeechLLM 方案。读完本文你将掌握每个脚本与超参数配置文件的作用、数据准备流程、关键训练/解码参数的含义以及如何仅用测试集复现 WER 结果。食谱总览一个目录三条技术路线该食谱目录包含完整的训练脚本、数据准备脚本与 15 个超参数 YAML 文件覆盖从经典序列到序列模型到多模态大模型的三代 ASR 实现recipes/LibriSpeech/ASR/transformer/ ├── train.py # Transformer ASR 训练/评测主脚本 ├── train_with_whisper.py # Whisper 编码器-解码器微调脚本 ├── train_speechllm.py # SpeechLLM 训练/评测脚本SSL 特征或端到端 ├── extract_ssl_feats.py # 离线抽取并缓存 SSL 语音特征 ├── train_bayesspeech.py # Bayes Speech贝叶斯 Transformer训练脚本 ├── librispeech_prepare.py # LibriSpeech 数据准备CSV 生成 ├── extra_requirements.txt # 额外依赖bayestorch 等 ├── hparams/ │ ├── transformer.yaml # 标准 Transformer ASR │ ├── conformer_large.yaml # 大规模 Conformer │ ├── conformer_small.yaml # 小规模 Conformer13.3M 参数 │ ├── branchformer_large.yaml # Branchformer 大规模配置 │ ├── hyperconformer_8M.yaml # HyperConformer 8M │ ├── hyperconformer_22M.yaml # HyperConformer 22M │ ├── hyperbranchformer_13M.yaml # HyperBranchformer 13M │ ├── hyperbranchformer_25M.yaml # HyperBranchformer 25M │ ├── bayesspeech.yaml # Bayes Speech 配置 │ ├── train_hf_whisper.yaml # Whisper 全量微调配置 │ ├── train_whisper_lora.yaml # Whisper LoRA 配置 │ ├── speechllm_e2e.yaml # SpeechLLM 端到端在线提取 SSL 特征 │ ├── speechllm_ssl_feats.yaml # SpeechLLM 基于缓存 SSL 特征 │ └── extract_ssl_feats.yaml # SSL 特征离线抽取配置 └── README.md三条路线的启动方式如下LibriSpeech 数据需自行从 http://www.openslr.org/12 下载# 路线一自研 Transformer ASR python train.py hparams/transformer.yaml # 路线二Whisper 微调 python train_with_whisper.py hparams/train_hf_whisper.yaml # 路线三SpeechLLM先离线抽取 SSL 特征再训练 python extract_ssl_feats.py hparams/extract_ssl_feats.yaml \ --data_folder path/to/LibriSpeech \ --output_folder path/to/feats_cache \ --ssl_hub path/to/wavlm-large \ --feats_cache_dir path/to/feats_cache python train_speechllm.py hparams/speechllm_ssl_feats.yaml \ --feats_cache_dir path/to/feats_cache如果只想在测试集上评测而不重新训练可以追加--test_only标志例如python train_with_whisper.py hparams/train_hf_whisper.yaml --test_only python train.py hparams/transformer.yaml --test_only注意当使用 HuggingFace 预训练模型Whisper、WavLM、LLaMA时必须确保环境中已安装transformers。Whisper 微调所需的额外依赖请参考该目录下的 extra-requirements.txt目前包含 Bayes ASR 食谱所需的bayestorch0.0.3。数据准备从原始音频到 CSV 元数据所有脚本在启动时都会调用同一份数据准备逻辑。以 train.py 为例训练流程首先通过prepare_librispeech定义于 librispeech_prepare.py将 LibriSpeech 的原始目录结构转换为 SpeechBrain 标准的 CSV 元数据文件并通过run_on_main保证多卡DDP环境下只在主进程执行一次。各 YAML 中与数据相关的配置项如下以 transformer.yaml 为例data_folder: !PLACEHOLDER # 例如 /path/to/LibriSpeech需要自行替换 train_splits: [train-clean-100, train-clean-360, train-other-500] # 960 小时全集 dev_splits: [dev-clean] test_splits: [test-clean, test-other] skip_prep: False # 若已生成 CSV 可设为 True 跳过准备 train_csv: !ref output_folder/train.csv valid_csv: !ref output_folder/dev-clean.csv test_csv: - !ref output_folder/test-clean.csv - !ref output_folder/test-other.csv值得说明的是SpeechLLM 与 Whisper 配置的test_splits不同speechllm_e2e.yaml额外包含dev-other而train_hf_whisper.yaml将dev-clean也纳入test_csv见 train_hf_whisper.yaml评测范围更广。Whisper LoRA 配置默认只使用train-clean-100见 train_whisper_lora.yaml适合在单卡小显存环境下快速验证流程。路线一自研 Transformer ASRCTC Attention Transformer LM模型架构与训练目标transformer.yaml 定义了完整的端到端 ASR 系统卷积前端 Transformer 编码器-解码器解码阶段使用 CTC/Attention 联合 beam search并叠加 Transformer 语言模型重打分。从源码注释train.py可以看到输入为 16kHz 波形经 Fbank80 维 mel 滤波器组n_fft: 400与全局InputNormalizationnorm_type: global前 4 个 epoch 更新统计量提取特征卷积前端ConvolutionFrontEnd3 个 block每层 64 通道stride (2,2,1)将特征降采样主模型为TransformerASRd_model: 512、nhead: 4、12 层编码器、6 层解码器、d_ffn: 2048、GELU 激活、normalize_before: True识别单元为 5000 个 BPE 子词output_neurons: 5000unigram 分词器SentencePiece训练目标为 CTC 损失ctc_weight: 0.3与带 label smoothing 的 KL 散度损失seq_cost的加权和对应源码 compute_objectives 中的loss ctc_weight * loss_ctc (1 - ctc_weight) * loss_seq。关键训练参数Transformer 对全局 batch size 比较敏感。YAML 中的注释明确指出全局 batch size batch_size × n_gpus × grad_accumulation_factor经验值应 ≥ 128。默认配置batch_size: 32、grad_accumulation_factor: 1适用于单张 40GB 显存 GPU配合动态批处理dynamic_batching: True将训练序列按长度装桶max_batch_length_train: 600、num_bucket: 200、max_batch_ex: 128以提升吞吐。其他关键参数参数默认值说明number_of_epochs100总训练轮数avg_checkpoints10评测时平均的 checkpoint 数量lr_adam0.001Adam 初始学习率beta(0.9,0.98)noam_annealing.n_warmup_steps25000Noam 学习率调度 warmup 步数max_grad_norm5.0梯度裁剪阈值precisionfp32支持 bf16 / fp16 / fp32ckpt_interval_minutes30每 N 分钟保存一次 checkpointsortingrandom支持 random / ascending / descendingpad_index / bos_index / eos_index0 / 1 / 2特殊 token 索引训练数据还应用了三类特征域增强transformer.yamlSpectrogramDrop时间丢弃与频率丢弃与Warping时间扭曲统一由Augmenter调度每样本固定 3 个增强概率 1.0另有速度扰动SpeedPerturb95/100/105%在数据管线中多线程完成。解码与评测beam search Transformer LM解码器定义在 transformer.yaml由S2STransformerBeamSearcher与两个ScorerBuilder组合而成验证阶段valid_search使用 beam size 10仅叠加 CTC scorer权重ctc_weight_decode: 0.40并在每valid_search_interval: 10个 epoch 执行一次以兼顾效率测试阶段test_search使用 beam size 66同时叠加 CTC scorer 与TransformerLMScorer语言模型权重lm_weight: 0.60温度 1.15配合length_normalization: True语言模型为预训练的TransformerLMd_model 768、12 层、d_ffn 3072通过Pretrainer从 HuggingFace 仓库speechbrain/asr-transformer-transformerlm-librispeech自动下载lm.ckpt与tokenizer.ckpttransformer.yaml。也可将pretrained_lm_tokenizer_path改为本地路径以使用自训 LM 与分词器。评测指标在 train.py 中定义验证/测试阶段计算词错误率ErrorRateStats与一步预测准确率AccuracyStats。最终模型为最后avg_checkpoints个 epoch checkpoint 的平均on_evaluate_start 中通过average_checkpoints实现并strictTrue加载。WER 结果写入output_wer_folder下的wer_split.txt文件见 train.py。路线二Whisper 编码器-解码器微调含 LoRA冻结编码器、微调解码器train_with_whisper.py 使用 HuggingFace 上的 Whisper 模型在 LibriSpeech 上以负对数似然NLL损失进行微调。默认策略是冻结编码器、微调解码器freeze_encoder: True。其前向流程与自研 Transformer 有明显差异train_with_whisper.py将 token 序列按相对长度换算为绝对长度构造 padding mask并把 padding 位置替换为tokenizer.pad_token_id以满足 Whisper 解码器对输入的特殊要求一次前向得到enc_out, logits取 log-softmax 得到概率验证阶段使用S2SWhisperGreedySearcher贪心搜索测试阶段使用S2SWhisperBeamSearcherbeam size 8。文本管线dataio_prepare使用 Whisper 自带 tokenizer 编码并构造tokens_bos/tokens_eos序列。normalized_transcripts: True时训练与 WER 计算都会应用与 Whisper 论文一致的文本归一化。评测阶段同时输出 WER 与 CERcer_computer使用split_tokens: True按字符计算。train_hf_whisper.yaml的微调配置要点参数默认值说明whisper_hubopenai/whisper-medium.en可换为任意 HF Whisper 仓库freeze_encoderTrue冻结编码器number_of_epochs1论文结果显示 1 epoch 已足够lr_whisper1e-5AdamW 学习率weight_decay 0.01warmup_steps500Noam 调度 warmupbatch_size16适配单张 32GB GPUprecision / eval_precisionfp16混合精度训练与评测test_beam_size8测试 beam 宽度sampling_rate16000音频采样率YAML 中还保留了注释掉的时域增强速度扰动、频率丢弃、时间丢弃按需取消注释即可开启wav_augment。用 LoRA 做参数高效微调train_whisper_lora.yaml在 Whisper 之上套用了 SpeechBrain 的AdaptedModelLoRA适配器train_whisper_lora.yaml对预训练 Whisper 的全部线性层all_linear: True注入 rank 16 的 LoRA仅训练这部分参数。由于可训练参数大幅减少该配置默认batch_size: 2、grad_accumulation_factor: 8可运行于单张 1080Ti 12GB 级别的 GPU 上README 中记录的 small.en LoRA 结果即用 1×1080Ti 训练。LoRA 适配器类位于 speechbrain/nnet/adapters.py。路线三SpeechLLM——SSL 特征 大语言模型解码器两种模式SSL 特征与端到端特征SpeechLLM 方案支持两种模式README 说明详见 train_speechllm.pySpeechLLM with SSL features语音特征由预训练 SSL 模型如 WavLM Large离线抽取并缓存为 HDF5 文件训练时 LLM 直接消费冻结的 SSL 表示。优点是训练更快、更省资源代价是无法再调整 SSL 模型本身SpeechLLM with E2E features训练时在线用 SSL 模型从波形提取特征经线性投影映射到 LLM embedding 空间整个系统联合训练。更灵活但开销更大。两个模式分别对应speechllm_ssl_feats.yaml与speechllm_e2e.yaml由use_feats标志切换。源码 dataio_prepare 中明确use_featsTrue时必须提供feats_cache_dirextract_ssl_feats.py的输出目录否则modules中必须有ssl编码器用于在线提取。多模态序列构造与注意力掩码SpeechLLM 的输入序列结构如下源码 docstring 与 get_multimodal_attention_mask|start_of_audio| 音频特征 |end_of_audio| prompt bos text eos其中|start_of_audio|与|end_of_audio|是通过additional_special_tokens注入词表的特殊 tokenprompt 默认是Transcribe speech to text.speechllm_e2e.yaml。前向时compute_forward依次完成SSL 特征提取或读取缓存→ConcatDownsampler降采样downsampling_factor: 5即把相邻 5 帧拼接以缩短序列→VanillaNN线性投影到llm_emb_size: 2048→ 与文本 embedding 拼接成多模态序列 → 以自定义注意力掩码送入 LLM。损失计算只在文本 token 上进行音频位置用ignore_index: -100屏蔽compute_objectives。SSL 特征离线抽取extract_ssl_feats.py利用speechbrain.integrations.hdf5.cached_item.CachedHDF5DynamicItem在 dataloader 管线内逐条前向 SSL 模型WavLM 等以 gzip 压缩把特征写入 HDF5 缓存并在脚本末尾对每个数据集iterate_once预热缓存extract_ssl_feats.py。由于抽取在管线内完成脚本要求 hparams 元素直接置于目标设备、默认 batch size 为 1并支持torch.amp.autocast默认torch.bfloat16。对应配置 extract_ssl_feats.yaml 只需指定data_folder、ssl_hub、feats_cache_dir与device。SpeechLLM 训练要点speechllm_e2e.yaml中值得关注的设置LLM 为冻结的 LLaMAfreeze: True外套 LoRAlora_rank: 16、all_linear: TrueSSL 编码器默认冻结ssl_frozen: True若解冻 SSLinit_optimizers 会创建独立的ssl_optimizer并配合NewBobSchedulerimprovement_threshold: 0.0025、annealing_factor: 0.8进行学习率退火主模型学习率从initial_lr: 0.0005线性退火到final_lr: 0.00001grad_accumulation_factor: 5、max_grad_norm: 1.0精度为 bf16解码使用S2SHuggingFaceLLMGreedySearchertemperature 0.0评测输出 CER 与 WER 并存至output_wer_folder。效果一览README 中的官方基准Transformer 系列WER 越低越好Releasehyperparams fileDev Clean WER无 LM / 小 beamTest Clean WERTransformer LMTest Other WERTransformer LMGPUs30-09-24conformer_large.yaml新 RoPE 版本1.85 with LM1.964.504×A40 46GB23-05-23branchformer_large.yaml2.721.9 with LM2.044.134×A100 80GB10-02-25conformer_large.yaml1.85 with LM1.974.504×A100 80GB23-05-23conformer_large.yaml2.621.9 with LM2.014.524×A100 80GB24-03-22transformer.yaml3.322.275.534×V100 32GB24-03-22conformer_small.yaml4.052.496.1仅 13.3M 参数1×V100 32GB27-03-23hyperconformer_8M.yaml4.692.556.61仅 7.9M 参数1×P40 24GB27-03-23hyperconformer_22M.yaml3.192.235.54仅 21.7M 参数1×P40 24GB03-09-23hyperbranchformer_13M.yamlNA2.546.581×P40 24GB03-09-23hyperbranchformer_25M.yamlNA2.365.891×P40 24GB05-01-24bayesspeech.yaml4.282.846.271×V100 32GB上表可见大规模 Conformer 配合 Transformer LM 可将 Test Clean WER 压到约 2.0而仅 7.9M/13.3M 参数的 HyperConformer/Conformer-small 也能在单卡上取得 2.5–2.6 的 Test Clean WER适合对显存与算力敏感的场景。模型权重分别托管于 HuggingFace 与 Dropbox可在对应 YAML 的pretrainer段按需加载。SpeechLLMSSL 特征 LLMReleaseModelhyperparams fileDev Clean WERDev Other WERTest Clean WERTest Other WERGPUs29-01-26WavLM Large LLaMA 3.2 1B LoRAspeechllm_e2e.yaml2.795.032.725.341×A100 80GB该结果印证了SSL 特征 LoRA 化 LLM 解码器路线的可行性仅用单张 A100 80GB 即达到与传统 Transformer 相当的量级同时保持了对 SSL 模型与提示词prompt的灵活性。Whisper 微调README 记录了 1 epoch、冻结编码器 微调解码器的结果ReleaseModelhyperparams fileDev Clean WERTest Clean WERTest Other WERGPUs2024-03-28large-v3train_hf_whisper.yaml2.00%1.96%4.30%2×V100S 32GB2024-03-28medium.entrain_hf_whisper.yaml2.35%2.40%5.59%2×V100S 32GB2024-07-20small.entrain_whisper_lora.yaml2.81%2.90%6.57%1×1080Ti 12GB注意train_hf_whisper.yaml默认使用openai/whisper-medium.en若需复现 large-v3 结果应将whisper_hub替换为openai/whisper-large-v3small.en LoRA 一行则说明在极低显存环境下通过参数高效微调仍可获得具有实用价值的 WER。进阶探索与注意事项多卡训练所有脚本在入口处调用sb.utils.distributed.ddp_init_group(run_opts)可通过--device与 DDP 相关 run_opts 扩展至多卡。注意 YAML 注释的约定data_parallel 下 batch_size 被均分DDP 下 batch_size 被乘以卡数超参数覆盖所有入口脚本均通过sb.parse_arguments(sys.argv[1:])解析命令行可使用--hparams_file 覆盖键 值的方式在命令行临时覆盖 YAML 中的任意参数例如--data_folder /path、--whisper_hub openai/whisper-large-v3Checkpoint 策略自研 Transformer 在评测时默认平均最近 10 个 checkpointavg_checkpoints: 10Whisper 与 SpeechLLM 则按min_keys: [WER]保留验证集 WER 最优的 checkpoint依赖提醒使用 HuggingFace 预训练模型前务必安装transformers如需复现 Bayes ASR 还需安装bayestorch0.0.3见 extra-requirements.txt数据复用skip_prep: True可在多次实验间跳过 CSV 生成各 YAML 中output_folder默认带seed后缀便于并行对比不同随机种子的实验。总结recipes/LibriSpeech/ASR/transformer是 SpeechBrain 中覆盖最全面的 ASR 食谱之一从基于 BPE 与 CTC/Attention 联合解码的经典 Transformer到冻结编码器微调解码器的 Whisper再到 SSL 特征 LoRA 化 LLM 的 SpeechLLM完整展示了同一数据与评测体系下三代 ASR 架构的落地方式。读者既可以按 README 中的命令直接复现官方 WER 基准也可以修改hparams/下的 YAML 参数模型规模、beam size、LM 权重、LoRA rank、训练数据规模等快速开展自己的实验。【免费下载链接】speechbrainA PyTorch-based Speech Toolkit项目地址: https://gitcode.com/GitHub_Trending/sp/speechbrain创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表