新闻详情

新闻详情

首页 / 资讯中心 / 详情

如何用 NeMo SpeechLM2 加载 SALM 模型对音频内容提问和转写

发布时间:2026/9/14 19:28:33来源:尧图网络
如何用 NeMo SpeechLM2 加载 SALM 模型对音频内容提问和转写
如何用 NeMo SpeechLM2 加载 SALM 模型对音频内容提问和转写【免费下载链接】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本文的目标很具体在 NeMoNeMo Speech 仓库nemo-toolkit的 SpeechLM2 集合中加载一个 SALMSpeech-Augmented Language Model语音增强语言模型模型然后做两件事——对一段音频转写或把音频放进对话让模型就内容作答。SALM 把预训练 ASR 编码器音频感知模块接到预训练 LLM 上输入是音频加文本 prompt输出是文本回复因此同一套generate()调用既能转写也能提问。适用前提文档明确说明 SpeechLM2 仍在活跃开发中代码可能持续变化需要先安装一个兼容的 PyTorch 环境再安装带speechlm2依赖的 NeMo。准备环境官方文档给出的安装方式见 docs/source/speechlm2/intro.rst# 先装好你选择的兼容 PyTorch 环境然后 uv pip install nemo-toolkit[speechlm2] # 或者从源码检出目录安装可编辑模式 uv pip install -e .[speechlm2]这会装齐speechlm2依赖包括 NeMo Automodel。装完后验证方式就是能成功执行import nemo.collections.speechlm2。加载 SALM 模型SALM 通过nemo.collections.speechlm2下的from_pretrained加载参数可以是本地 checkpoint 路径也可以是 HuggingFace 模型名。文档示例中使用的是nvidia/canary-qwen-2.5bimport nemo.collections.speechlm2 as slm # 加载预训练 SALM 模型 model slm.models.SALM.from_pretrained(nvidia/canary-qwen-2.5b) model model.eval()如果 checkpoint 是可信的第三方模型仓库且需要执行自定义代码默认是关闭远程代码的文档要求在运行时显式传入并锁定 revision见 docs/source/speechlm2/models.rstmodel slm.models.SALM.from_pretrained( trusted/model, revisionreviewed-commit-sha, trust_remote_codeTrue, )trust_remote_code写在 checkpoint 配置里的值会被忽略这是防止模型仓库自行启用下载代码的执行权限。方式一加载音频文件后转写或提问这是最完整的用法来自 docs/source/speechlm2/intro.rst。核心机制prompt 里的model.audio_locator_tag音频定位标签如 SALM 默认配置中的|audioplaceholder|是一个特殊 token推理时会被替换成音频嵌入。import torch import soundfile as sf from nemo.collections.audio.parts.utils.transforms import resample import nemo.collections.speechlm2 as slm model slm.models.SALM.from_pretrained(path/to/pretrained_checkpoint).eval() # 读取音频文件 audio_path path/to/audio.wav audio_signal, sample_rate sf.read(audio_path) audio_signal torch.tensor(audio_signal).unsqueeze(0) # 采样率不是 16kHz 时重采样文档注释多数模型期望 16kHz 音频 if sample_rate ! 16000: # Most models expect 16kHz audio audio_signal resample(audio_signal, sample_rate, 16000) sample_rate 16000 # 音频搬到模型所在设备并记录时长帧数 audio_signal audio_signal.to(model.device) audio_len torch.tensor([audio_signal.shape[1]], devicemodel.device) # 构造 prompt音频定位标签在推理时会被替换为音频嵌入 prompt [{role: user, content: f{model.audio_locator_tag}}] # 生成回复 with torch.inference_mode(): output model.generate( prompts[prompt], audiosaudio_signal, audio_lensaudio_len, generation_configNone # 可在此自定义生成参数 ) # 把 token 解码回文本 response model.tokenizer.ids_to_text(output[0]) print(fModel response: {response})两点说明想转写时把 prompt 内容换成fTranscribe the following: {model.audio_locator_tag}即可这是 源码 docstring 和 docs/source/starthere/ten_minutes.rst 中给出的标准问法想就音频内容提问就换成任意问题文本例如 这个音频里提到了哪个城市。prompt 中audio_locator_tag出现的次数必须与提供的音频数量一致generate()文档明确The number of audios must correspond to the number of occurrences ofaudio_locator_tagin prompts。验证方式response打印出的非空文本即模型回复转写场景下可将其与音频的实际内容对照。文档没有给出固定的预期输出回复质量取决于所选 checkpoint。方式二直接把音频路径写进 prompt简化写法SALM 的高层 API 允许在 prompt 的 message 里直接带audio字段省掉手动读音频和重采样的步骤。这是 docs/source/starthere/ten_minutes.rst 中的用法from nemo.collections.speechlm2.models import SALM model SALM.from_pretrained(nvidia/canary-qwen-2.5b) answer_ids model.generate( prompts[[{ role: user, content: fTranscribe the following: {model.audio_locator_tag}, audio: [speech.wav], }]], max_new_tokens128, ) print(model.tokenizer.ids_to_text(answer_ids[0].cpu()))注意不能两种方式混用通过prompts传音频和通过audios/audio_lens参数传音频是互斥的源码中会直接断言报错Audios cannot be provided via prompts and audios/audio_lens arguments simultaneously。此外max_new_tokens是透传给底层 LLMgenerate的生成参数控制最大生成长度。可选分支用 salm_eval.py 跑批量评测如果你要的不是单条问答而是对整个测试集批量转写并计算指标仓库提供了 examples/speechlm2/salm_eval.py。输入是一个 Lhotse 格式的 ASR manifestCutSet 可解析的文件其中包含每条音频的参考文本python examples/speechlm2/salm_eval.py \ pretrained_name/path/to/checkpoint \ inputs/path/to/test_manifest \ batch_size64 \ max_new_tokens128 \ output_manifestgenerations.jsonl参数说明均来自脚本自身的配置类inputs是 Lhotse manifest 路径batch_size/max_new_tokens控制批大小与最大生成长度output_manifest是逐条输出的 JSONL 文件user_prompt/system_prompt可选用于自定义提问方式不传时 prompt 就是纯音频占位符即转写模式。脚本会自动判断 checkpoint 是否为SALMAutomodel读取config.json里的use_nemo_automodel字段。验证方式有两处日志会输出整体指标WER: xx.xx% [ins... del... sub...]和RTFx: x.x音频总时长除以推理耗时。manifest 里没有参考文本时 WER 无意义此时只看 JSONL 输出即可。output_manifest默认generations.jsonl中每行是一条{id, duration, text, pred_text}text是参考文本pred_text是模型预测。限制与已知边界分布式推理仅限 SALMAutomodelsalm_eval.py支持tp_size/ep_size/pp_size/cp_size参数配合torchrun做模型并行但文档与代码都明确普通SALM走分布式会直接抛出RuntimeError需要use_nemo_automodeltrue或从 SALMAutomodel 导出的 checkpoint。单卡/单进程推理则无此限制。长音频分块salm.yaml与salm_automodel.yaml中的encoder_chunk_size_seconds可把超过指定时长的音频切块编码后再拼回一条序列null表示直接整段编码。示例配置 examples/speechlm2/conf/salm.yaml 默认为null。集合状态intro 文档 开头注明 SpeechLM2 处于活跃开发期API 和行为可能变化本文所有示例均以当前仓库中的 docs/source/speechlm2/intro.rst 与 docs/source/speechlm2/models.rst 为准。本文只覆盖 SALMHuggingFace Transformers 后端。若你要加载的是基于 NeMo Automodel 的SALMAutomodel变体加载入口是slm.models.SALMAutomodel.from_pretrained(...)且需要先通过setup_distributed(...)解析并行拓扑推理调用与 SALM 相同。【免费下载链接】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),仅供参考
网站建设高端定制企业官网
RELATED

