拓冰建站拓冰建站
首页 / 资讯中心 / 正文

SpeechBrain 模板(Templates)全解析:从零搭建语音增强、说话人识别与语音识别 Recipe

SpeechBrain 模板Templates全解析从零搭建语音增强、说话人识别与语音识别 Recipe【免费下载链接】speechbrainA PyTorch-based Speech Toolkit项目地址: https://gitcode.com/GitHub_Trending/sp/speechbrain导读SpeechBrain 的templates目录为开发者提供了一套开箱即用的 Recipe 起点模板覆盖语音研究中三类典型任务序列回归语音增强、序列分类说话人识别与序列到序列语音识别。本文以 templates/README.md 为主线深入拆解每个模板的文件构成、超参数配置、训练命令与自定义模型写法并对照仓库源码解释其底层机制帮助你快速复制、修改并搭建属于自己的 SpeechBrain Recipe。Templates 的设计理念从零开始的 Recipe 起点SpeechBrain 的每个 Recipe实验配方通常由训练脚本、超参数 YAML、数据准备脚本与自定义模型四部分组成。官方模板的目的就是把这四部分以最简单、文档最完善的形式组装成可直接运行的完整实验作为新任务的起点。按 templates/README.md 的说明模板覆盖的任务谱系如下任务类型代表模板目录典型应用序列回归Sequence Regressiontemplates/enhancement语音增强、去混响、带宽扩展序列到序列Sequence-to-Sequencetemplates/speech_recognition语音识别ASR、端到端识别序列分类Sequence Classificationtemplates/speaker_id说话人识别、语种识别、情感分类此外还有 templates/hyperparameter_optimization_speaker_id在 speaker_id 模板基础上集成了超参数搜索能力。每个模板都遵循同一套约定train.py训练主程序、train.yaml全部超参数、custom_model.py自定义 PyTorch 模块、mini_librispeech_prepare.py数据下载与 manifest 生成。你可以把整个模板目录复制出来作为开发新 Recipe 的脚手架。模板一语音增强Speech Enhancement——序列回归任务文件清单与职责templates/enhancement 目录下的四个核心文件各有明确分工train.py主代码文件用SEBrain(sb.Brain)定义完整的训练流程train.yaml超参数文件设定全部执行参数STFT、增强策略、优化器、检查点等custom_model.py一个极简的双向 LSTM 投影层的掩码网络mini_librispeech_prepare.py负责下载并生成数据 manifest。此外还有两个推理相关文件inference.yaml推理超参与enhance_file.py单文件增强脚本。一行命令开始训练python train.py train.yaml --data_folder /path/to/save/mini_librispeech该命令会自动完成三件事下载 Mini Librispeech 并生成train.json/valid.json/test.json三个 manifest从NOISE_DATASET_URL下载噪声数据并生成noise.csv用动态生成的噪声、混响RIR和 babble 干扰训练一个谱掩码增强模型。正如 templates/enhancement/train.py 所示训练入口会依次执行参数解析、DDP 初始化、加载 hyperpyyaml、创建实验目录、数据准备最后构建SEBrain并调用fit()/evaluate()。数据准备JSON manifest 与噪声下载train.yaml中与数据相关的核心配置如下data_folder: ./data train_annotation: train.json valid_annotation: valid.json test_annotation: test.json skip_prep: False data_folder_noise: !ref data_folder/noise NOISE_DATASET_URL: https://www.dropbox.com/scl/fi/a09pj97s5ifan81dqhi4n/noises.zip?rlkeyj8b0n9kdjdr32o1f06t0cw5b7dl1 noise_annotation: noise.csvtrain/valid/test_annotation指向数据准备脚本生成的 manifest 文件skip_prep: False表示首次运行时自动执行数据准备多进程场景下通过run_on_main保证只在一个进程上执行噪声集通过speechbrain.augment.preparation.prepare_dataset_from_URL自动下载解压并生成noise.csv用于后续AddNoise增强。特征与频谱掩码log1p 谱幅度train.yaml定义了与掩码计算完全一致的 STFT 参数sample_rate: 16000 win_length: 32 hop_length: 16 n_fft: 512 window_fn: !name:torch.hamming_window compute_STFT: !new:speechbrain.processing.features.STFT sample_rate: !ref sample_rate win_length: !ref win_length hop_length: !ref hop_length n_fft: !ref n_fft window_fn: !ref window_fn compute_ISTFT: !new:speechbrain.processing.features.ISTFT ... resynth: !name:speechbrain.processing.signal_processing.resynthesize stft: !ref compute_STFT istft: !ref compute_ISTFT在 templates/enhancement/train.py 的compute_feats中可以看到特征计算链波形 →STFT→spectral_magnitude(power0.5)即幅度的平方根→log1p。log1p的作用是弱化小幅值差异对损失的支配同时保留动态范围。模型输出的掩码与带噪谱相乘信号近似 SA 算法再用resynthesize将增强幅度与带噪相位合并回波形mask self.modules.model(noisy_feats) predict_spec torch.mul(mask, noisy_feats) predict_wav self.hparams.resynth(torch.expm1(predict_spec), noisy_wavs)动态增强AddNoise 与 Augmentertrain.yaml用speechbrain.augment.time_domain.AddNoise实现信噪比在snr_low0到snr_high15dB 之间的随机加噪再由Augmenter组合add_noise: !new:speechbrain.augment.time_domain.AddNoise csv_file: !ref noise_annotation snr_low: 0 snr_high: 15 noise_sample_rate: !ref sample_rate clean_sample_rate: !ref sample_rate num_workers: !ref num_workers wav_augment: !new:speechbrain.augment.augmenter.Augmenter parallel_augment: False concat_original: False repeat_augment: 1 min_augmentations: 1 max_augmentations: 1 augment_prob: 1.0 augmentations: [!ref add_noise]在compute_forward中增强作用于每个 batch 的干净波形self.hparams.wav_augment(clean_wavs, lens)返回带噪波形随后进入特征与掩码计算。损失与评估指标compute_objectives直接对掩码后的频谱与干净频谱做mse_losstemplates/enhancement/train.pyloss sb.nnet.losses.mse_loss(predictions[spec], clean_spec, self.lens)验证/测试阶段还会额外计算STOI语音可懂度指标on_stage_end中使用checkpointer.save_and_keep_only(metastats, max_keys[stoi])保存 STOI 最高的检查点并清理旧检查点。训练超参速查参数默认值说明seed4234随机种子需置于 YAML 顶部number_of_epochs20训练轮数batch_size8批大小learning_rate0.0001Adam 初始学习率num_workers4DataLoader 工作进程数n_fft512FFT 点数modelcustom_model.CustomModel掩码网络input_size n_fft // 2 1自定义模型CustomModeltemplates/enhancement/custom_model.py 给出了一个 46 行的极简掩码网络交替堆叠LSTM(双向, rnn_size256)与Linear投影层最后一层输出回到input_size以生成逐帧掩码末尾用ReLU保证掩码非负。要替换模型只需把train.yaml中的!new:custom_model.CustomModel换成内置模型或你自己的模块。推理增强单个文件训练完成后用 templates/enhancement/enhance_file.py 进行单文件推理python enhance_file.py noisy_file.wav results/4234/save脚本基于speechbrain.inference.enhancement.SpectralMaskEnhancement.from_hparams加载inference.yaml中定义的模型与 STFT 参数。注意如果修改了train.yaml中的 STFT 或模型结构必须保持inference.yaml一致否则推理结果会出错该提示也写在脚本头部注释中。模板二说话人识别Speaker ID——序列分类任务一行命令开始训练templates/speaker_id 同样是四个核心文件加两个推理/验证脚本inference.yaml、verify_speaker.pypython train.py train.yaml首次运行会自动下载 Mini Librispeech OpenRIR动态生成增强样本训练基于X-vector 分类器的说话人识别模型。特征与归一化train.yaml中n_mels23的 Fbank 特征由speechbrain.lobes.features.Fbank计算随后经InputNormalization(norm_typesentence, std_normFalse)做句内归一化compute_features: !new:speechbrain.lobes.features.Fbank n_mels: !ref n_mels mean_var_norm: !new:speechbrain.processing.features.InputNormalization norm_type: sentence std_norm: False数据切分与增强策略与 enhancement 模板不同speaker_id 模板通过split_ratio: [80, 10, 10]在数据准备阶段将 Mini Librispeech 切分为训练/验证/测试三份且noise_annotation存放在save_folder下。增强组合更丰富共四种波形增强全部作用于原始样本并concat_original: True原样本也保留在 batch 中AddNoiseSNR 0–15 dB 随机加噪SpeedPerturbspeed_changes: [95, 100, 105]三档变速DropFreq随机丢弃 1–3 条频率带宽度 0.05DropChunk随机丢弃 1–5 段时长 1000–2000 的音频块。wav_augment: !new:speechbrain.augment.augmenter.Augmenter concat_original: True min_augmentations: 4 max_augmentations: 4 augment_prob: 1.0 augmentations: [add_noise, speed_perturb, drop_freq, drop_chunk]模型X-vector 分类器templates/speaker_id/custom_model.py 实现经典X-vector结构5 层 TDNNConv1d LeakyReLU BatchNorm1d通道数[512, 512, 512, 512, 1500]卷积核[5, 3, 3, 1, 1]膨胀率[1, 2, 3, 1, 1]StatisticsPooling统计池化将变长帧序列压缩为均值 标准差维度翻倍最后一层Linear映射到lin_neurons512维的说话人嵌入emb_dim: 512。其上的Classifier是一个Sequential容器LeakyReLU → BatchNorm1d → 1 个线性块 →Linear(out_neuronsn_classes)→ LogSoftmax输出 28 类Mini Librispeech 共 28 位说话人。train.yaml中的模块注册也体现了 SpeechBrain 的惯例——modules字典中的对象会被 Brain 自动搬到目标设备并调用train()/eval()modules: compute_features: !ref compute_features embedding_model: !ref embedding_model classifier: !ref classifier mean_var_norm: !ref mean_var_norm优化与学习率调度优化器为 Adamlr_start0.001学习率由speechbrain.nnet.schedulers.LinearScheduler从lr_start线性退火到lr_final0.0001检查点每ckpt_interval_minutes15分钟保存一次Checkpointer的recoverables同时登记了embedding_model、classifier、normalizer与epoch_counter保证训练中断可无缝恢复。泛化到其他分类任务README 明确指出整个目录可以直接复制作为开发与说话人识别类似的分类任务语种识别、情感分类等的起点。只需修改n_classes、特征维度和数据准备脚本即可迁移到新任务。模板三语音识别Speech Recognition——序列到序列任务三阶段训练流程templates/speech_recognition/README.md 明确给出了端到端注意力 ASR 的三步训练流程先训 Tokenizer再训 LM最后训 ASR。整个speech_recognition目录被组织为三个子目录与流程一一对应。第 1 步训练 TokenizerBPE 子词单元SpeechBrain 依赖 SentencePiece 做子词切分。训练转录文本经过统计后决定词片word piece划分最原子的单元是字符最粗的是完整单词实践中常用介于两者之间的子词。执行cd Tokenizer python train.py tokenizer.yaml按 templates/speech_recognition/Tokenizer/README.mdtokenizer 直接基于训练转录文本训练。ASR 的train.yaml中output_neurons: 1000对应1000 个 BPE token且强调 ASR 必须与 LM 使用同一个 tokenizer否则会失配。第 2 步训练语言模型RNNLM有了目标 token 后在大规模文本语料最好与应用领域一致上训练语言模型。模板示例直接使用训练转录训练cd ../LM python train.py RNNLM.yamltemplates/speech_recognition/LM 下的RNNLM.yaml与custom_model.py定义了 RNNLM 结构其data/目录自带train.txt、valid.txt、test.txt三个小型文本文件。README 特别提醒真实场景中训练 LM 计算量极大最佳实践是复用现有 LM 或在其上微调。第 3 步训练语音识别器CRDNN GRU 解码器cd ../ASR python train.py train.yaml该模板实现了一个端到端注意力 ASRCRDNN 编码器 自回归 GRU 解码器编码器与解码器之间使用注意力机制AttentionalRNNDecoderlocation 型注意力attn_dim1024。最终词序列通过beam search 上一步训练的 RNNLM检索得到。联合训练CTC NLLtrain.yaml头部注释概括了模型配置Encoder: CRDNN、Decoder: GRU beamsearch RNNLM、Tokens: 1000 BPE、losses: CTC NLL。前number_of_ctc_epochs5轮以 CTC 损失为主之后切换为注意力 NLL 损失ctc_weight: 0.5控制两类损失权重。关键训练参数如下参数默认值说明number_of_epochs15总训练轮数number_of_ctc_epochs5仅 CTC 损失的轮数lr1.0Adadelta 初始学习率batch_size8批大小label_smoothing0.1标签平滑系数output_neurons1000token 数与 LM 一致blank_index / bos_index / eos_index0CTC 空白符、句子起止符索引完整的数据增强矩阵ASR 模板是三个模板中增强最全面的覆盖波形域与特征域两层波形域增强wav_augmentcodec 压缩、加混响AddReverbOpenRIR 下载、加噪AddNoiseSNR 0–15、babble 噪声batch 内信号求和作为干扰SNR 5–15、变速SpeedPerturb85%–115% 六档、截幅DoClip、随机幅度RandAmp、频率带丢弃DropFreq、时间块丢弃DropChunk、比特率降低DropBitResolution。特征域增强fea_augment时间/频率平移RandomShift、时间/频率块丢弃SpectrogramDrop、时间/频率扭曲Warping。每个增强都配了独立的enable_*开关如enable_add_reverb: True方便做消融实验与超参搜索。YAML 中特别注明模板为演示将所有增强组合在一起实际应用中通常只选择其中一部分以获得更好性能。解码beam search 与三种 scorertrain.yaml展示了 SpeechBrain 的 scorer 组合机制templates/speech_recognition/ASR/train.yamlctc_scorerCTCScorer在 pruned token 上打分提升性能但拖慢解码coverage_scorerCoverageScorer基于累计注意力权重施加覆盖惩罚抑制重复翻译rnnlm_scorerRNNLMScorer带temperature的语言模型打分。ScorerBuilder用scorer_beam_scale: 1.5决定剪枝规模full_scorers在全词表打分partial_scorers仅在剪枝后的 token 子集上打分。验证阶段用轻量valid_searchbeam_size8仅覆盖惩罚测试阶段用test_searchbeam_size80叠加 LM CTC 覆盖惩罚并有lm_weight: 0.50、temperature: 1.25、max_attn_shift: 240等解码超参。预训练Pretrainer 与 HuggingFace 仓库pretrained_path: speechbrain/asr-crdnn-rnnlm-librispeech指向预训练模型的 HuggingFace 仓库。Pretrainer会加载lm.ckpt、tokenizer.ckpt与asr.ckpttemplates/speech_recognition/ASR/train.yaml也可以用本地路径替换从而在少量数据mini-librispeech上获得可接受的收敛效果。README 同时强调真实应用中需要远多于模板的数据量才能达到可用性能追求更优效果可参考recipes/LibriSpeech/ASR中的完整配方。模板四超参数优化Hyperparameter Optimizationtemplates/hyperparameter_optimization_speaker_id 在 speaker_id 模板的基础上引入了超参数搜索能力文件结构与 speaker_id 基本一致train.py、train.yaml、custom_model.py、mini_librispeech_prepare.py新增hpopt.yaml定义搜索空间与优化器。它是将speechbrain.utils.hpopt与模板结合的实践样例适合需要自动调参的任务。基于模板开发新 Recipe 的通用方法论综合三个模板可以总结出 SpeechBrain Recipe 的标准骨架复制模板目录选择与任务类型最接近的模板回归 → enhancement分类 → speaker_id序列生成 → speech_recognition整体复制改造数据准备脚本替换mini_librispeech_prepare.py输出同样格式的train.json/valid.json/test.jsonmanifest调整train.yaml修改特征参数n_mels、n_fft、sample_rate、训练超参number_of_epochs、batch_size、lr与输出类别数n_classes、output_neurons替换或编辑custom_model.py把!new:custom_model.Xxx指向你自己的 PyTorch 模块或直接用 SpeechBrain 内置模型如speechbrain.lobes.models.CRDNN、Xvector等保持inference.yaml与训练配置一致STFT 参数、模型结构必须在训练与推理间严格对齐运行与恢复python train.py train.yaml即可启动CheckpointerEpochCounter保证中断后续训FileTrainLogger将训练统计写入日志文件并同步输出到终端。所有模板都依赖 hyperpyyaml 的!new/!ref/!apply语法进行对象构建与参数引用seed必须置于 YAML 顶部以保证实验可复现数据量较大时建议参考 YAML 注释把数据集压缩打包后拷贝到计算节点本地盘如 SLURM 集群的$SLURM_TMPDIR再解压以规避共享文件系统的 I/O 瓶颈。小结SpeechBrain 的 Templates 体系用三个小而完整的例子演示了语音增强序列回归、说话人识别序列分类与端到端语音识别序列到序列三类任务的完整 Recipe 写法。无论是训练入口sb.Brain子类、超参组织hyperpyyaml、数据管道DynamicItemDataset、动态增强Augmenter、检查点Checkpointer还是推理接口from_hparams都遵循完全一致的规范。以模板为骨架、以 recipes 目录中的完整配方为进阶参考即可快速落地你自己的语音任务。【免费下载链接】speechbrainA PyTorch-based Speech Toolkit项目地址: https://gitcode.com/GitHub_Trending/sp/speechbrain创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
分享:

看完干货,该让你的企业上线了

免费需求沟通 · 48 小时内出具建站方案 · 河南本地可上门