模型介绍
中文整理Fun-ASR-GGUF
将 Fun-ASR-Nano 模型转换为可以在本地高效运行的格式,实现**准确、快速的离线语音识别**,可直接转录长音频生成 SRT。主要依赖了 llama.cpp 对 LLM Decoder 的加速推理。
核心特性
✅ **纯本地运行** - 无需网络,数据不外传
✅ **速度快** - 混合推理架构,支持 GPU 加速 (CUDA, Vulkan, Metal)
✅ **准确率高** - Encoder 保持 FP32 精度
✅ **内存占用小** - CTC Decoder 和 LLM Decoder 使用 INT8 量化
✅ **上下文增强** - 可提供上下文信息,进一步提升识别准确率
✅ **支持热词** - 通过 CTC 预识别,基于音素提取热词,提高专业领域识别准确率,实时监控热词文件
✅ **时间戳精确** - 字符级时间戳对齐
✅ **较长音频支持** - 单次可识别长达 60 秒的音频,超长音频自动分段,智能对齐
✅ **SRT 导出** - 支持自动生成美化后的 SRT 字幕
转录速度视频演示(RTX5050)
Quick start
- 安装依赖
推理需要:
pydub 用于音频格式转换,需要系统安装 ffmpeg
从 llama.cpp Releases 下载预编译二进制文件,将动态库放入 fun asr gguf/bin/ 文件夹:
平台 下载文件
- ----- ----------
- *Windows** llama-bXXXX-bin-win-vulkan-x64.zip
- *Linux** llama-bXXXX-bin-ubuntu-x64.zip
- *macOS** llama-bXXXX-bin-macos-arm64.zip
Linux 和 macOS 尚未经过完整测试,欢迎反馈
- 下载模型(可选,如已有导出模型可跳过)
下载原始模型
导出模型
- 运行识别
就这么简单!
单段音频长度在60秒内可准确识别,过长会自动分段
工作原理
为什么这样做?
- **CTC 预识别** 提供两样东西:
- 粗识别结果(用于筛选热词,提供给LLM)
- 时间戳信息(为LLM的文本输出赋予时间戳)
- **混合架构** 各取所长:
- ONNX Runtime:运行 Encoder 和 CTC,稳定可靠
- llama.cpp:运行 LLM,支持 GPU 加速(Vulkan, Metal),速度超快
- **精度策略**:
- **Encoder 用 FP32** - 保证识别准确率(INT8 影响大)
- **CTC 和 LLM 用 INT8** - 节省内存,速度提升,准确率影响小
内存占用
- **Encoder**(约 200M 参数)
- FP32:~800MB 内存
- INT8:~200MB 内存(但不推荐,准确率下降明显)
- **CTC Decoder**:内存占用可忽略(几十 MB)
- **LLM Decoder**(约 600M 参数)
- INT8:~1.2GB 内存或显存(显卡内会用fp16进行计算,但比原生fp16要快)
- FP16:~1.2GB 内存或显存
- *总内存占用**(推荐 FP32 Encoder + INT8 Decoder):约 **2GB**(CPU 内存或 GPU 显存)
使用示例
基础用法
热词配置
创建 hot.txt 文件(每行一个热词):
特性:**
- **实时更新**:识别程序运行期间,你可以随时修改 hot.txt 并保存,程序会通过 watchdog 自动更新内存中的热词库,无需重启。
- **模糊召回**:热词可以有几千条、上万条,程序会根据 CTC 的粗识别结果进行音素级别的模糊匹配,找出相似度在 similar threshold 以上的热词,并取前 max hotwords 条(默认10条)作为上下文提供给 LLM Decoder 从而得到更准确的输出。
性能参考
以下是在小新Pro16GT(U9-258H + RTX5050)笔记本上的效果,60秒的睡前消息音频,转录用时2.59秒。
需要注意的是,**LLM Decoder 所需时间取决于吐出文字的数量,不适合用 RTF 描述**,睡前消息音频的文字密度非常高,短短60秒就有350个字,但这段音频的速度可以作为下限参考,即 RTF 最慢也不会慢过 0.04
在文字密度更低的音频上,识别速度还能更快。
同一段音频,纯 CPU 推理速度:
长音频推理输出示例:
Frequently Asked Questions
Q: Encoder 为什么不用 INT8?**
测试发现 Encoder 用 INT8 会有可观察到的准确率下降,建议保持 FP32,延迟上也就差个100毫秒左右。
Q: 如何选择量化级别?**
- *Encoder**:尽量 FP32,保证精度
- *CTC Decoder 和 LLM Decoder**:推荐 Q8 0(INT8),速度快且准确率影响小
Q: 支持哪些语言?**
Fun-ASR-Nano-2512 支持中文、英文、日文。
Fun-ASR-MLT-Nano-2512 还支持更多语言(粤语、韩文、越南语等)。
Q: 如何提高识别准确率?**
配置 hot.txt 添加领域热词
使用 context 参数提供上下文信息
Q: 输出全是「!!!!!!!!!!」怎么办?**
Intel 集成显卡的 fp16 矩阵求和计算没有使用 fp32 做临时变量,溢出为 NaN,产生了如此问题,解决办法是通过设置环境变量禁用 fp32 ,或禁用 vulkan。取决于 CPU 更快,还是集显的 fp32 更快。
文件说明
项目结构
01-Export-Encoder-Adaptor-CTC.py - 导出 Encoder 和 CTC Decoder
02-Export-Decoder-GGUF.py - 导出 LLM Decoder
03-Inference.py - 完整的使用示例
fun asr gguf/
- core/ - 核心逻辑(资源管理、解码、编排)
- bin/ - 存放 DLL 和二进制可执行文件
- asr engine.py - Facade 入口类
- srt utils.py - 字幕生成工具
- text merge.py - 滑动窗口文本合并算法
导出的模型
技术细节
架构设计
- *Encoder**:ONNX 格式,FP32,提取音频特征
- *CTC Decoder**:ONNX 格式,INT8 量化,用于时间戳和热词候选
- *LLM Decoder**:GGUF 格式,INT8 量化,llama.cpp 推理
致谢
Fun-ASR - 原始模型
llama.cpp - GGUF 推理引擎
优先采用原作者提供的中文模型卡片;仅有英文说明时由闲社AI翻译整理。重要参数、许可证和商用范围请以原文为准。
你将获得什么
完整仓库方式包含该固定版本中的权重、配置、分词器及说明文件;指定版本方式只下载所选文件或整组分片。多模态模型的投影文件、配置等依赖,请按作者说明配齐。
完整仓库可能包含多个权重格式,因此需要的磁盘空间可能大于单一格式的模型大小。下载文件不等于完成模型部署。
使用前须知
运行模型需要的设备、工具与依赖,以原作者说明为准。
是否允许商用、修改和分发,请查看模型许可证。
闲社提供资料与镜像下载方法,不代表已运行模型或完成安全审计。下载的代码应先检查,再执行。
Problem with the information or download?
Sign in to submit feedback.
