恒美微站 Logo 恒美微站
  • 首页
  • 关于我们
  • 建站服务
  • 主题模板
  • 案例展示
  • 资讯中心
  • 联系我们

NeMo ASR 推理完全指南:检查点加载、批量转写、时间戳对齐、长音频与流式推理实战

  • 首页
  • 资讯中心
  • /
  • NeMo ASR 推理完全指南:检查点加载、批量转写、时间戳对齐、长音频与流式推理实战

相关资讯

研究型AI工作流:静默协同与可验证科研自动化 2026/9/13 6:31:22
六款免费公众号排版编辑器实测:哪款最适合你? 2026/9/13 6:26:22
Authelia 详解:authelia storage encryption rotate hmac otp 命令——TOTP 历史 HMAC 密钥轮换的用法与底层实现 2026/9/13 6:26:22

最新资讯

Hindsight × Strands Agents 集成指南:用 hindsight-strands 为 Agent 注入持久记忆
C盘爆满?150GB异常文件排查与清理实战指南
Matlab模拟船舶操纵运动模型:从运动方程到旋回试验
Zulip 第三方依赖管理:从 tools/provision 到锁定文件的完整版本控制机制
大数据分析技术栈与电商价格监控实战
配好一键重装快捷键:reinstall alias 实用指南

今日推荐

AI SDK Harness 依赖更新指南:掌握 harness 包 SDK 依赖的升级、桥接同步与一致性校验
Refine v5 Ant Design NumberField 组件实战:基于 Intl 的本地化数字格式化
Flutter应用改名全指南:从Android到iOS的配置与工具实践

本周热门

AI SDK Harness 依赖更新指南:掌握 harness 包 SDK 依赖的升级、桥接同步与一致性校验
Refine v5 Ant Design NumberField 组件实战:基于 Intl 的本地化数字格式化
Flutter应用改名全指南:从Android到iOS的配置与工具实践

本月精选

自研推理加速器Redwood:两周内实现PyTorch模型高效部署的实战教程
V4L2摄像头采集实战:从camera_client.rar到出图全流程解析
从“谁发明了钢琴键”到知识问答智能体:RAG与记忆工程实践

NeMo ASR 推理完全指南:检查点加载、批量转写、时间戳对齐、长音频与流式推理实战

