Whistle 16.9 MB 语音转文字模型:微型、快速、多语言端侧 ASR
TL;DR – Whistle 的优势及其重要性
- 是什么: Whistle 是一个 16.9 MB 的端侧语音转文字模型,完全在 CPU 上运行,无需外部依赖,并与 Needle 语言模型共享相同的 C++ 运行时。
- 为什么重要: 在小于 20 MB 的体积下,它提供了多语言转录、单词级时间戳和语音嵌入功能,首字延迟约为 11 ms——远快于 OpenAI 的 Whisper‑base (73 ms),并可与规模大得多的模型相媲美,从而在手机、可穿戴设备、微控制器和边缘设备上实现实时语音转文字 (STT)。
核心能力
- 转录 – 支持 16 kHz 单声道音频,最长 30 秒,涵盖英语、德语、法语、西班牙语、意大利语、荷兰语、波兰语。除非明确设置,否则会自动检测语言。
- 单词时间戳 – 每个单词都会返回开始/结束时间和置信度分数,这些数据源自解码器的注意力机制。
- 语音嵌入 – 编码器输出帧级嵌入(每帧一行 80 ms),无需解码,适用于说话人识别或音频检索等下游任务。
"首次按下按钮即下载 16.9 MB 的模型,音频永远不会离开您的设备。" – Cactus Compute 博客
架构概览
| 组件 | 设计细节 | 与 Needle 共享 |
|---|---|---|
| 前端 | 25 ms 窗口,10 ms 跳步,80 个 log‑mel 频段,带限 250‑3500 Hz,每通道归一化。30 s → 3,000 帧 → 经过三次步长为 2 的卷积后变为 375 帧。 | 是 |
| 编码器 | 8 个简单注意力块(4 个 mHC 残差通道 + Monarch Hadamard MLP)。非因果注意力允许长距离上下文(例如,3 s 处的帧可以关注 12 s 处的帧)。 | 是 |
| 解码器 | 8 个阶梯式简单注意力块,宽度 512,8 个查询头 → 2 个 KV 头,48‑dim Q/K,64‑dim V,Q/K/V 上有 3‑tap 因果卷积,engram 查找(第 3 层和第 7 层,18,432 个槽位)。 | 是 |
| 交叉注意力 | 每个解码器层采用门控交叉注意力:x ← x + σ(g)·softmax(q̂K̂ᵀ/√d)V。编码器投影在每个片段(375 帧)中计算一次,并在波束搜索中重复使用。 |
– |
| 解码 | 5‑波束搜索,长度归一化对数概率,通过 Aho‑Corasick 自动机进行关键词偏置,最多 320 个 token,词汇表 8,192 个片段 + 7 个语言 token。 | – |
| 静音处理 | 解码前进行响度检查;低于阈值则返回空转录和语言,不进入波束搜索。 | – |
阶梯式深度选择
--audio-depth 标志可在加载时选择解码器深度(从 2 层到完整的 8 层)。所有编码器层始终运行;解码器可以被切片以用精度换取速度。
基准测试亮点
除非另有说明,所有数据均在 Apple M4 Pro CPU 上测量。
| 指标 | Whistle | Whisper‑base (145 MB) | Moonshine tiny v2 (42 MB) |
|---|---|---|---|
| 模型大小 | 16.9 MB | 145.3 MB | 41.9 MB |
| 首字延迟 | 11.1 ms (10 s 片段) | 73.2 ms | 22.8 ms |
| 解码速度 | 1,319 tokens/s | 266 tokens/s | 262 tokens/s |
| LibriSpeech test‑clean WER | 领先于 Whisper & Moonshine | – | – |
| SPGISpeech WER | 领先 | – | – |
| Earnings‑22 WER | 领先 | – | – |
| FLEURS 平均 WER | 领先 | – | – |
| TED‑LIUM WER | 落后于 Whisper | – | – |
| AMI WER | 落后于 Whisper | – | – |
| MLS 平均 WER | 落后于 Whisper | – | – |
"Whistle 在 LibriSpeech test‑clean 和 test‑other、SPGISpeech、Earnings‑22 以及 FLEURS 平均 WER 上均处于领先地位。" – Cactus Compute 博客
结果解读
- 速度: Whistle 的首字延迟随片段长度而变化(5 s 时为 5.9 ms,30 s 时为 36.3 ms),而 Whisper 会将所有输入填充至 30 s,导致延迟固定。
- 准确性: 对于以英语为中心的基准测试,Whistle 的表现与 Whisper‑base 持平或更优,尽管其体积缩小了 8 倍以上。在七种支持的语言上,多语言性能具有竞争力,尽管一些社区评论指出在西班牙语上表现有所下降,且存在荷兰语与德语混淆的情况。
- 资源使用: 整个流水线在单个 CPU 核心上运行,无需 GPU,使其适用于低功耗设备(微控制器、RISC‑V、MIPS、Android、iOS 等)。
集成与 API 接口
命令行使用(文本和语音使用相同的二进制文件)
needle --model whistle.cact --audio clip.wav
needle --model needle3.cact --tools tools.json --prompt "turn off the kitchen lights"
needle --model needle3.cact --model whistle.cact --tools tools.json --audio clip.wav
第三条命令执行端到端的语音控制工具调用,返回 JSON:
{
"function_calls": [{"name": "set_lights", "arguments": {"room": "kitchen", "on": false}}],
"confidence": 0.94,
"audio_text": "turn off the kitchen lights",
"audio_language": "en"
}
Python 封装 (pip 包 cactus-needle)
import needle
print(needle.transcribe("clip.wav")["text"]) # → turn off the kitchen lights
可选标志:
word_timestamps=True– 返回逐词的时间和概率。keywords=["Siobhan", "Krzysztof"]– 在波束搜索期间提升这些短语的权重。language="de"– 强制进行德语检测。needle.Whistle()– 创建一个对象用于重复调用embed(audio)。
跨平台二进制文件
为 17 个目标平台提供了预构建的二进制文件,包括 macOS (ARM/x86)、Linux、Android、iOS、watchOS、Windows‑ARM、RISC‑V、MIPS、浏览器 (WebAssembly) 以及 WASI 组件。每个文件夹包含:
needle可执行文件libneedle.aneedle.h所有二进制文件均可加载任何.cact模型文件,无需配置环境变量。
社区反馈(精选 HN 评论)
- 正面评价: 用户称赞其极小的占用空间和速度,特别适合嵌入 Web 应用或边缘设备。(例如:"对于可以合理地集成到 Web 应用中的东西来说,它非常出色。")
- 准确性担忧: 多位评论者报告了特定语言的问题(西班牙语、荷兰语与德语混淆、波兰语)以及在具有挑战性的音频中偶尔出现的幻觉。一位用户观察到一段 60 秒的片段重复输出 "Thank you.",表明在长对话中存在故障模式。
- 功能需求: 缺少实时流式转录(录音时输出),用户认为这对实时应用至关重要。
- 对比: 用户将 Whistle 与 Parakeet、Whisper 和 Moonshine 进行了比较,指出 Whistle 具有速度优势,但在准确性方面与大型模型相比表现不一。
- 硬件好奇心: 提出了关于在微控制器 (ESP32, STM) 和 RISC‑V 上运行的问题;该项目已经发布了 RISC‑V 构建版本,但对微控制器的全面支持尚未得到验证。
实际用例
- 语音控制 IoT 设备 – 本地转录消除了智能家居命令的延迟和隐私顾虑。
- 机器人技术 – 为没有 GPU 加速的机器人提供板载语音接口。
- 可穿戴设备与汽车 – 用于免提交互的低功耗端侧 STT。
- 边缘推理流水线 – 将 Whistle 嵌入与小型 LLM 结合,实现上下文感知的命令解析。
如何开始
- 下载模型和运行时
needle download whistle # 拉取 16.9 MB 的 .cact 文件 needle download macos-arm64 # Apple Silicon 的示例 - 运行快速测试
./macos-arm64/needle --model whistle.cact --audio clip.wav --audio-word-timestamps - 通过 Python 集成 – 安装
cactus-needle并调用needle.transcribe或needle.embed(如上所示)。 - 探索深度权衡 – 尝试
--audio-depth 2…8,为您的目标硬件平衡速度与 WER。
局限性与待解决问题
- 语言覆盖: 仅支持七种欧洲语言;不支持中文、日语或其他高需求语言。
- 流式输出: 当前 API 在音频片段完全处理后提供最终转录;尚不支持实时逐 token 流式传输。
- 对口音的鲁棒性: 社区报告显示在重口音(如波兰语、荷兰语-德语、印度英语)上性能下降,表明训练数据可能偏向标准口音。
- 微控制器可行性: 虽然存在 RISC‑V 二进制文件,但在超低功耗 MCU (ESP32, STM32) 上的运行尚未公开演示。
在哪里可以找到代码和模型
- 模型权重: https://huggingface.co/Cactus-Compute/whistle
- 引擎与平台二进制文件: https://huggingface.co/Cactus-Compute/needle3
- 源代码仓库: https://github.com/cactus-compute/needle
Whistle 证明了高质量、多语言的语音转文字可以在小于 20 MB 的纯 CPU 包中实现,为在各种边缘硬件上实现真正的离线语音接口打开了大门。
Sources
相关
- 项目
- Dispatch
- 项目
- 项目
- Dispatch