首页/新闻资讯/正文详情

ESPnet2 中的 GRABO 数据集实战:低资源语音命令识别(ASR)端到端流程与 Conformer 训练配置详解

发布时间:2026/9/25 17:56:17 来源:云帆数科 栏目:资讯中心
ESPnet2 中的 GRABO 数据集实战:低资源语音命令识别(ASR)端到端流程与 Conformer 训练配置详解
人工智能语音音频深度学习NLP【免费下载链接】espnetEnd-to-End Speech Processing Toolkit项目地址https://gitcode.com/gh_mirrors/es/espnet点击查看免费下载本文以 ESPnet2 仓库中 egs2/grabo/asr1/README.md 记录的结果报告为骨架完整还原在 ESPnet2 上跑通 GRABO荷兰语顺序词/语音命令数据集的端到端流程从数据集下载与随机划分、单 token 化标注到 Conformer 模型的训练/解码配置解析再到分类准确率与 WER 两种指标的评测实现。读完本文你可以直接复用 run.sh 复现该 recipe并理解每个关键配置项的作用与底层脚本调用链。任务与数据集背景GRABOGRAtuitous BOrdinals是卡普顿大学发布的低资源语音数据集用于“顺序词”ordinal word如第一、第二……等语音命令的识别。该 recipe 的 README 中给出了两篇数据集背景文献Renkens, V., et al. Acquisition of ordinal words using weakly supervised NMF.2014 IEEE SLT, IEEE, 2014.Renkens, V., and Van hamme, H. Capsule networks for low resource spoken language understanding. arXiv:1805.02922 (2018).训练/验证/测试集的划分方式则参考了第三篇文献Tian, Y., and Gorinski, P. J. Improving end-to-end speech-to-intent classification with Reptile. arXiv:2008.01994 (2020).这个任务的关键特性是每条语音命令被当作一个单一 token。也就是说每个参考句子reference sentence只包含一个 token——这使 ASR 退化为语音到意图intent的单标签分类问题。README 中也明确指出由于数据集较小划分是随机的结果不能被严格复现如果想得到稳定结论更好的做法是跑多次实验并取平均准确率。这一点后文会结合数据准备脚本进一步说明。数据下载与准备下载local/data.sh数据准备入口是 local/data.sh。它从 KULeuven 的 FTP 服务器拉取约 2.1 GB 的原始包data_urlftp://ftp.esat.kuleuven.be/psi/speech/vrenkens/grabo.tar.gz data_targrabo.tar.gz data_tar_size2102543961脚本会先校验本地文件字节数是否与data_tar_size一致不一致则删除重下下载后解包到${GRABO}/grabo目录。GRABO这一变量的取值来自 db.sh默认值为downloads表示该语料可由 recipe 自动下载GRABOdownloads # db.sh在 CMU TIR 集群环境中db.sh 还会根据 hostname 自动改写为项目绝对路径/projects/tir5/data/speech_corpora/Grabo体现 ESPnet2 recipe 对多环境路径的适配方式。标注与随机划分local/data_prep.py核心标注脚本是 local/data_prep.py它完成三件事从 XML 解析出命令 token。原始数据中每个 utterance 对应一个帧级 XML 标注文件framedir/cmd/utt.xml脚本中的frametotask()函数把 XML 解析为根元素名 属性字典再序列化成单行字符串root ET.parse(infile).getroot() semantic[name] root[0].text.strip() ... root ET.Element(semantic[name], attribsemantic[args]) return ET.tostring(root).decode(ascii)最终经task_str -.join(task_str.split())压缩空白后写入text文件——这就是每条命令 一个 token的直接实现。按说话人 × 命令的随机 2/4/9 划分。代码对每个说话人如pp2的spchdatadir/command/下的录音排序、洗牌后切分random.seed(2021) ... wav_list.sort() random.shuffle(wav_list) random.shuffle(wav_list) wav_dict {train: wav_list[:2], dev: wav_list[2:6], test: wav_list[6:]}即每个说话人的每条命令2 条训练、4 条验证、剩余 9 条测试。注意 README 中randomly split… please modify the data preparation script to make the procedure deterministic的提醒正源于此尽管代码里写有random.seed(2021)但os.listdir()的目录遍历顺序在不同文件系统/OS 上并不保证有序洗牌前的样本顺序可能不一致因此跨环境严格复现存在风险。生成 Kaldi 风格的 data 目录text、wav.scp、utt2spk。两个值得注意的细节wav.scp不落地中间文件而是直接写入 sox 管道命令在特征提取时在线重采样到 16 kHz 单声道downsampled_wav ( f{args.sox_path} {sample[wav_abspath]} -t wav -r 16k -c 1 - | )utt2spk中每条 utterance 都指向自身utt2spk_f.write(sample[wav_id] sample[wav_id])从源码结构看这是把每个 utterance 当作独立说话人处理规避了说话人级别信息对分类任务的干扰。data.sh 在 stage 2 调用该脚本后还会对train/dev/test三个目录依次执行utt2spk_to_spk2utt.pl、fix_data_dir.sh与validate_data_dir.sh --no-feats完成目录规整与校验。训练入口run.sh 的完整参数整个 recipe 由 run.sh 驱动它调用 ESPnet2 的通用 asr.sh。完整命令如下保留原文件全部参数train_settrain valid_setdev test_setsdev test asr_tagconformer_mono16k_warmup800_lr2e-4_accum2 inference_taginfer asr_configconf/train_asr.yaml inference_configconf/decode_asr.yaml # speed perturbation related # (train_set will be ${train_set}_sp if speed_perturb_factors is specified) speed_perturb_factors0.9 0.95 1.0 1.05 1.1 ./asr.sh \ --skip_data_prep false \ --skip_train false \ --skip_eval false \ --ngpu 1 \ --nj 8 \ --inference_nj 8 \ --speed_perturb_factors ${speed_perturb_factors} \ --feats_type fbank_pitch \ --audio_format wav \ --fs 16000 \ --token_type word \ --use_lm false \ --asr_tag ${asr_tag} \ --asr_config ${asr_config} \ --inference_tag ${inference_tag} \ --inference_config ${inference_config} \ --inference_asr_model valid.acc.ave.pth \ --train_set ${train_set} \ --valid_set ${valid_set} \ --test_sets ${test_sets} \ --local_score_opts --inference_tag ${inference_tag} \ --lm_train_text data/${train_set}/text $关键参数的含义结合 asr.sh 中的注释与实现参数取值说明--feats_typefbank_pitch特征类型asr.sh支持raw、raw_copy、fbank_pitch等fbank_pitch分支会调用steps/make_fbank_pitch.sh提取 Fbank基频特征并在dumpdir/fbank_pitch中写入feats_type标记文件--speed_perturb_factors0.9 0.95 1.0 1.05 1.1语速扰动因子指定后训练集实际会变为train_sp见 asr.sh 与#L580-L601的扰动数据构造对小数据量任务等效于 5 倍数据增强--token_typeword本任务中每条命令即一个词级 token--use_lmfalse不训练独立语言模型解码仅依赖内部 LM 权重见后文decode_asr.yaml--inference_asr_modelvalid.acc.ave.pth推理时加载验证集上准确率平均的最优 checkpoint--local_score_opts--inference_tag infer透传给 local/score.sh 的评分脚本--ngpu/--nj/--inference_nj1/8/8单卡训练CPU 并行度 8需要说明的是README 中记录了feats_type: raw与feats_type: fbank_pitch两组实验但当前 run.sh 只保留了fbank_pitch这一组的入口raw组是通过把--feats_type改为raw复用的同一套模型配置得到的asr.sh在feats_typeraw时把数据放在dumpdir/raw跳过 Kaldi 特征提取直接对 16 kHz 波形建模。训练配置解析conf/train_asr.yaml训练超参见 conf/train_asr.yamlconf/tuning/train_asr_conformer_adam.yaml 为内容相同的历史存档。逐段说明批处理与优化策略batch_type: numel # 按元素个数凑批 batch_bins: 2000000 # 每个 batch 的总元素数上限特征元素数量 accum_grad: 2 # 梯度累积 2 步等效 batch 翻倍 max_epoch: 250 patience: none # 不做早停 best_model_criterion: - - valid - acc - max # 以验证集准确率为模型选择准则 keep_nbest_models: 10 # 保留 10 个最优 checkpointbest_model_criterion直接决定了run.sh中--inference_asr_model valid.acc.ave.pth的选取逻辑训练结束后取验证集准确率最高的若干模型做平均。对于单 token 分类任务用 accuracy 而非 loss 选模型是更贴合最终指标的做法。编码器12 层 Conformerencoder: conformer 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 # Conv2d 前端把 mel 特征图下采样为序列 normalize_before: true # Pre-LN macaron_style: true # Macaron 风格双 FFN 结构 rel_pos_type: legacy pos_enc_layer_type: rel_pos # 相对位置编码 selfattention_layer_type: rel_selfattn activation_type: swish use_cnn_module: true # Conformer 标志性的卷积模块 cnn_module_kernel: 15input_layer: conv2d意味着该配置同时兼容fbank_pitch与raw两种输入对 raw 波形ESPnet2 会在 Conformer 前接 STFT 前端对应 tag 中的mono16k对 fbank_pitch则把 Fbank 与基频拼接后送入 Conv2d。这与 README 中两组实验共享同一 tag 名asr_conformer_mono16k_warmup800_lr2e-4_accum2相吻合。解码器与损失decoder: transformer decoder_conf: attention_heads: 4 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 optim: adam optim_conf: lr: 0.0002 scheduler: warmuplr # pytorch v1.1.0 required scheduler_conf: warmup_steps: 800 model_conf: ctc_weight: 0.0 # 纯 Attention 模型不用 CTC lsm_weight: 0.0 length_normalized_loss: false模型名中的三个数字都能在这里找到出处warmup800对应warmup_steps: 800lr2e-4对应lr: 0.0002accum2对应accum_grad: 2。ctc_weight: 0.0说明模型完全依赖 Attention 解码路径这在解码配置中会再次得到印证。SpecAugment 数据增强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配合run.sh中的语速扰动训练侧共有两层增强时间维度的 SpecAugment时变/频带掩蔽 时间扭曲与语速 5 倍扰动这是对数据集小这一根本约束的主要应对手段。特征参数fbank_pitch模式下Fbank 与基频分别由 conf/fbank.conf 与 conf/pitch.conf 控制# fbank.conf --sample-frequency16000 --num-mel-bins80# pitch.conf --sample-frequency16000均为 16 kHz 采样率下的 80 维 mel 滤波组与data_prep.py中 sox 在线重采样到-r 16k的约定一致。解码配置conf/decode_asr.yamllm_weight: 0.0 ctc_weight: 0.0 beam_size: 1 maxlenratio: -1这份极简配置与训练侧ctc_weight: 0.0形成闭环解码时既无外部 LMlm_weight: 0.0也无 CTC 分支ctc_weight: 0.0beam_size: 1即等价于 greedy 解码。由于每条假设只有一个 tokenbeam search 的宽度本来就无意义beam_size: 1使解码退化为对单一 token 的 argmax进一步印证了单 token 分类的任务本质。maxlenratio: -1则关闭输出长度比约束允许任意长度假设参与排序。评测分类准确率与 WER评测由asr.sh的推理阶段统一调度WER 分数由通用评分流程产出而分类准确率则由 recipe 自带的两个脚本计算local/score.sh遍历exp/asr_tag/inference_tag/下各测试集子目录对每个目录调用score.py并把逐测试集结果追加汇总为accuracy.csvlocal/score.py读取推理输出的hyp.trn与ref.trn逐 utterance 做整句字符串精确匹配来统计准确率for sample_id in ref_dict: n_samples 1 if ref_dict[sample_id] hyp_dict[sample_id]: n_correct 1结果写入accuracy.csv表头total,correct,accuracy。由于每条参考只有一个 token二者是互补的视角分类准确率统计整句命中WER 的 Snt 列则给出替换率。两者满足近似关系accuracy ≈ 1 - Sub/100本任务 Del、Ins 均为 0README 中的结果表也验证了这一点如 fbank_pitch 组 devaccuracy 0.965 对应 Sub 3.5%。实验结果README 原文记录feats_type: raw环境Python 3.9.7 / espnet 0.10.5a1 / PyTorch 1.9.0 / Git hash09ddefe8fd5b6394338b0c653c3f6ec50063a8432021-11-20模型asr_conformer_mono16k_warmup800_lr2e-4_accum2Zenodo 记录 5716386datasetSntWrdCorrSubDelInsErrS.Errinfer/dev1584158497.92.10.00.02.12.1infer/test3631363197.62.40.00.02.42.4feats_type: fbank_pitch环境Python 3.8.12 (conda-forge) / espnet 0.10.3a3 / PyTorch 1.9.0 / Git hash3d17c072348a1a9a4a3f179ad642c0d9f07f44062021-10-01模型asr_conformer_mono16k_warmup800_lr2e-4_accum2Zenodo 记录 5637566分类准确率datasettotalcorrectaccuracydev158415290.965test363135280.972WERdatasetSntWrdCorrSubDelInsErrS.Errinfer/dev1584158496.53.50.00.03.53.5infer/test3631363197.22.80.00.02.82.8从表中可以读出几点全部错误都是替换Sub没有删除/插入——与单 token 输出结构必然导致的 DelIns0 一致raw 特征组略优于 fbank_pitch 组test 2.4% vs 2.8%差距很小test 集3631 条明显大于 dev1584 条符合 2/4/9 的划分比例约 1:2:4.5。复现注意事项与适用边界随机划分的不可复现性如 README 所述划分依赖os.listdir()顺序与洗牌跨环境结果可能有微小波动。README 建议跑多次实验取平均准确率而非追求单点可复现若要确定性划分需自行修改 local/data_prep.py 中的排序/切分逻辑仓库只读请在本地副本中修改。运行前提需要 soxdata_prep.py通过command -v sox定位fbank_pitch特征提取依赖 Kaldi 工具链asr.sh 中fbank_pitch分支注释为[Require Kaldi]数据约 2.1 GB 且来自 FTP 源下载环境需放行 FTP。适用场景该 recipe 展示了 ESPnet2 如何用通用 ASR 流程 单 token 文本实现低资源语音命令/意图识别。其设计单 token 参考、accuracy 选模、greedy 解码、语速扰动 SpecAugment可以直接迁移到其他小型命令词表任务但训练/测试集规模1584/3631 条决定了它只能作为流程与配置参考不构成大规模识别系统的性能基线。相关文件索引文件作用egs2/grabo/asr1/README.md数据集文献、随机划分说明与两组实验结果报告egs2/grabo/asr1/run.sh一键训练/推理入口定义全部命令行参数egs2/grabo/asr1/local/data.sh数据下载、解包与 data 目录构建egs2/grabo/asr1/local/data_prep.pyXML 命令解析、2/4/9 随机划分、sox 重采样管道egs2/grabo/asr1/conf/train_asr.yamlConformer 训练超参、SpecAugment 配置egs2/grabo/asr1/conf/decode_asr.yaml纯 Attention greedy 解码配置egs2/grabo/asr1/conf/fbank.conf / conf/pitch.conf16 kHz 下 80 维 Fbank 与基频参数egs2/grabo/asr1/local/score.sh / local/score.py分类准确率统计与汇总egs2/grabo/asr1/db.sh语料路径变量GRABOdownloads赞分享人工智能语音音频深度学习NLP【免费下载链接】espnetEnd-to-End Speech Processing Toolkit项目地址https://gitcode.com/gh_mirrors/es/espnet点击查看免费下载相关推荐ESPnet2 SPGispeech ASR Recipe 详解Conformer RNN-LM 混合解码的端到端语音识别训练与结果解读ESPnet2 SPGispeech ASR Recipe 详解Conformer RNN LM 混合解码的端到端语音识别训练与结果解读 本文基于 ESP人工智能语音音频深度学习NLPESPnet2 瑞士法语多音词语料 ASR 实战Conformer 端到端语音识别 Recipe 与结果复盘ESPnet2 瑞士法语多音词语料 ASR 实战Conformer 端到端语音识别 Recipe 与结果复盘 本篇基于 ESPnet 仓库中 egs2/pol人工智能语音音频深度学习NLPESPnet2 端到端语音处理实战教程Recipe 体系、训练配置、流式 ASR 与 Transducer 模型全解析ESPnet2 端到端语音处理实战教程Recipe 体系、训练配置、流式 ASR 与 Transducer 模型全解析 导读 本文是基于 ESPnet 仓库人工智能语音音频深度学习NLP上一篇pytest 6.2.5 发布解析bug-fix 版本、Python 3.10 支持与 pluggy 1.0 兼容性升级指南下一篇unity-mcp 中 unity_reflect 工具全解析用实时反射校验 Unity C API告别过时的训练数据创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