发布时间:2026/9/13 6:31:22
NeMo ASR 推理完全指南:检查点加载、批量转写、时间戳对齐、长音频与流式推理实战 NeMo ASR 推理完全指南检查点加载、批量转写、时间戳对齐、长音频与流式推理实战【免费下载链接】SpeechA scalable generative AI framework built for researchers and developers working on Large Language Models, Multimodal, and Speech AI (Automatic Speech Recognition and Text-to-Speech)项目地址: https://gitcode.com/GitHub_Trending/nem/Speech本篇围绕 NeMoNVIDIA Speech的 ASR 推理文档docs/source/asr/inference.rst展开系统讲解如何加载 ASR 检查点、调用model.transcribe()完成批量转写、获取词级/段级时间戳、处理超长音频、使用 Canary 多任务模型的 Prompt 槽位以及统一流式推理 Pipeline API。读完本文后你可以独立完成从本地.nemo文件加载到生产级转写脚本编写的全部操作并理解每个配置项在 TranscriptionMixin 源码中的实际作用。一、加载检查点Loading Checkpoints推理的第一步是把模型恢复到可运行状态NeMo 提供两条路径从本地文件加载——适用于已有下载好的.nemo检查点import nemo.collections.asr as nemo_asr model nemo_asr.models.ASRModel.restore_from(path/to/checkpoint.nemo)从 HuggingFace Hub 加载——from_pretrained会直接按名称拉取预训练模型model nemo_asr.models.ASRModel.from_pretrained(nvidia/parakeet-tdt-0.6b-v2)对于特定架构也可以使用更具体的模型类例如多任务 AED 模型EncDecMultiTaskModel定义于 aed_multitask_models.py或带 Prompt 的流式模型EncDecRNNTBPEModelWithPrompt定义于 rnnt_bpe_models_prompt.py。二、基本转写Basic TranscriptionPython API 与输入格式model.transcribe()是所有 ASR 模型的统一入口其签名定义在 TranscriptionMixin.transcribeoutputs model.transcribe(audio[file1.wav, file2.wav], batch_size2) print(outputs[0].text)audio参数接受四种形式文件路径字符串或路径列表、numpy 数组、PyTorch 张量、或 DataLoader 对象。文档明确要求音频必须为 16 kHz 单声道从源码 docstring 还可以看到一个实用的长度建议单个文件推荐长度为 5~25 秒当然在显存充足时也可以传入数小时长的文件。使用 Numpy/Tensor 输入例如从soundfile直接读取波形import soundfile as sf audio, sr sf.read(audio.wav, dtypefloat32) outputs model.transcribe([audio], batch_size1)命令行方式批量转写可以直接用仓库自带的 transcribe_speech.pypython examples/asr/transcribe_speech.py \ pretrained_namenvidia/parakeet-tdt-0.6b-v2 \ audio_dirpath_to_audio_dir这个脚本基于 Hydra 配置驱动除了pretrained_name/model_path二选一和audio_dir/dataset_manifest二选一之外还暴露了大量参数可从 TranscriptionConfig 数据类 直接确认batch_size32脚本默认值比 Python API 默认值更大、num_workers、presort_manifest按音频长度排序 manifest 以减少 padding默认 Truetimestamps请求贪心解码时间戳、return_hypotheses、compute_langsctc_decoding/rnnt_decoding/multitask_decoding三个子配置可分别覆盖各解码器策略promptCanary 等 Prompt 模型的槽位配置支持隐式单轮、显式单轮、显式多轮三种写法见 prompt 字段注释cuda、amp、compute_dtype、matmul_precision、allow_mps等设备与精度控制confidence输出 token/词级置信度、calculate_rtfx测量实时因子。批量生成器增量处理model.transcribe()内部已经通过 batching 处理大文件列表只有当你需要逐批增量处理结果例如每批立即落盘、避免所有输出驻留内存时才直接使用transcribe_generator定义于 transcription.py#L348config model.get_transcribe_config() config.batch_size 32 for batch_outputs in model.transcribe_generator(audio_files, override_configconfig): # write batch results to disk immediately ...从源码可以看到transcribe()本身就是一个包装器它调用transcribe_generator逐批产出结果再按 list/dict/tuple 结构累积合并L296-L346。因此override_config传入时必须携带_internal字段InternalTranscribeConfig实例否则源码会显式抛出ValueError。TranscribeConfig 字段详解TranscribeConfig是一个 dataclassL58-L72各字段默认值与文档表格一致逐一说明如下字段默认值说明batch_size4推理批大小。越大吞吐越好但显存占用越高return_hypothesesFalse为 True 时返回带时间戳、分数等信息的Hypothesis对象而非纯字符串use_lhotseTrue推理时是否使用 Lhotse 数据加载路径num_workersNoneDataLoader 工作进程数channel_selectorNone从多声道音频中选择声道0 起始索引average表示跨声道取平均timestampsNone为 True 时返回词/段级时间戳需要return_hypothesesTrue为 None 时保持change_decoding_strategy()设置的既有状态augmentorNone可选的增强配置转写期间对音频施加扰动verboseTrue是否显示 tqdm 进度条对于多任务模型CanaryMultiTaskTranscriptionConfig继承自TranscribeConfig并扩展了 Prompt 相关字段aed_multitask_models.py#L111-L131prompt显式单轮/多轮 Prompt 列表text_field默认answer与lang_field默认target_lang从 manifest 中读取文本与语言字段enable_chunking默认 True对长音频启用分块并行处理。注意从 EncDecMultiTaskModel.transcribe 的实现看chunking 真正生效的条件是“只有一条音频或batch_size 1”且模型带时间戳子模型启用 chunking 时交叉注意力分数return_xattn_scores将不再返回。获取对齐信息Alignmentshyps model.transcribe(audio[file.wav], return_hypothesesTrue) alignments hyps[0].alignmentsHypothesis对象定义于 rnnt_utils.py除了alignments还携带时间戳、分数等信息是后续做重打分、时间戳后处理的基础。三、时间戳TimestampsParakeet 系列模型CTC/RNNT/TDT支持词、段或字符级时间戳。简单用法——直接传timestampsTruehypotheses model.transcribe([audio.wav], timestampsTrue) for stamp in hypotheses[0].timestamp[word]: print(f{stamp[start]}s - {stamp[end]}s : {stamp[word]}) for stamp in hypotheses[0].timestamp[segment]: print(f{stamp[start]}s - {stamp[end]}s : {stamp[segment]})高级配置——通过修改解码策略显式控制对齐保留与分隔符Transducer 的 greedy/beam/TSD/ALSD/mAES 解码策略参数详见 Configs 文档CTC/AED 解码类见 API 参考from omegaconf import open_dict decoding_cfg model.cfg.decoding with open_dict(decoding_cfg): decoding_cfg.preserve_alignments True decoding_cfg.compute_timestamps True decoding_cfg.segment_seperators [., ?, !] decoding_cfg.word_seperator model.change_decoding_strategy(decoding_cfg) hypotheses model.transcribe([audio.wav], return_hypothesesTrue) timestamp_dict hypotheses[0].timestamp time_stride 8 * model.cfg.preprocessor.window_stride for stamp in timestamp_dict[word]: start stamp[start_offset] * time_stride end stamp[end_offset] * time_stride word stamp[char] if char in stamp else stamp[word] print(f{start:0.2f} - {end:0.2f} : {word})两点实现细节值得注意其一time_stride 8 * window_stride中的因子 8 来自前端特征提取Fbank 帧移经 8 帧下采样进入编码器因此帧偏移需要换算回秒其二change_decoding_strategy()在各模型类中均有实现例如 CTC 模型、RNNT BPE 模型、Hybrid RNNT/CTC 模型它会重建解码器子模块并重置解码状态修改解码配置后必须调用它才会生效。四、长音频推理Long Audio Inference对于超出显存的超长音频尤其是 Conformer 的二次注意力开销文档给出三种策略1. 缓冲/分块推理Buffered / Chunked Inference把音频切成重叠分块再合并输出配套脚本位于 examples/asr/asr_chunked_inference内含aed/与rnnt/两套实现。2. 局部注意力推荐用于 Fast Conformer切换为 Longformer 风格的 localglobal 注意力使超过 1 小时音频的推理成本变为线性model nemo_asr.models.ASRModel.from_pretrained(nvidia/parakeet-ctc-1.1b) model.change_attention_model( self_attention_modelrel_pos_local_attn, att_context_size[128, 128] )对应命令行经 speech_to_text_eval.py 的model_change子配置python examples/asr/speech_to_text_eval.py \ (...other parameters...) \ model_change.conformer.self_attention_modelrel_pos_local_attn \ model_change.conformer.att_context_size[128, 128]change_attention_model的实现在 ConformerEncoder它会在运行时替换编码器内部的自注意力模块并重建参数。3. 下采样内存优化对长到连下采样卷积模块都会 OOM 的极端文件启用下采样自动分块model.change_subsampling_conv_chunking_factor(1) # auto-chunk subsampling该方法在 mixins.py 中转发到下采样子模块的 change_subsampling_conv_chunking_factor使卷积逐段计算而不是一次性展开整段长序列。五、多任务推理CanaryCanary 系列多任务模型通过Prompt 槽位控制转写行为。模型类为EncDecMultiTaskModel其transcribe()额外接受**prompt关键字参数源码 L493-L540支持三种 Prompt 写法隐式单轮source_langlang等默认 role 为 user、显式单轮rolerole, slots{...}、显式多轮turns[{role: ..., slots: {...}}]。通过 manifest 驱动from nemo.collections.asr.models import EncDecMultiTaskModel canary EncDecMultiTaskModel.from_pretrained(nvidia/canary-1b-v2) decode_cfg canary.cfg.decoding decode_cfg.beam.beam_size 1 canary.change_decoding_strategy(decode_cfg) results canary.transcribe(manifest.json, batch_size16)通过直接参数驱动results canary.transcribe( audio[audio.wav], batch_size4, source_langen, target_langen, pncTrue, )强制单一语言输出对于多语言 Canary 模型显式同时设置source_lang与target_lang为同一语言即可约束模型只输出该语言results canary.transcribe( audio[audio.wav], source_langde, target_langde, )这样做可以防止语音学漂移phonetic drift即模型在一句话中途切换语言的现象。命令行下则通过prompt.source_langde prompt.target_langde传入见 transcribe_speech.py 的 prompt 注释。六、流式推理Streaming InferenceNeMo 在nemo.collections.asr.inference命名空间下提供统一的streaming-first Pipeline API覆盖两类实时 ASR 管线实现分别位于 cache_aware_ctc_pipeline.py、cache_aware_rnnt_pipeline.py、buffered_rnnt_pipeline.py、buffered_ctc_pipeline.py 等Buffered CTC/RNNT/TDT 管线对任意离线模型做重叠分块实现近实时增量输出Cache-aware CTC/RNNT 管线利用缓存的激活值每个音频帧只被处理一次效率更高。完整 walkthrough含逐流选项、EoU 端点检测、词级时间戳、逐流 biasing、ITN、语音翻译见教程 Streaming_ASR_Pipelines.ipynb。Prompt 条件化的多语言流式推理Prompt 条件化的 cache-aware 流式模型EncDecRNNTBPEModelWithPrompt与EncDecHybridRNNTCTCBPEModelWithPrompt在推理时通过target_lang选择语言 Prompt。cache-aware 仿真脚本 直接接受该参数python examples/asr/asr_cache_aware_streaming/speech_to_text_cache_aware_streaming_infer.py \ model_pathpath_to_nemo_checkpoint \ dataset_manifestpath_to_manifest \ target_langen-US \ decoder_typernnt \ strip_lang_tagstrue参数语义对应 脚本配置项target_langlang-code把整个 batch 固定到一种语言target_langauto则逐条从 manifest 的target_lang字段读取strip_lang_tagstrue从解码文本中移除xx-XX语言标签正则可通过lang_tag_pattern自定义decoder_typeHybrid 双解码器模型在ctc/rnnt之间切换脚本 L365-L387 展示了它如何路由到对应的 decoding 子配置并调用change_decoding_strategy。在 Python 中解码前调用一次set_inference_prompt即可锁定 Prompt实现见 mixins.py#L972model nemo_asr.models.EncDecRNNTBPEModelWithPrompt.restore_from(path/to/model.nemo) model.set_inference_prompt(en-US) # ... subsequent conformer_stream_step / streaming pipeline calls use this prompt ...七、Apple MPS 支持Apple M 系列 GPU 上的推理PyTorch 2.0需要环境变量回退开关与显式允许标志。transcribe_speech.py 的设备选择逻辑 印证了这一点当cuda为 None 且allow_mpstrue时才会回落到 MPS并打印“MPS 支持是实验性的绝大多数情况需设置PYTORCH_ENABLE_MPS_FALLBACK1”的警告PYTORCH_ENABLE_MPS_FALLBACK1 python examples/asr/speech_to_text_eval.py \ (...other parameters...) \ allow_mpstrue八、自定义推理脚本的执行流程编写自定义推理脚本时仓库建议遵循 examples/asr/README.md 中的执行流程图设备与精度设置 →setup_model加载 → 按模型类型选择ctc_decoding/rnnt_decoding/multitask_decoding并change_decoding_strategy→prepare_audio_data准备数据manifest 排序→get_transcribe_config()构造 override 配置 →torch.no_grad()下调用transcribe(audio, override_config...)→write_transcription落盘。transcribe_speech.py 的 main 函数 就是这条流程的完整参考实现其中calculate_rtfx还演示了如何用SimpleTimer与 manifest 的duration字段测量实时因子 RTFx。小结NeMo 的 ASR 推理体系以TranscribeConfigTranscriptionMixin为核心抽象transcribe()/transcribe_generator()统一了 CTC、RNNT、TDT 与多任务 AED 模型的离线调用方式时间戳、对齐、置信度通过解码策略配置与Hypothesis对象暴露长音频问题由分块推理、局部注意力与下采样分块三件套解决Canary 与流式 Prompt 模型则通过source_lang/target_lang与set_inference_prompt完成语言控制。所有关键实现均可在上述源码路径中逐一核对。【免费下载链接】SpeechA scalable generative AI framework built for researchers and developers working on Large Language Models, Multimodal, and Speech AI (Automatic Speech Recognition and Text-to-Speech)项目地址: https://gitcode.com/GitHub_Trending/nem/Speech创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

关于恒美微站

恒美微站专注于为个体商户、工作室提供极简自助建站服务,让每个人都能轻松拥有专业网站。

快速链接

  • 关于我们
  • 建站服务
  • 主题模板
  • 案例展示
  • 资讯中心

服务项目

  • 可视化建站
  • 拖拽编辑
  • 主题定制
  • SEO 优化
  • 网站托管

联系方式

  • 📍 地址:北京市朝阳区建国路 88 号
  • 📞 电话:400-888-8888
  • ✉️ 邮箱:info@hmyw.cn
  • 🕐 时间:周一至周日 9:00-18:00

© 2024 恒美微站 hmyw.cn 版权所有 | 京 ICP 备 12345678 号