相关资讯

更多精彩内容,欢迎继续阅读

较早相关资讯

最新相关资讯

marimo 怎么配置 LLM 提供商和模型路由? 2026/9/14 20:22:37

marimo 怎么配置 LLM 提供商和模型路由?

marimo 怎么配置 LLM 提供商和模型路由? 【免费下载链接】marimo A reactive notebook for Python — run reproducible experiments, query with SQL, execute as a script, deploy as an app, and version with git. Stored as pure Python. All in a modern, AI-…

阅读更多 →
无人机集群动态协同路径规划与MATLAB实现 2026/9/14 20:22:37

无人机集群动态协同路径规划与MATLAB实现

1. 项目背景与核心挑战无人机集群在动态环境中的协同作业已经成为当前智能系统领域的前沿研究方向。想象一下,当十几架无人机需要在城市峡谷中穿梭执行搜索任务,既要避开突然出现的飞鸟群,又要实时调整路线避开其他无人机,还要保证…

阅读更多 →
WebService与HTTP接口技术对比及应用场景分析 2026/9/14 20:22:37

WebService与HTTP接口技术对比及应用场景分析

1. WebService与HTTP接口的本质差异在分布式系统开发中,WebService和HTTP接口是两种常见的服务交互方式。虽然它们都基于网络通信,但设计理念和技术实现存在显著区别。我曾参与过多个企业级系统的服务集成项目,深刻体会到错误选择通信方式带来…

阅读更多 →
ADMM算法在多微电网协同优化中的应用与Matlab实现 2026/9/14 20:22:37

ADMM算法在多微电网协同优化中的应用与Matlab实现

1. 项目概述多微电网系统作为分布式能源的重要载体,正在成为电力系统低碳转型的关键技术路径。这个项目聚焦于解决多微电网间电能交互优化问题,创新性地将碳排放成本纳入目标函数,并采用交替方向乘子法(ADMM)实现分布式…

阅读更多 →
Java多线程编程:从基础到实战 2026/9/14 20:22:37

Java多线程编程:从基础到实战

1. Java多线程基础概念解析第一次接触Java多线程时,很多人会被各种术语和概念绕晕。其实理解多线程并不复杂,我们可以从生活中的例子入手。想象你正在一家快餐店点餐:收银员负责接单(主线程),后厨有多个厨师…

阅读更多 →
DEA效率评估与Matlab实现:从原理到实践 2026/9/14 20:19:37

DEA效率评估与Matlab实现:从原理到实践

1. 数据包络分析(DEA)基础与Matlab实现概述数据包络分析(Data Envelopment Analysis, DEA)作为一种非参数效率评估方法,自1978年由Charnes等人提出以来,已成为管理科学和运筹学领域的重要工具。我在工业效率…

阅读更多 →

今日资讯

本周资讯

本月资讯

看完文章仍有疑问?

联系尧图顾问,获取一对一建站咨询

立即免费咨询 📞 400-888-8888
📞