相关推荐

WinForm+SQL Server酒店管理系统实战指南
WinForm+SQL Server酒店管理系统实战指南

简介:这是一套基于C# WinForm与SQL Server开发的酒店管理系统完整毕设项目,面向计算机类专业在校生、教师及初级开发者,适用于课程设计、毕业设计、项目实训与.NET桌面应用入门实践。资源包含170个文件,以63个C#源码文件&#xff… · 2026/9/25 17:56:17

第37篇-云原生与微服务架构-新技术架构考点
第37篇-云原生与微服务架构-新技术架构考点

【软考高级系统分析师全链路通关实战】第 37 篇:云原生与微服务架构——新技术架构考点 本系列定位:面向有开发经验、从零备考软考高级「系统分析师」的工程师,以《系统分析师教程(第 2 版)》为主线,按「综… · 2026/9/25 17:56:17

【2026年12月国内外各地国际学术会议推荐】数据科学、通信工程、计算机视觉、艺术文化、交通安全、智能系统、人机交互、航空航天工程、控制科学、环境科学、科技创新、高性能计算、机电工程等主题可选!...
【2026年12月国内外各地国际学术会议推荐】数据科学、通信工程、计算机视觉、艺术文化、交通安全、智能系统、人机交互、航空航天工程、控制科学、环境科学、科技创新、高性能计算、机电工程等主题可选!...

