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

ESPnet REVERB ASR 实战指南:基于 Transformer 与在线 RIR/噪声增强的远场语音识别方案

人工智能语音音频深度学习NLP【免费下载链接】espnetEnd-to-End Speech Processing Toolkit项目地址https://gitcode.com/gh_mirrors/es/espnet点击查看免费下载导读REVERB 是语音识别领域公认的远场/混响评测基准REVERB Challenge 2014其真实real与模拟simu评测集同时涵盖近讲near与远讲far麦克风并提供了 1ch 与 8ch 多通道音频。本文基于 ESPnet 仓库中的 egs2/reverb/asr1 完整配方系统讲解如何以 WSJ/WSJCAM0 干净语音为训练数据、通过在线施加 RIR 混响 随机信噪比噪声的方式增强训练并对比三种前端处理无前端、1 通道 WPE 去混响、8 通道 WPEBeamformIt 波束成形对 Transformer ASR 的影响。读完本文你将掌握该配方的数据准备、前端处理管线、ASR/LM 训练配置与解码参数并学会阅读和复现其 WER/CER 结果表。配方总览从干净语音到混响评测REVERB 配方的核心思路是不直接使用带混响的训练语音训练模型而是使用 WSJ0 WSJ1 WSJ cam0WSJCAM0的干净语音作为训练语料train_settr_wsjcam0_si284在训练数据加载阶段在线为每条语音随机叠加 RIR房间冲激响应与指定信噪比范围的噪声模拟真实混响环境在开发集/测试集上分别评估三种前端处理结果无前端、WPE、WPEBeamformIt验证前端增强 后端 ASR的协同效果。配方入口 run.sh 给出了核心参数组合train_settr_wsjcam0_si284 valid_setdt_mult_1ch test_setsdt_real_8ch_beamformit dt_simu_8ch_beamformit et_real_8ch_beamformit et_simu_8ch_beamformit \ dt_real_1ch_wpe dt_simu_1ch_wpe et_real_1ch_wpe et_simu_1ch_wpe \ dt_real_1ch dt_simu_1ch et_real_1ch et_simu_1ch ./asr.sh \ --lang en \ --feats_normalize utterance_mvn \ --speed_perturb_factors 0.9 1.0 1.1 \ --use_lm true \ --token_type char \ --nbpe 80 \ --audio_format flac \ --nlsyms_txt data/nlsyms.txt \ --inference_config conf/decode.yaml \ --lm_config conf/train_lm_transformer.yaml \ --asr_config conf/tuning/train_asr_transformer4.yaml \ --train_set ${train_set} \ --valid_set ${valid_set} \ --test_sets ${test_sets} \ --lm_train_text ${train_set}/text data/local/other_text/text $要点解读--feats_normalize utterance_mvn使用句级utterance-levelMVN 做特征归一化而非全局 CMVN适合在线增强训练场景--speed_perturb_factors 0.9 1.0 1.1三倍速扰动数据增强等价于将训练数据扩充 3 倍是 ASR 配方标配--token_type char--nbpe 80英语采用字符级 token--audio_format flac音频统一转成 FLAC 格式节省存储--lm_train_text同时使用训练集文本与data/local/other_text/text的额外外部文本训练语言模型。注意run.sh中注释保留了两套数据方案REVERB 官方多通道训练集tr_simu_8ch_si284与本配方默认使用的 WSJCAM0 干净语音方案tr_wsjcam0_si284可切换二者对最终评测结果的影响正是本 README 讨论的主题之一。数据准备与在线增强原理语料路径配置所有语料路径在 db.sh 中声明REVERB 相关条目如下WSJ0 WSJ1 WSJCAM0 REVERB REVERB_OUT${PWD}/REVERB # Output file pathREVERB_OUT指向本地处理输出目录WSJ0/WSJ1/WSJCAM0/REVERB需要使用者自行填写实际语料路径在 JHU 等特定环境中db.sh已自动填入对应共享路径例如REVERB/export/corpora5/REVERB_2014/REVERB。生成单通道 RIR 与噪声库混响与噪声增强所用的 RIR/噪声素材由 local/prepare_rir_noise_1ch.sh 准备脚本自动下载 REVERB 官方工具包REVERB_TOOLS_FOR_ASR_ver2.0.tgz将其中的 8 通道 RIR 与噪声 wav 逐一拆分成单通道输出为data/reverb_rir_single/wav.scpRIR 单通道索引data/reverb_noise_single/wav.scp噪声单通道索引for nr in noise rir; do odata/reverb_${nr}_single mkdir -p ${o}/data for w in ${downloaddir}/reverb_tools/.../${nr^^}/*.wav; do for ch in 1 2 3 4 5 6 7 8; do sox ${w} ${o}/data/$(basename ${w%*.wav})_${ch}ch.wav remix ${ch} echo $(basename ${w%*.wav})_${ch}ch ${o}/data/$(basename ${w%*.wav})_${ch}ch.wav 13 done done 3 ${o}/wav.scp done训练时在线 RIR 噪声增强增强逻辑不在数据预处理阶段固化而是在每个训练 epoch 的数据加载时在线随机施加核心实现在 espnet2/train/preprocessor.py对应参数定义于 ASR 配置如train_asr_transformer4.yaml底部rir_scp: data/reverb_rir_single/wav.scp noise_scp: data/reverb_noise_single/wav.scp speech_volume_normalize: 1. noise_db_range: 12_17 rir_apply_prob: 1. noise_apply_prob: 1.各参数含义与源码实现一一对应参数默认值源码本配方取值作用rir_scpNonedata/reverb_rir_single/wav.scpRIR 波形索引训练时按概率随机选取一条与语音卷积rir_apply_prob1.01.每条语音施加 RIR 的概率源码中以self.rir_apply_prob np.random.random()判定noise_scpNonedata/reverb_noise_single/wav.scp噪声波形索引noise_apply_prob1.01.施加噪声的概率noise_db_range3_1012_17目标信噪比SNR区间格式min_maxdB源码解析后在此范围内均匀采样 SNR 并计算噪声缩放系数speech_volume_normalizeNone1.语音峰值归一化目标源码依据该值将语音幅值缩放到目标电平后再叠加噪声从 preprocessor.py 源码 可以看到这五个参数全部挂在Preprocessor类上且每个参数都有默认值因此可以按需单独开启 RIR 或噪声增强。值得强调的是noise_db_range: 12_17表示目标 SNR 落在 1217 dB 区间随机采样——比默认的3_10更高噪声更小这是本配方模拟远讲但非极端嘈杂环境的调参选择。叠加噪声时源码还会解析该字符串并给出格式校验Format error: {noise_db_range} e.g. -3_4 - [-3db,4db]支持负 dB 值。模型配置Transformer ASR Transformer LM主 ASR 配置含增强参数README 中两套实验分别使用conf/tuning/train_asr_transformer.yamlTransformer SpeedPerturbation SpecAug无在线增强conf/tuning/train_asr_transformer4.yaml在上述基础上增加 RIR 噪声在线增强README 的主推实验train_asr_transformer4.yaml完整配置如下查看原文batch_type: numel batch_bins: 16000000 accum_grad: 1 max_epoch: 50 patience: none init: xavier_uniform best_model_criterion: - - valid - acc - max keep_nbest_models: 10 encoder: transformer encoder_conf: output_size: 256 attention_heads: 4 linear_units: 2048 num_blocks: 12 dropout_rate: 0.1 positional_dropout_rate: 0.1 attention_dropout_rate: 0.0 input_layer: conv2d normalize_before: true decoder: transformer decoder_conf: attention_heads: 4 linear_units: 2028 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 lsm_weight: 0.1 length_normalized_loss: false optim: adam optim_conf: lr: 0.005 scheduler: warmuplr scheduler_conf: warmup_steps: 30000 specaug: specaug specaug_conf: apply_time_warp: true time_warp_window: 5 time_warp_mode: bicubic apply_freq_mask: true freq_mask_width_range: - 0 - 30 num_freq_mask: 2 apply_time_mask: true time_mask_width_range: - 0 - 40 num_time_mask: 2 normalize: utterance_mvn normalize_conf: norm_means: true norm_vars: false eps: 1.0e-20 rir_scp: data/reverb_rir_single/wav.scp noise_scp: data/reverb_noise_single/wav.scp speech_volume_normalize: 1. noise_db_range: 12_17 rir_apply_prob: 1. noise_apply_prob: 1.关键参数解读模型规模编码器 12 层 Transformeroutput_size256、4 头、FFN 2048、解码器 6 层FFN 2028典型小/中规模配置注释标明在 4 张 GTX-1080ti 上约需 1 天ctc_weight: 0.3CTC 与注意力损失的混合权重为 0.3兼顾对齐稳定性与注意力解码lsm_weight: 0.1标签平滑 0.1specaug_confSpecAugment 启用时间扭曲窗口 5、bicubic 插值、2 个频率掩码宽度 030、2 个时间掩码宽度 040scheduler: warmuplrwarmup_steps: 30000学习率预热调度与lr: 0.005配合patience: none不依赖验证集提前停止而是训练满max_epoch后按best_model_criterion验证 acc 最大选取模型keep_nbest_models: 10保留 10 个最优检查点。对照 train_asr_transformer.yaml无增强版本可见两者模型与优化配置完全一致区别仅在于train_asr_transformer4.yaml增加rir_scp/noise_scp/speech_volume_normalize/noise_db_range/rir_apply_prob/noise_apply_prob六个在线增强参数并将max_epoch从 100 减至 50。这组对照正是 README 中对比有无在线增强实验的关键变量。Transformer 语言模型配置语言模型使用 conf/tuning/train_lm_transformer.yamllm: transformer lm_conf: pos_enc: null embed_unit: 128 att_unit: 512 head: 8 unit: 2048 layer: 16 dropout_rate: 0.1 grad_clip: 5.0 batch_type: numel batch_bins: 350000 accum_grad: 2 max_epoch: 25 optim: adam optim_conf: lr: 0.001 scheduler: warmuplr scheduler_conf: warmup_steps: 25000 best_model_criterion: - - valid - loss - min keep_nbest_models: 1016 层 Transformer LMpos_enc: null表示不额外叠加位置编码Transformer 内部处理位置信息解码阶段通过lm_weight与 ASR 模型得分融合见下文解码配置。解码配置conf/tuning/decode.yaml 定义了推理参数lm_weight: 1.2 beam_size: 20 penalty: 0.0 maxlenratio: 0.0 minlenratio: 0.0 ctc_weight: 0.3lm_weight: 1.2语言模型得分权重 1.2显著高于常见默认值约 0.10.6说明该配方非常依赖 Transformer LM 提升解码质量beam_size: 20束搜索宽度 20ctc_weight: 0.3与训练时model_conf.ctc_weight保持一致解码时同样混合 CTC 前缀得分。前端处理管线WPE 去混响与 BeamformIt 波束成形README 的评测覆盖三种前端No frontend直接使用原始 1ch 信号、1ch WPE加权预测误差去混响、8ch WPEBeamformIt先 WPE 去混响再 8 通道波束成形。这些前端处理在egs2/reverb/asr1/local/中独立完成ASR 训练本身不依赖它们属于标准的前端增强 → 单通道 ASR评测范式。1ch WPE 去混响WPEWeighted Prediction Error是一种经典的盲去混响方法。local/run_wpe.sh 会先检查nara_wpe是否安装未安装时提示cd ../../../tools make nara_wpe然后对 dt/et 的 real 与 simu 数据按 1/2/8 通道分别组织输入-输出 wav 列表并用utils/split_scp.pl切分后并行调用 local/run_wpe.pystft_options dict(size512, shift128, fadingTrue, padTrue, symmetric_windowFalse) sampling_rate 16000 delay 3 iterations 5 taps 10 Y stft(y, **stft_options).transpose(2, 0, 1) Z wpe(Y, iterationsiterations, statistics_modefull).transpose(1, 2, 0) z istft(Z, sizestft_options[size], shiftstft_options[shift])参数固定为STFT 窗长 512、帧移 12816 kHz 下对应 8 ms 帧移、WPE 延迟 3、迭代 5 次、滤波器抽头 10。输出 wav 写入exp/wpe_real_{task}_{nch}ch或exp/wpe_simu_{task}_{nch}ch目录。8ch WPE BeamformIt在 WPE 输出基础上local/run_beamform.sh 调用开源工具 BeamformIt 做延时求和delay-and-sum波束成形BeamformIt -s $line -c $arrays \ --config_file pwd/conf/reverb_beamformit.cfg \ --result_dir $odir脚本要求系统已安装 BeamformIt缺失时提示cd ../../../tools; installers/install_beamformit.sh并把处理后的音频写入data/{dt,et}_{real,simu}_{2,8}ch_beamformit/wav.scp对应的数据目录。关键行为real 数据8 通道来自真实多通道录音直接按通道序号分组simu 数据通过grep ch1...ch8按文件名中的通道标识分组BeamformIt 配置 conf/reverb_beamformit.cfg 中scroll_size250、window_size500、nbest_amount4、do_noise_threshold1、noise_percent10启用自适应权重do_adapt_weights1并自动计算参考通道do_compute_reference1。完成后run.sh中的test_sets即引用这些经前端处理的数据目录dt_real_8ch_beamformit、dt_real_1ch_wpe等asr.sh 会自动完成特征抽取、CMVN/utterance MVN、解码与打分。评分细节far/near 拆分REVERB 评测中每个测试集内部按麦克风距离再分far远讲与near近讲。local/score.sh 通过正则for_[0-9]ch_{far|near}从 hyp/ref 中拆出两个子集并分别用sclite计算 WER/CER最终汇总出 README 中远/近两行结果。这也是结果表中每个数据集都同时出现 far 与 near 两行的原因。结果解读在线增强与前端处理的增益README 由scripts/utils/show_asr_result.sh自动生成文件首行注明Generated by scripts/utils/show_asr_result.sh完整记录了两次实验的环境与结果。实验一Transformer ASR Transformer LM SpeedPerturbation SpecAug 在线 RIR/噪声环境python 3.7.3、espnet 0.9.5、pytorch 1.5.12021-01-15 记录配置ASR train_asr_transformer4.yaml含 RIR/噪声在线增强noise_db_range12_17、rir_apply_prob0.999、noise_apply_prob1.——注意 README 记录的模型目录名中保留了实际应用概率0.999与当前配置文件的1.略有出入以实际训练目录为准、LM train_lm_transformer.yaml、解码 decode.yaml关键 WER 结果解码模型为lm_train_lm_transformer_en_char_valid.loss.ave_asr_model_valid.acc.ave前端测试集WERfarWERnearNo frontenddt_real_1ch7.95.8No frontenddt_simu_1ch4.83.31ch WPEdt_real_1ch_wpe7.95.11ch WPEdt_simu_1ch_wpe4.63.48ch WPEBeamformItdt_real_8ch_beamformit5.13.88ch WPEBeamformItdt_simu_8ch_beamformit3.53.1对应 CERfar/nearNo frontend 下 dt_real 为 4.2/3.1、dt_simu 为 2.3/1.58ch 波束成形后 dt_real 降至 2.4/1.9、dt_simu 降至 1.6/1.4。结论模式① 多通道前端8ch WPEBeamformIt相比无前端在真实远场dt_real_1ch far WER 7.9 → 5.1与模拟远场4.8 → 3.5上均有明显收益且句子错误率S.Err降幅更大49.4 → 42.7② 1ch WPE 单独使用收益有限近讲场景下甚至持平主要价值在于为波束成形提供去混响的输入③ 远讲far普遍比近讲near差 13 个百分点真实数据real普遍比模拟数据simu差符合远场评测的典型规律。实验二Transformer SpeedPerturbation SpecAug无在线增强环境espnet 0.9.5、pytorch 1.5.12020-11-18 记录配置ASR train_asr_transformer.yaml无 RIR/噪声增强、LM 与解码配置同上关键 WER前端测试集WERfarWERnearNo frontenddt_real_1ch10.58.6No frontenddt_simu_1ch4.93.21ch WPEdt_real_1ch_wpe9.78.48ch WPEBeamformItdt_real_8ch_beamformit5.74.18ch WPEBeamformItdt_simu_8ch_beamformit2.92.8两组实验的横向对比是本文最有价值的结论在真实远场数据上加入在线 RIR噪声增强后No frontend 下 dt_real_1ch far 的 WER 从 10.5 降至 7.9CER 从 5.7 降至 4.2即便叠加 8ch 波束成形增强训练仍保持优势far WER 5.7 → 5.1。也就是说训练时在线混响噪声增强与测试时前端去混响/波束成形是互补的——前者让 ASR 模型本身对混响鲁棒后者进一步降低测试信号失真二者叠加可获得最佳真实场景性能。复现指引安装依赖WPE 需要nara_wpecd ../../../tools make nara_wpe波束成形需要BeamformItcd ../../../tools installers/install_beamformit.sh评分需要sclite配置语料在 db.sh 中填入 WSJ0/WSJ1/WSJCAM0/REVERB 实际路径或直接使用 JHU 等预配置环境运行前端处理先执行 local/run_wpe.sh 生成 WPE 版本数据再执行 local/run_beamform.sh 生成 BeamformIt 版本数据运行主配方./run.sh默认使用train_asr_transformer4.yaml与 12 个测试集。若只想复现无增强基线可将--asr_config指向 train_asr_transformer.yaml查看结果实验完成后local/get_results.sh 与scripts/utils/show_asr_result.sh会自动汇总 WER/CER 并更新 README 结果表。小结REVERB 配方完整展示了 ESPnet 处理远场语音识别的一条可复现路径干净语音 在线 RIR/噪声增强训练 可选的测试端 WPE/BeamformIt 前端。源码层面在线增强由 espnet2/train/preprocessor.py 的rir_scp/noise_scp/noise_db_range/rir_apply_prob/noise_apply_prob/speech_volume_normalize参数驱动前端处理则由 local/ 下的 WPE 与 BeamformIt 脚本实现实验层面README 的结果表以 far/near、real/simu、三种前端的九宫格式对比量化了每一项技术手段的真实增益。对于希望复现或扩展远场 ASR 的开发者本配方从数据、模型到评测的每一环节都提供了可直接运行的开源实现。赞分享人工智能语音音频深度学习NLP【免费下载链接】espnetEnd-to-End Speech Processing Toolkit项目地址https://gitcode.com/gh_mirrors/es/espnet点击查看免费下载相关推荐ESPnet 多房间远场语音识别实战DIRHA-WSJ 数据集上的 Transformer 噪声/混响增强训练与评测ESPnet 多房间远场语音识别实战DIRHA WSJ 数据集上的 Transformer 噪声/混响增强训练与评测 本篇技术指南以 ESPnet 仓库中 e人工智能语音音频深度学习NLPESPnet 缅甸语 ASR 实战基于 HuBERT 自监督特征的 Transformer 低资源语音识别配方ESPnet 缅甸语 ASR 实战基于 HuBERT 自监督特征的 Transformer 低资源语音识别配方 本文围绕 ESPnet 仓库中 egs2/bu人工智能语音音频深度学习NLPSpeechBrain 在 RescueSpeech 上的噪声鲁棒语音识别SepFormer 增强 Whisper ASR 联合微调实战SpeechBrain 在 RescueSpeech 上的噪声鲁棒语音识别SepFormer 增强 Whisper ASR 联合微调实战 导读 本文基于人工智能深度学习语音音频NLP预训练创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
分享:

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

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