文章摘要
transcribe.cpp是一个基于ggml的转录库,支持最新转录模型,所有模型经过数值验证和WER测试,性能优异。作者因跨平台语音转文字应用分发困难而开发此库,目前为v0.1.0版本,欢迎用户报告问题共同改进。
文章总结
我非常兴奋地分享今天推出的 transcribe.cpp。这是一个基于 ggml 的转录库,支持所有最新的转录模型。在 handy-computer 的 Hugging Face 组织下发布的每个模型,都经过了数值验证和词错误率测试,确保与参考实现一致,并且能在各种设备上加速运行。
我是 Handy 的作者和维护者。这个库源于为跨平台语音转文字应用分发时遇到的痛点。目前这是 v0.1.0 版本,意味着可能存在一些我独自无法发现的粗糙之处,欢迎报告问题,让我们一起修复。
动机
我认为,使用当前的自动语音识别推理栈来分发跨平台应用非常糟糕。基本上只有 whisper.cpp 和 ONNX 可选。你可以为苹果设备引入 MLX,但这样就需要支持两个不同的引擎,并为每个引擎移植模型。我一直喜欢用 ONNX 快速为 Handy 添加模型支持,但仅靠 CPU 运行时性能损失很大。还有一些声称支持多种模型的库,但作者不明,测试情况未知,让人充满疑问:他们会持续维护吗?是否考虑过绑定以便在桌面或移动应用中使用?这仅仅是演示代码吗?做过基准测试吗?比 ONNX 快吗?
正是这些问题催生了 transcribe.cpp。作为 Handy 的维护者,我需要一个值得信赖的库:能下载文件并运行推理,确保引擎中的模型推理与参考实现一样准确,推理应在 GPU 上运行以获得最佳性能,能轻松嵌入 Handy 而不是庞大的 PyTorch 库,并且能在 Mac、Windows 和 Linux 上工作。ggml 显然是最佳选择,它拥有强大的社区和出色的分发能力。
你能得到什么?
你将获得一个快速、准确的推理引擎,支持广泛的模型。
- 支持 16 个自动语音识别系列(60 多个模型),更多即将加入
- 通过 Vulkan、Metal、CUDA 和 TinyBLAS 加速
- 每个模型都经过数值验证和词错误率测试
- 支持流式转录和批量转录
- 几乎可以替代 whisper.cpp
- 维护者支持的四种语言绑定:Python、JavaScript/TypeScript、Rust、ObjC/Swift
广泛的模型支持
我们计划支持尽可能多的先进转录模型。目前,我们已支持大多数公开的现代转录模型,少数缺失的将很快添加。
加速支持
我的首要目标之一是在 Vulkan 上运行任何自动语音识别模型。我认为这是任何本地推理应用的最低要求。对于每个支持的模型,我们都在 Ryzen 4750U(CPU + Vulkan,Fedora 系统)和 M4 Max 上进行了基准测试。
数值验证
我确保 transcribe.cpp 的推理准确且尽可能接近参考实现。这主要源于使用 Hugging Face 上的 .onnx 模型时对推理准确性的巨大不确定性。为了确保推理正确,我们针对每个模型与参考实现进行数值验证,并运行完整的词错误率扫描,确保输出与参考一致。这意味着每个模型都经过了数千个话语的测试,结果与参考非常接近或完全相同。这些数据已发布在 transcribe.cpp 仓库和 Hugging Face 的每个模型页面上。
替代 whisper.cpp
transcribe.cpp 几乎可以替代 whisper.cpp。主要原因是 Handy 之前使用 whisper.cpp,我需要用 transcribe.cpp 更新它,同时保持与流行的 .bin 文件兼容。transcribe.cpp 可以运行这些文件。虽然有些功能和标志尚未支持,但大多数用例下,我们的 whisper 实现是可靠的,性能与 whisper.cpp 相当。
真正的分发
语言绑定从一开始就在我的考虑中。虽然这个库是用 C/C++ 编写的,但我需要 Rust 绑定。为了尽可能广泛地分发本地转录,至少需要良好的第一方绑定支持。我选择了四种我认为能代表主要使用场景的语言,也欢迎其他人贡献绑定,前提是愿意承担维护责任。
当然,许多决策最终都源于 Handy。由于 Handy 很受欢迎,我打算像维护 Handy 一样维护这个库,继续为开源生态系统做出贡献。没有 Handy,这个库就不会存在,因为我不会遇到支持多种自动语音识别模型的问题,也不会了解用户的各种用例。我已经尽力覆盖了最常见的需求,但肯定还有未处理的情况。如果你发现遗漏,欢迎贡献代码!
让本地语音转文字更易用
transcribe.cpp 的目标是让本地自动语音识别更简单。我们知道,大多数设备都能极其准确地运行转录,无需将语音发送到云端。RK3566 芯片通过 transcribe.cpp 运行模型,即使在其性能较弱的 CPU 上也能实现实时转录。使用最先进的模型进行超实时转录,功耗仅需几瓦。这不是希望或梦想,而是事实。
展望未来,出于各种原因,更多推理将在本地进行。这使分发问题变得至关重要。为了让更多应用运行本地推理,我们需要让推理更简单。transcribe.cpp 当然不能完全解决这个问题,还有很长的路要走,但我希望这是一个小小的进步。我学到了很多。
致谢
我非常感谢所有支持这个项目的人。
首先感谢 Mozilla AI 及其 BiR 计划,以及 Davide。这个项目最初只是我脑海中的一个问题,我向他们提出后,他们决定支持我解决它。当时 transcribe.cpp 甚至还不是一个具体的想法,我只是在探索如何加速 Handy 的分发。非常感谢他们的支持,帮助这个项目成为现实。
感谢 ggml 及其所有贡献者。没有 ggml,这个项目就不可能实现。ggml 在简化本地推理应用的分发方面做出了卓越贡献。
感谢 Modal 提供的积分,用于进行词错误率测试和确保库在 CUDA 上正常工作。能够验证工作的正确性,对我帮助巨大。
感谢 Blacksmith 为 transcribe.cpp 的部分 CI/CD 提供支持。CI/CD 对于确保每个发布版本都经过测试至关重要。
感谢 Hugging Face,既是本地 AI 社区的支柱,也为 handy-computer 组织提供了私有存储空间,让我可以自由上传模型。
是否借助了 AI?
是的,绝对有。我认为一个人不可能在几个月内从头开始用 ggml 编写如此规模的引擎而不借助外部帮助。但这里的文字都是我自己写的,没有使用 AI。它们来自我的口述或手指敲击。
评论总结
以下是对评论内容的总结,涵盖主要观点、论据及认可度(评分均为None,表示未提供评分),并保持不同观点的平衡性:
主要观点与论据
高度认可与赞赏
- 评论1、2、8、12对项目给予高度评价,认为其是“卓越的工作”(Excellent work),并强调其与本地推理趋势的契合。
- 关键引用:
- “Excellent work, paired with the 500kb TTS model headlining today I can see the full stack coming together.” (评论1)
- “This makes these projects so much more trustworthy and easier to approach.” (评论2)
功能定位与改进建议
- 评论3、4、5、6、7、9、10、11关注具体功能,如替代Whisper、性能差异(Metal vs Vulkan)、演示需求、跨平台支持、说话人分离等。
- 关键引用:
- “So it's mostly intended to be a better replacement for whisper?” (评论3)
- “I saw that metal is almost x10 faster than vulkan? Why so much gap?” (评论4)
- “would love to see a demo handy is fantastic although its still behind the frontier models.” (评论5)
实际应用与生态整合
- 评论6、7、8、9讨论项目在Mac、手机、跨平台应用中的实用性,并建议集成到操作系统或通用工具中。
- 关键引用:
- “I love handy on my Mac, my phone for STT in situations where it’s not possible/poor performance of the native Model for STT.” (评论6)
- “I'd build Transcribe.cpp into the apps I maintain, but I feel like this functionality should (generally) be integrated into the OS.” (评论8)
技术细节与扩展需求
- 评论10、11提出添加说话人分离和识别的需求,显示对高级功能的期待。
- 关键引用:
- “What's the easiest way to add speaker separation to this?” (评论10)
- “Is there a way to add speaker identification easily?” (评论11)
平衡性说明
- 正面观点:多数评论(1、2、6、7、8、12)对项目表示赞赏,认为其技术扎实、实用性强,且符合本地推理趋势。
- 改进建议:部分评论(3、4、5、10、11)指出性能差距、功能缺失(如说话人分离)或需要更完善的演示。
- 中立观点:评论9、12提及项目与现有工具(如TTS、Handy)的互补性,但未明确批评。
总结
评论整体对项目持积极态度,认可其技术价值与社区贡献,同时提出性能优化、功能扩展(如说话人分离)及生态整合的建议。项目被视为本地推理和语音处理领域的重要进展,但仍有改进空间。