年末12月是科研成果收官、论文投稿冲刺的关键窗口期,也是广大学者积累学术成果、开展学术交流的黄金阶段。为帮助各领域科研人员高效筛选适配的投稿渠道,特此整理2026年12月国内外各地国际学术会议清单。本次会议资源覆盖面极广,涵盖数据科学… · 2026/9/25 17:56:05

【信息科学与工程学】【通信工程】第二百四十篇 IPv4/IPv6 功能点、特性和算法及 IPv4→IPv6 迁移特性03
【信息科学与工程学】【通信工程】第二百四十篇 IPv4/IPv6 功能点、特性和算法及 IPv4→IPv6 迁移特性03

编号 分类 功能/特性 支撑结构/层级 现象 数学分析与参数设计 特征分析 1353 广电FTTH/组播 IPv4 MSDP 组播源发现 vs IPv6 嵌入式RP (Embedded RP) vs 双栈源发现 省干ASBR、RP、BGP、Anycast RP 跨域组播源发现:IPv4用MSDP在RP间交换SA,IPv6用嵌入式RP将RP地址编… · 2026/9/25 18:24:45

fetchEventSource与fetch流式请求实战:AbortSignal复用引发的failed to fetch排查
fetchEventSource与fetch流式请求实战:AbortSignal复用引发的failed to fetch排查

