Fun-ASR-Nano + Transformers:先选对权重,再接入应用

2026-09-09 · 生态技术与应用 · 阅读约 7 分钟

在已有 Hugging Face 应用里接入语音识别,最容易踩的坑往往不是模型大小,而是把“同一模型家族”当成“同一种权重和接口”。Fun-ASR-Nano 已进入 Transformers 主线。这篇文章从 checkpoint、处理器到生成结果,解释如何把这次集成接到自己的应用中。

先确认安装包,不只看合并状态

PR #46180 于 2026-09-09 合并。当天核验的稳定版 5.16.1 还没有原生 fun_asr_nano 文件;源码包显示的 5.17.0.dev0 也不是下一稳定版发布承诺。请从固定版本接入指南安装明确的源码提交,不要只执行一次无版本约束的升级就假定已经兼容。

这种区别影响排障方向:未知模型类型可能是安装包未包含实现,不一定是 checkpoint 损坏;模型能下载也不代表所选运行时认识它。

同一模型家族,四条不同路径

应用已有的接口选择什么不要混淆
FunASR AutoModelFun-ASR-Nano-2512原始工具包路径;拆分引擎看对应文档。
Transformers processor / generateFun-ASR-Nano-2512-hf本篇的原生接口,不是 vLLM 的转换包。
原生 vLLM HTTP 服务Fun-ASR-Nano-2512-vllm使用独立运行时、模型格式及服务参数。
C++ / GGML 运行时与运行时匹配的 GGUF不是把 Transformers 目录改后缀。

这几个官方模型仓库位于 FunAudioLLM 下。原生 Transformers 路径加载 官方 -hf checkpoint,模型和处理器代码来自固定的 Transformers 安装,不需要执行 checkpoint 的远程 Python 代码。它减少了一种接入依赖,并不自动提供鉴权、队列或服务监控。

如果目标是多客户端并发请求,直接查看原生 vLLM 部署页;如果目标是离线 C++ 运行,查看llama.cpp 部署页。原生 Python 接口是一个可组合入口,不是所有服务的替换品。

从声音到文本,中间实际经过什么?

  1. 音频样本。采样率与声道是数据含义的一部分。48 kHz 的数组不能只改参数标成 16 kHz;那会改变模型看到的时间尺度。指南先要求明确的单声道 16 kHz WAV。
  2. 音频特征。原生特征提取器用 torchaudio 的 Kaldi fbank,再做 LFR 堆叠与降采样。这里仍需要匹配版本的 torchaudio;不能套用 FunASR 工具包的可选依赖结论。
  3. 转写请求。apply_transcription_request 把音频、语言、上下文和关键词整理成模型的聊天模板,并对齐音频占位 token 与特征。
  4. 生成和解码。AutoModelForSpeechSeq2Seq 返回 token。去掉输入 prompt 的长度后再解码,才能避免把模板混进转写文本。
用于功能检查的官方中文样本波形,横轴为秒,纵轴为振幅
官方中文样本原始波形:约 5.62 秒、单声道 48 kHz。运行指南前应明确重采样为 16 kHz。波形图不是准确率或性能结果。

先用合成静音验证配置和张量形状,可以把依赖、模板错误与权重加载问题分开。但预处理没有调用生成模型,不能据此宣布“识别通过”。

应用上下文应该放在哪里?

业务词表通过原生 keywords 参数传入,相关背景通过 prompt 传入。它们不是工具包的 hotword 参数,也不是 HTTP 层字段。给两份录音分别传上下文时,语言、prompt 和嵌套关键词列表应与录音数量一致。输出顺序应回到同一份输入清单。

例如客服录音里的人名、产品名,可以作为候选关键词;但“模板中出现了关键词”和“模型在噪声中识别对了这个词”是两项测试。不要把拼写纠正或摘要改写后的文本冒充原始 ASR 输出。

当前固定快照默认左侧 padding;批量示例仍可显式设置 padding 以便阅读。生成返回值要按整批输入张量的宽度去除 prompt,不是各条 attention mask 有效长度。空录音和空列表应在应用边界提前拒绝。

一次真实短录音检查说明了什么?

在固定源码、官方 -hf revision 和 CPU float32 环境中,我们运行了中文单录音、英文单录音、中英混合批量,以及一个带关键词的中文请求。四个请求均返回文本并在上限前生成 EOS;批量结果顺序正确。这是两份公开短音频的功能检查,不是准确率排行榜。

同一份中文音频原始输出
不传关键词开饭时间早上九点至下午五点。
候选关键词:开放时间开饭时间:早上九点至下午五点。

这个例子没有显示关键词强制生效,不能包装成“加热词就会识别对”。API 参数被接收、输出发生变化和业务词写对,是不同结论。保留原文,再结合人工参考检查;不要用提示词替代验收。环境、样本来源与重采样口径见验证记录

接入成功之后,还要验收什么?

  • 范围。这条 -hf 路径用于生成式转写,不包含原生 CTC 分支;不能把结果文本当作字级时间戳或说话人分离输出。
  • 完整性。短文件示例的生成上限是 128 个新 token。触顶可能截断;增加上限不会自动证明长录音没有漏句。
  • 资源。独立 CPU 示例不是 CUDA、服务并发或 vLLM 性能测试。分别记录下载、模型加载和生成,不把首次下载算成模型推理,也不把一次短录音当作容量规划。
  • 质量与隐私。在授权录音中回听关键数字、否定词和末尾,保留固定版本与原始结果;公开反馈不要携带客户录音、token 或身份信息。

需要段级时间戳和匿名说话人时,可比较 OpenMOSS 的第三方 MOSS 统一转写与分离路径。匿名标签不是人物身份,模型选型仍应从应用真正需要的输出开始。

从哪里开始

先打开原生 Transformers 安装与推理指南,完成独立 CPU 环境、无权重预处理和短录音生成,再决定是否需要批量或服务化。模型页和 Model Zoo保留格式入口;会议录音验收清单帮助把结果交付到应用。

源码依据:固定提交的官方模型文档固定 revision 的模型卡。模型项目与贡献入口见 Fun-ASRFunASR