尧图精选

NeMo Speech 五分钟上手实战:ASR 转录、Magpie TTS 合成、说话人分离与 SpeechLM2 语音大模型一站式指南

🕒 发布时间:2026/9/13 11:19:00 📁 来源:尧图网络
NeMo Speech 五分钟上手实战ASR 转录、Magpie TTS 合成、说话人分离与 SpeechLM2 语音大模型一站式指南【免费下载链接】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导读本文基于 NeMo Speech 官方《Ten Minutes》快速上手指南docs/source/starthere/ten_minutes.rst整理而成带你在约 50 行 Python 代码内完成四大核心任务的端到端实操用 Parakeet 系列模型将音频转写为文本含逐词时间戳、用 Magpie TTS 从文本合成多语言语音、用 Sortformer 模型对多人会议音频进行说话人分离以及用 Canary-Qwen 语音语言模型执行语音进、文本出的生成式推理。读完本文你将掌握 NeMo Speech 全部核心能力的调用方式、关键参数语义及其底层实现原理可直接迁移到自己的推理脚本中。前提开始前请先完成 NeMo Speech 的安装参见安装指南。文中所有模型均通过from_pretrained从 Hugging Face 拉取预训练权重首次运行需联网下载。1. 语音转录ASR三行代码把音频变成文字Automatic Speech RecognitionASR将语音转换为文本。NeMo Speech 的Parakeet系列模型是该方向的主力模型。下面从最简调用到带时间戳再到命令行批量处理逐步展开。1.1 最简转录3 行代码import nemo.collections.asr as nemo_asr asr_model nemo_asr.models.ASRModel.from_pretrained(nvidia/parakeet-tdt-0.6b-v2) transcript asr_model.transcribe([audio.wav])[0].text print(transcript)要点说明ASRModel.from_pretrained(...)是 NeMo 统一的模型加载入口nvidia/parakeet-tdt-0.6b-v2为 Parakeet TDTToken-and-Duration Transducer架构的 0.6B 参数版本transcribe接受单个文件路径、路径列表、np.ndarray/torch.Tensor音频数组甚至 manifest 文件路径见 ctc_models.py 的签名定义返回结果是按输入顺序排列的假设列表[0].text取第一条假设的转写文本。1.2 带时间戳转录知道每个词何时说出hypotheses asr_model.transcribe([audio.wav], timestampsTrue) for stamp in hypotheses[0].timestamp[word]: print(f{stamp[start]}s - {stamp[end]}s : {stamp[word]})实现细节值得了解当timestampsTrue时transcribe内部会自动开启解码策略中的compute_timestamps并强制return_hypothesesTrue见 ctc_models.py时间戳按word、segment、char三个粒度挂在假设对象的timestamp字段上每个词包含start/end秒与word文本transcribe还支持batch_size越大吞吐越高、显存占用越大、num_workers、channel_selector多声道选通道或average平均混音等参数批量推理场景非常实用。1.3 命令行批量转录python examples/asr/transcribe_speech.py \ pretrained_namenvidia/parakeet-tdt-0.6b-v2 \ audio_dir./my_audio_files/对应脚本 examples/asr/transcribe_speech.py 的配置规则如下模型二选一model_path本地.nemo检查点或pretrained_nameNGC 注册表/ Hugging Face 预训练名两者不可同时为空数据二选一audio_dir音频目录或dataset_manifestNeMo manifest 文件两者不可同时为空脚本内部会校验这四项约束不满足直接抛ValueError见 transcribe_speech.py。2. 语音合成TTS用 Magpie TTS 从文本生成自然语音Text-to-SpeechTTS从文本生成自然音频。NeMo Speech 的Magpie TTS是基于 codec神经音频编解码的多语言模型支持多说话人、多语言并可通过说话人索引切换音色。from nemo.collections.tts.models import MagpieTTSModel import soundfile as sf # 加载多语言 357M 模型来自 Hugging Face model MagpieTTSModel.from_pretrained(nvidia/magpie_tts_multilingual_357m) model.eval() # 生成语音 audio, audio_len model.do_tts( transcriptHello! Welcome to NeMo Speech AI., languageen, ) # 保存为文件 sf.write(output.wav, audio[0].cpu().numpy(), 22050) print(Speech saved to output.wav)do_tts是 magpietts.py 中为单句合成提供的便捷方法其核心参数如下参数默认值说明transcript必填待合成的原始文本languageen语言代码用于文本归一化与 tokenizer 选择常见取值如en、de、es等具体以模型 tokenizer 配置为准apply_TNFalse是否启用nemo_text_processing做文本归一化如数字、日期展开开启前需安装对应依赖use_cfgTrue是否使用 Classifier-Free Guidance无分类器引导提升合成质量与稳定性speaker_indexNone内置说话人索引取值[0, num_baked_speakers - 1]None时使用说话人 0返回值说明来自源码 docstringaudio生成的波形形状为(1, T_audio)audio_len音频采样点数形状为(1,)该方法仅支持内置说话人baked context embedding的语音合成不支持自定义音色条件注入自定义音色请改用infer_batch等高级接口若模型没有内置说话人 embeddingdo_tts会直接抛出ValueError。此外源码中还包含一个实用细节当language ja日语时方法会自动移除文本中的空格以规避日语归一化器的已知问题见 magpietts.py。3. 说话人分离Diarization回答谁在什么时候说话说话人分离解决多说话人音频中的who spoke when问题。NeMo Speech 的Sortformer端到端模型可直接输出带说话人标签的语音片段。from nemo.collections.asr.models import SortformerEncLabelModel diar_model SortformerEncLabelModel.from_pretrained(nvidia/diar_streaming_sortformer_4spk-v2) diar_model.eval() segments diar_model.diarize(audio[meeting.wav], batch_size1) for seg in segments[0]: print(seg) # (begin_seconds, end_seconds, speaker_index)SortformerEncLabelModel定义于 sortformer_diar_models.pydiarize是其一键推理入口sortformer_diar_models.py关键参数audio单个/多个音频文件路径或 manifest 文件路径batch_size推理批大小越大吞吐越高、显存占用越大include_tensor_outputs是否额外返回原始说话人活跃度概率张量postprocessing_yaml自定义后处理参数的 YAML 路径override_configDiarizeConfig配置对象用于覆盖默认后处理行为verbose是否显示 tqdm 进度条。输出格式约定返回[[begin_seconds, end_seconds, speaker_index], ...]的片段列表若include_tensor_outputsTrue则返回(片段列表, 概率张量列表)的元组见 sortformer_diar_models.py。提示模型名中的streaming与4spk分别代表支持流式推理与面向 4 说话人场景优化选用时请结合自己的会议规模评估。4. 语音大模型SpeechLM2Canary-Qwen 的语音进、文本出生成SpeechLM2 为 LLM 注入语音理解能力。Canary-Qwen将 ASR 编码器与 Qwen LLM 结合支持把音频作为对话输入参与生成式推理。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()))这套用法与 salm.py 中generate的高层 API 完全对应理解几个核心概念audio_locator_tag音频占位符 token源码中取自self.cfg.audio_locator_tag见 salm.py。它在提示词中出现的位置决定音频嵌入被插入文本序列的哪个位置模型初始化时会将其注册为特殊 tokensalm.pyprompts支持多轮对话结构role/content/audio每个 prompt 中audio_locator_tag的出现次数必须与audio列表中的音频数一致一个 prompt 可携带多段音频max_new_tokens控制生成最大新 token 数示例中128适合转写类短任务更精细的控制可传入 Hugging FaceGenerationConfig对象自定义解码策略例如GenerationConfig(do_sampleTrue, num_beams5)低层 API将音频预加载为(batch, time)的float32张量并通过audios/audio_lens传入适合对加载流程有定制需求的场景见 salm.py 的三种用法示例。由于generate返回的是 token id 张量最后需用model.tokenizer.ids_to_text(...)解码为可读文本——这一步是新手最容易遗漏的收尾操作。5. 四大任务背后的统一设计NeMo 模型基座观察前四节可以发现一条统一规律所有任务都走from_pretrained加载 任务专属推理方法的模式。这与 NeMo 的模型基座设计一脉相承ASRModel、MagpieTTSModel、SortformerEncLabelModel继承自ModelPTNeMo 可训练模型基类统一提供from_pretrained、保存/恢复、导出等能力SALM则基于LightningModuleHFHubMixin实现salm.py与 Hugging Face 生态深度互通便于复用 LLM 的 chat template 与GenerationConfig解码体系推理方法高度一键化transcribeASR、do_ttsTTS、diarize分离、generateSpeechLM2输入输出约定统一、上手成本低。这种统一基座 任务专属接口的设计使得从单任务原型到多任务流水线如先 VAD 切段 → 再 ASR 转写 → 最后 diarization 归属说话人的拼装变得非常自然。6. 下一步从快速上手到深入进阶到这里你已经跑通了 NeMo Speech 的全部核心能力。继续深入的方向与对应仓库文档如下key_concepts.rst — 理解这些模型背后的语音 AI 核心概念choosing_a_model.rst — 针对自己的场景语言、实时性、显存预算选择合适的模型docs/source/asr/ — 完整的 ASR 文档含说话人分离与识别、流式解码、CTC/Transducer/Hybrid 架构等docs/source/tts/ — 完整的 TTS 文档FastPitch、HiFi-GAN、Magpie 系列等docs/source/asr/speaker_diarization/ — 说话人分离与识别的深入文档tutorials.rst — 配套的 Jupyter Notebook 教程。如果你需要运行更完整的参考实现仓库中的 examples/asr/transcribe_speech.py含并行转录脚本transcribe_speech_parallel.py、examples/tts/magpietts.py 以及 examples/speechlm2/ 目录下的salm_eval.py、salm_generate.py都是可直接修改运行的实战入口可作为本文示例代码的工程化延伸。【免费下载链接】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),仅供参考
上一篇/下一篇内容由系统自动关联 返回资讯列表 →