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.a
  • needle.h 所有二进制文件均可加载任何 .cact 模型文件,无需配置环境变量。

社区反馈(精选 HN 评论)

  • 正面评价: 用户称赞其极小的占用空间和速度,特别适合嵌入 Web 应用或边缘设备。(例如:"对于可以合理地集成到 Web 应用中的东西来说,它非常出色。")
  • 准确性担忧: 多位评论者报告了特定语言的问题(西班牙语、荷兰语与德语混淆、波兰语)以及在具有挑战性的音频中偶尔出现的幻觉。一位用户观察到一段 60 秒的片段重复输出 "Thank you.",表明在长对话中存在故障模式。
  • 功能需求: 缺少实时流式转录(录音时输出),用户认为这对实时应用至关重要。
  • 对比: 用户将 Whistle 与 Parakeet、Whisper 和 Moonshine 进行了比较,指出 Whistle 具有速度优势,但在准确性方面与大型模型相比表现不一。
  • 硬件好奇心: 提出了关于在微控制器 (ESP32, STM) 和 RISC‑V 上运行的问题;该项目已经发布了 RISC‑V 构建版本,但对微控制器的全面支持尚未得到验证。

实际用例

  1. 语音控制 IoT 设备 – 本地转录消除了智能家居命令的延迟和隐私顾虑。
  2. 机器人技术 – 为没有 GPU 加速的机器人提供板载语音接口。
  3. 可穿戴设备与汽车 – 用于免提交互的低功耗端侧 STT。
  4. 边缘推理流水线 – 将 Whistle 嵌入与小型 LLM 结合,实现上下文感知的命令解析。

如何开始

  1. 下载模型和运行时
    needle download whistle   # 拉取 16.9 MB 的 .cact 文件
    needle download macos-arm64   # Apple Silicon 的示例
    
  2. 运行快速测试
    ./macos-arm64/needle --model whistle.cact --audio clip.wav --audio-word-timestamps
    
  3. 通过 Python 集成 – 安装 cactus-needle 并调用 needle.transcribe 或 needle.embed(如上所示)。
  4. 探索深度权衡 – 尝试 --audio-depth 2 … 8,为您的目标硬件平衡速度与 WER。

局限性与待解决问题

  • 语言覆盖: 仅支持七种欧洲语言;不支持中文、日语或其他高需求语言。
  • 流式输出: 当前 API 在音频片段完全处理后提供最终转录;尚不支持实时逐 token 流式传输。
  • 对口音的鲁棒性: 社区报告显示在重口音(如波兰语、荷兰语-德语、印度英语)上性能下降,表明训练数据可能偏向标准口音。
  • 微控制器可行性: 虽然存在 RISC‑V 二进制文件,但在超低功耗 MCU (ESP32, STM32) 上的运行尚未公开演示。

在哪里可以找到代码和模型


Whistle 证明了高质量、多语言的语音转文字可以在小于 20 MB 的纯 CPU 包中实现,为在各种边缘硬件上实现真正的离线语音接口打开了大门。

Sources

相关

  • 项目
  • Dispatch
  • 项目
  • 项目
  • Dispatch