跳转到主要内容

Handy作者开源transcribe.cpp:60+模型、GPU加速,语音转录新选择

语音转录新利器:transcribe.cpp 来了

对于开发者来说,在本地做语音转录一直是个头疼的问题。要么用 whisper.cpp,要么用 ONNX,想在苹果设备上跑还得加上 MLX——这意味着要维护两套引擎,每个模型都得单独移植。这种尴尬的局面,终于有人站出来打破了。

7月19日,知名语音转文字应用 Handy 的作者兼维护者 sebjones,把他开发跨平台应用时遇到的种种麻烦,打包成了一个新库——transcribe.cpp,并发布了 v0.1.0 版本。

从痛点出发:为什么需要 transcribe.cpp?

Sebjones 坦言,现有的 ASR(自动语音识别)推理栈在分发跨平台应用时,体验相当糟糕。虽然市面上有些库号称支持很多模型,但作者是谁?测试结果如何?一概不清。开发者心里难免打鼓:这个库什么时候会停止更新?有没有官方绑定,能用在真正的桌面或移动应用里?它是不是只是个 demo 代码?有没有做过基准测试?比 ONNX 快吗?

作为 Handy 的开发者,他需要一个这样的库:下载模型文件就能直接运行推理,结果与官方实现一致;推理要跑在 GPU 上以获得最佳性能;能轻松嵌入 Handy,而不必背负庞大的 PyTorch 框架;同时兼容 Mac、Windows 和 Linux。

经过一番权衡,ggml 成了他的最佳选择——社区活跃,分发能力出色。

Image

性能与兼容性:60+ 模型,GPU 加速

transcribe.cpp 到底能做什么?简单来说,它提供了一个快速、准确的推理引擎,模型覆盖范围相当广。目前支持 16 个 ASR 模型家族,总计超过 60 个模型,而且还在不断增加。

在加速方面,它通过四条路径将推理转移到 GPU:Vulkan、Metal、CUDA 和 TinyBLAS。作者特别强调,Vulkan 是任何本地推理应用的基线,并在 Ryzen4750U(CPU + Vulkan)和自家的 M4Max 上对每个支持的模型都做了基准测试。

每个模型都经过了数值验证和完整的词错误率(WER)扫描——也就是说,它们经过了数千个音频片段的打磨,输出结果与官方实现非常接近,甚至完全一致。这些验证结果都公开在 transcribe.cpp 的仓库和 Hugging Face 的对应模型页面上。

功能上,它支持流式转录和批量转录,基本上可以作为 whisper.cpp 的即插即用替代品。Handy 原本就运行在 whisper.cpp 上,作者正打算用 transcribe.cpp 来发布更新,替换掉它。为此,他还特意保持了与 whisper.cpp 流行的 .bin 文件的兼容性,让 transcribe.cpp 可以直接运行这些文件。虽然某些标志和功能尚未完全对齐,但它的 whisper 实现对于大多数用例来说已经足够可靠,性能也大致相当。

从第一天起就考虑语言绑定

这个库之所以让人看好,是因为作者从一开始就把语言绑定放在了重要位置。库本身用 C/C++ 编写,但他不仅需要 Rust 绑定,还明白要让本地语音转录广泛分发,必须有像样的官方绑定。

他选择了四种最具代表性的语言:Python、JavaScript 和 TypeScript、Rust,以及 Objective-C 和 Swift。当然,他也欢迎社区贡献更多绑定,前提是有人愿意承担维护工作。这些决策很大程度上是 Handy 的需求驱动的,而 Handy 的流行也让作者有动力继续维护这个库。

让本地 ASR 更容易

在作者看来,transcribe.cpp 的最终目标是让本地语音识别更容易使用。大多数设备上的语音转录已经能达到很高的准确率,完全没必要把音频送到云端。

他举了个硬核的例子:在性能较弱的 RK3566 芯片上,transcribe.cpp 可以在 CPU 上以超实时速度运行模型,而使用最先进的模型时,功耗只有几瓦,就能实现实时转录。他认为,未来由于各种原因,更多的推理会在本地进行,分发问题将变得极其重要。虽然 transcribe.cpp 远未完全解决这个问题,但它希望成为向前迈进的一小步。

致谢与 AI 辅助

在致谢部分,作者特别感谢了 Mozilla AI 及其 BiR 项目和工程师 Davide——在项目还只是一个模糊想法时就决定支持他;ggml 及其贡献者——构成了整个项目的基础;Modal——为 WER 测试和 CUDA 验证提供了计算积分;Blacksmith——处理了部分 CI/CD;以及 Hugging Face——既是本地 AI 社区的支柱,也为 handy-computer 组织提供了模型存储的私人空间。

至于 AI 是否辅助了开发?作者回答得很直接:当然用了,但一个人不可能在几个月内仅靠 ggml 从零创建出这种规模的引擎。不过,这里呈现的所有文字都不是 AI 写的,全是他自己的口和手写出来的。

关键要点

  • transcribe.cpp 是一个基于 ggml 的语音转录库,支持 60 多种模型
  • GPU 加速:通过 Vulkan、Metal、CUDA 和 TinyBLAS 实现
  • 语言绑定:提供 Python、JavaScript、Rust、Objective-C/Swift 官方绑定
  • 兼容 whisper.cpp:可直接运行 .bin 文件
  • 开源免费:v0.1.0 版本已发布,欢迎社区反馈