1. 先交代背景:我是怎么踩进这个坑的最近在做一个 AI 对话前端改造,需要把大模型回答从“等半天一次性吐出来”改成“边生成边渲染”的流式效果。需求本身不复杂,但落地时却让我在fetchEventSource和原生fetch之间反复横跳,折腾了… · 2026/9/25 18:24:39

eWebEditor v8.0 老版富文本编辑器部署配置与二次开发实战
eWebEditor v8.0 老版富文本编辑器部署配置与二次开发实战

简介:eWebEditor v8.0 是一套基于浏览器的所见即所得在线网页编辑器完整程序包,面向网站开发者、内容管理系统集成人员以及需要在线内容编辑功能的技术运维者。资源共606个文件,压缩包约4.29MB,包含ASP动态脚本、JavaScript交互逻… · 2026/9/25 18:24:39

企业级Agent平台落地:从超级个体到超级团队的工程实践
企业级Agent平台落地:从超级个体到超级团队的工程实践

1. 从单兵作战到团队协同:企业级 Agent 平台要解决的真问题过去一年,我接触过不少团队在内部推 AI 编程助手,几乎都走过同一条曲线:前两周大家兴致勃勃,每个人都在自己的编辑器里装插件、配模型、写提示词,… · 2026/9/25 18:24:02

