ARTICLE DETAIL

资讯详情

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

SpeechBrain 基于 LibriSpeech 的端到端语音识别(ASR)完整实验指南:Tokenizer、语言模型与声学模型三阶段训练管线

SpeechBrain 基于 LibriSpeech 的端到端语音识别(ASR)完整实验指南:Tokenizer、语言模型与声学模型三阶段训练管线 SpeechBrain 基于 LibriSpeech 的端到端语音识别ASR完整实验指南Tokenizer、语言模型与声学模型三阶段训练管线【免费下载链接】speechbrainA PyTorch-based Speech Toolkit项目地址: https://gitcode.com/GitHub_Trending/sp/speechbrain导读本文以 SpeechBrain 仓库中的 recipes/LibriSpeech/README.md 为主线完整梳理基于 LibriSpeech 数据集搭建端到端语音识别系统的标准流程先训练子词 Tokenizer再训练语言模型LM最后训练声学模型AM并给出各阶段对应的超参数配置、运行命令与预训练模型的使用方法。读完本文你将掌握在 SpeechBrain 中从零训练 CTC、seq2seqCTCAttention、Transducer、Transformer 等多种 ASR 系统的完整路径也能直接调用预训练模型完成音频转写并了解仓库中附带的字素到音素G2P系统。三阶段训练管线为什么顺序不能颠倒LibriSpeech 实验目录recipes/LibriSpeech下组织了一套完整的 ASR 训练管线包含四个子目录其中前三者构成标准的先分词、再语言模型、最后声学模型的顺序依赖阶段目录产物说明1. Tokenizerrecipes/LibriSpeech/Tokenizer子词单元模型输入训练转写文本产出 AM 与 LM 共用的输出词表2. 语言模型 LMrecipes/LibriSpeech/LMRNN / Transformer / n-gram 语言模型在 beam search 中为不同假设分配权重3. 声学模型 AMrecipes/LibriSpeech/ASRseq2seq / Transducer / Transformer / CTC 声学模型将输入语音映射为子词单元序列必须先训练 Tokenizer。正如 Tokenizer/train.py 的 docstring 所强调在做语音识别实验时必须确保声学模型和语言模型使用同一个 Tokenizer 训练否则会产生 token 不匹配token mismatch导致 AM 与 LM 结合时的 beam search 输出劣化。LM 与 AM 都会复用这个 Tokenizer 来映射输出 token。语言模型在解码中的作用。无论是 RNN 还是 Transformer 架构LM 都是在 beam search 阶段对声学模型生成的多个候选假设hypotheses赋予不同权重从而选出语言上更合理的输出。由于从头训练一个 LM 往往需要数天甚至数周默认配置会直接下载预训练 LM 使用。声学模型家族。recipes/LibriSpeech/ASR 下提供了四种主流建模方式的 recipeseq2seqCTC attentionCRDNN 编码器 GRU 解码器见 ASR/seq2seqTransducerConformer Transducer基于 Numba 实现的 transducer loss见 ASR/transducerTransformer纯 Transformer/Conformer 架构也支持微调 Whisper见 ASR/transformerCTC-only纯 CTC 损失支持微调 wav2vec2 / Whisper以及 K2WFSTCTC 实现见 ASR/CTC。此外recipes/LibriSpeech/G2P 目录还附赠一个字素到音素Grapheme-to-Phoneme系统可将字符序列转换为对应的音素序列。各模型的具体结果记录在对应子目录的 README 中。第一阶段训练 Tokenizer子词单元工作原理Tokenizer 基于 Google 的SentencePiece库实现训练语料来自 LibriSpeech 的训练转写文本。核心入口脚本为 Tokenizer/train.py其执行逻辑非常简洁调用prepare_librispeech解析数据集合并train-clean-100、train-clean-360、train-other-500三个训练子集生成train.csv并生成dev-clean.csv验证清单通过sb.create_experiment_directory创建实验目录并保存超参数副本执行hparams[tokenizer]()实例化并运行 SentencePiece 训练。整个脚本只有约 60 行训练 Tokenizer 本身计算量很小只需对转写文本做统计切分。配置文件与关键参数仓库提供两套开箱即用的配置对应 1K 与 5K 词表两种规模运行命令如下python train.py hparams/1K_unigram_subword_bpe.yaml python train.py hparams/5K_unigram_subword_bpe.yaml以 1K_unigram_subword_bpe.yaml 为例核心参数如下参数默认值含义data_folder!PLACEHOLDERLibriSpeech 数据路径运行时需替换为实际路径train_splits[train-clean-100, train-clean-360, train-other-500]用于训练的 LibriSpeech 子集合计 960 小时dev_splits[dev-clean]验证子集test_splits[test-clean, test-other]测试子集skip_prepFalse是否跳过数据准备已生成 CSV 时可置True加速token_typeunigram分词算法可选unigram/bpe/chartoken_output1000词表大小索引 0 保留给 blank/eos/bos/unkcharacter_coverage1.0字符覆盖率覆盖所有字符时取 1.0csv_readwrd读取 CSV 中哪一列作为分词文本单词列bos_id/eos_id1/2句首/句尾 token 的 IDSentencePiece 封装位于 speechbrain/tokenizers/SentencePiece.py通过speechbrain.tokenizers.SentencePiece.SentencePiece在 YAML 中声明实例化。第二阶段训练语言模型LM支持的 LM 类型recipes/LibriSpeech/LM 支持三类语言模型RNN LM配置 RNNLM.yamlTransformer LM配置 transformer.yamln-gram LM基于 KenLM配置 train_ngram.yaml脚本为 train_ngram.py。RNN/Transformer 类 LM 依赖 HuggingFace datasets 库管理大数据集文本的读取与加载见 LM/README.md因此需要先安装额外依赖pip install -r extra_requirements.txt训练命令python train.py hparams/RNNLM.yaml python train.py hparams/transformer.yaml python train_ngram.py hparams/train_ngram.yaml --data_folderyour/data/folderKenLM n-gram LM 的完整安装流程训练 n-gram LM 使用 KenLM 库。首先安装 Ubuntu 系统依赖sudo apt install build-essential cmake libboost-system-dev libboost-thread-dev \ libboost-program-options-dev libboost-test-dev libeigen3-dev zlib1g-dev \ libbz2-dev liblzma-dev然后下载并编译 KenLMC 项目使用 CMake 构建wget -O - https://kheafield.com/code/kenlm.tar.gz | tar xz mkdir kenlm/build cd kenlm/build cmake .. make -j2编译完成后将kenlm/build/bin加入~/.bashrcexport PATH$PATH:/your/path/to/kenlm/build/bin保存后执行source ~/.bashrc使其生效。KenLM 生成的 ARPA 格式 n-gram LM 既可用于 CTC 解码重打分见下文也可通过train_ngram.py自行训练 3-gram / 4-gram 模型。训练成本提示LM/README.md 明确警告从头训练 LM 耗时极长作者团队的 RNNLM 在 4 块 TESLA V100 上需要3~4 周。因此默认方案是直接使用预训练 LM避免从零训练。预训练模型链接见 LM/README.md 中的结果表格。第三阶段训练声学模型AM通用运行方式所有 ASR 子目录共享统一入口模式python train.py hparams/配置文件.yaml。以最常见的 seq2seqCTC attention为例cd recipes/LibriSpeech/ASR/seq2seq python train.py hparams/train_BPE_1000.yaml其中data_folder为!PLACEHOLDER需在命令行传入或修改 YAMLpython train.py hparams/train_BPE_1000.yaml --data_folder/path/to/LibriSpeechseq2seqCTC attention系统ASR/seq2seq/train.py 中定义了ASR(sb.Brain)类其核心数据流在compute_forward中清晰可见波形经compute_features计算 FBank 特征特征经normalize归一化后送入 CRDNN 编码器enc解码器dec以编码器输出 词嵌入emb为输入做 attention 解码输出 seq2seq log 概率前number_of_ctc_epochs个 epoch 额外计算 CTC 分支输出ctc_lin与 NLL 联合训练验证/测试阶段使用valid_search/test_search做 beam search可结合 LM 重打分。关键训练超参数见 train_BPE_1000.yaml参数默认值含义pretrained_lm_tokenizer_pathspeechbrain/asr-crdnn-rnnlm-librispeech预训练 LMTokenizer 的 HuggingFace 源也可改为本地目录number_of_epochs15总训练 epoch 数number_of_ctc_epochs5前 5 个 epoch 启用 CTC 辅助损失batch_size8批大小ctc_weight0.5CTC 损失在总损失中的权重lr1.0优化器学习率Adadeltasample_rate16000采样率LibriSpeech 为 16kHzn_fft/n_mels400/40FFT 点数与梅尔滤波器组数precisionfp32训练精度可选fp32/fp16/bf16该 YAML 还包含动态批处理dynamic batching配置dynamic_batch_samplermax_batch_length、num_buckets等以及噪声数据增强data_folder_noise会自动下载噪声集。重要约束声学模型必须与 LM 使用同一 Tokenizer。配置文件通过pretrained_lm_tokenizer_path从 SpeechBrain 的 HuggingFace 仓库统一拉取lm.ckpt与tokenizer.ckpt正是为了保证三者 token 一致。Transducer 系统ASR/transducer 使用 SpeechBrain 基于 Numba 实现的 transducer loss运行前需先安装pip install numba训练命令python train.py hparams/conformer_transducer.yaml该 recipe 支持流式streaming训练与推理streaming: True并且官方建议在支持半精度的 GPU 上开启--precisionfp16或--precisionbf16以 Conformer Transducer 为例峰值显存可从 39GB 降至 12GB 且性能不受影响。其 README.md 还给出了流式模型 chunk size 与 left context 对 WER 的影响矩阵cs320ms~1280ms、lc2~32 组合测试集 WER 从 3.07% 到 4.38% 不等可用于权衡延迟与精度。Transformer / Whisper 系统ASR/transformer 支持两种入口python train.py hparams/transformer.yaml # 从零训练 Transformer/Conformer python train_with_whisper.py hparams/train_hf_whisper.yaml # 微调 HuggingFace Whisper仅跑测试集时追加--test_only标志即可。若使用 HuggingFace 预训练模型需确保环境中安装了transformers见该目录 extra_requirements.txt。该目录还包含 SpeechLLMWavLM Large Llama 3.2 1B LoRA与 SSL 特征提取extract_ssl_feats.py等进阶方案以及conformer_small.yaml仅 13.3M 参数等轻量配置。CTC-only 系统与高级解码ASR/CTC 提供纯 CTC 损失的多种实现与解码增强方案PyTorch CTCLoss与K2WFSTCTC loss两种损失实现后者见 train_with_wav2vec_k2.pyKenLM n-gram 重打分下载 LibriSpeech 官方 4-gram LM4-gram.arpa.gz后用--kenlm_model_path4-gram.arpa传入即可在解码时对 n-best 假设重打分神经 LM 重打分train_hf_wav2vec_rnn_rescoring.yaml与train_hf_wav2vec_transformer_rescoring.yaml分别使用预训练 RNNLM 与 TransformerLM 对 n-best 列表重排序。需调优两个参数topk参与重打分的假设数默认 20与lm_weightLM 分数权重。官方记录显示该技术可将 WER 从 1.95 降至 1.57详见 CTC/README.md代价是推理时间变慢输入下采样加速通过--downsampling_factor 2对 WavLM 等 SSL 模型输入做信号下采样或卷积/平均窗口下采样可显著降低推理耗时与 MACs。用预训练模型直接转写音频如果不打算训练SpeechBrain 提供了极简的推理接口只需一行代码即可用预训练模型转写音频文件具体用法以各 HuggingFace 模型仓库的说明为准。LibriSpeech 相关的三个主力模型为seq2seqctcattention RNNLMspeechbrain/asr-crdnn-rnnlm-librispeechseq2seqctcattention TransformerLMspeechbrain/asr-crdnn-transformerlm-librispeechTransformer ctc TransformerLMspeechbrain/asr-transformer-transformerlm-librispeech。对应的推理类定义在 speechbrain/inference/ASR.pyASR与流式版本StreamingASR继承自Pretrained基类支持from_hparams(source..., savedir...)从 HuggingFace 加载并调用transcribe_file等方法。若使用流式 Conformer Transducer 模型可参照 transducer/README.md 的部署步骤将lm.ckpt、tokenizer.ckpt、model.ckpt、normalizer.ckpt与推理版 YAML 放入同一目录然后通过StreamingASR.from_hparams(/path/to/model/)实例化该目录也可直接作为 HuggingFace 模型仓库上传。附G2P 字素到音素系统recipes/LibriSpeech/G2P 提供两套模型RNN 模型hparams_g2p_rnn.yamlLSTM 编码器 GRU 解码器 attention负对数似然训练Transformer/Conformer 模型hparams_g2p_transformer.yaml卷积编码器 Transformer 解码器通过transformer_encoder_module参数在两种架构间切换。两者都支持句子级同形异义词消歧homograph disambiguation与可选的音素空间语言模型beam search 集成LM 训练分别使用 train_lm.py 配合hparams_lm_rnn.yaml/hparams_lm_transformer.yaml。启用 LM 的方法把train_lm.py产出的model.ckpt复制为pretrained_path/lm.ckpt再在命令行追加--use_language_model true。该目录还提供 hpopt.yaml 用于超参优化会关闭 checkpoint 并限制 epoch 数评估脚本见 evaluate.py。总结与建议LibriSpeech 实验套件完整展示了 SpeechBrain 的标准化 ASR 工作流Tokenizer → LM → AM的严格依赖顺序保证了子词单元在全链路的一致性四种声学模型架构seq2seq、Transducer、Transformer、CTC覆盖了从经典方案到流式、从零训练到预训练微调wav2vec2 / Whisper / SpeechLLM的全部主流路径多种解码增强手段KenLM n-gram、神经 LM 重打分、K2 WFST 图解码为精度优化提供了丰富的可选项。实践层面的关键建议复现实验结果优先使用预训练 LMLM 训练成本极高数周级默认配置已自动从 HuggingFace 拉取保证 Tokenizer 一致替换任何模型组件时都要确认 LM 与 AM 共用同一 Tokenizer否则 beam search 会因 token 不匹配而劣化显存受限时优先考虑半精度Transducer 等大模型在 fp16/bf16 下显存可降低约 70%且官方测试表明性能几乎不受影响需要低延迟时关注流式配置chunk size 与 left context 的取舍矩阵见 transducer/README.md可作为参数选择的直接参考。【免费下载链接】speechbrainA PyTorch-based Speech Toolkit项目地址: https://gitcode.com/GitHub_Trending/sp/speechbrain创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表