机器人防撞和防跌落,TOF安装方式能照搬吗?
机器人防撞和防跌落,TOF安装方式能照搬吗?

有客户提了一个需求:产品用在户外,需要做"边缘检测"——机器人走到平台边缘或台阶前要能停下来。他问TOF传感器能不能做这个。这个问题看起来跟"前方避障"差不多——都是测距、都是判断有没有东西。但"防跌落(边缘检… · 2026/9/25 18:23:56

OpenMontage:本地部署的AI剪辑Agent实战指南
OpenMontage:本地部署的AI剪辑Agent实战指南

1. 这不是“AI剪视频”,而是让AI真正当导演:OpenMontage实测前必须厘清的三件事你搜“AI Agent 能不能独立做完一条视频”,刷出来的答案大概率是两种:一种说“能,一键生成,秒出片”,另一种说“不… · 2026/9/25 18:23:56

数值优化(Numerical Optimization)学习系列-03-共轭梯度方法(Conjugate Gradient)
数值优化(Numerical Optimization)学习系列-03-共轭梯度方法(Conjugate Gradient)

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/25 1:00:31

创维E900V22D刷机全攻略:S905L3SB芯片兼容性解析与救砖实战
创维E900V22D刷机全攻略:S905L3SB芯片兼容性解析与救砖实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/25 1:00:31

MQTT协议原理与Broker服务器搭建实战:从Mosquitto到EMQX
MQTT协议原理与Broker服务器搭建实战:从Mosquitto到EMQX

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/25 1:00:37

了解更多?预约专属演示

我们的顾问将为您一对一讲解产品与方案

企业微信二维码