Whistle:16.9 MB 的语音转文字模型(6 分钟阅读)

TLDR AI 模型

摘要

Cactus Compute 发布 Whistle,一款 16.9 MB 的开源语音识别模型,可在 CPU 上无依赖运行,覆盖手机、可穿戴设备、机器人、汽车和微控制器等场景。它支持七种语言的转写,提供词级时间戳和语音嵌入,首个 token 生成延迟为 11 毫秒,并与 Needle 共享 C++ 引擎和量化技术。

Whistle 是一款开源语音识别模型,与 Needle 运行在同一 CPU 引擎上。它支持转写英语、德语、法语、西班牙语、意大利语、荷兰语和波兰语。模型体积仅 16.8 MB,可运行于手机、可穿戴设备、机器人、智能家居设备、汽车以及微控制器。
查看原文
查看缓存全文

缓存时间: 2026/10/05 15:03

# Whistle:16.9 MB 的语音转文本模型 来源:https://cactuscompute.com/blog/whistle 返回博客 (https://cactuscompute.com/blog) Models Research 一个开源语音识别模型,运行在与 Needle 相同的 CPU 引擎上。它能转录七种语言,11 ms 即可输出首个 token,并且可以与 Needle 加载在同一个容器和同一套量化中,同一个二进制文件就能把一段音频直接变成工具调用。 |2026 年 10 月 2 日|6 分钟阅读 今天我们发布 Whistle,一款面向手机、可穿戴设备、机器人、智能家居、汽车和微控制器的语音识别模型。它是一个 16.9 MB 的文件,在 CPU 上运行且无任何依赖,并加载到与 Needle (https://cactuscompute.com/needle) 相同的 C++ 引擎中,使用同一个容器和同一套量化。 **Whistle 沙盒** 说话,Whistle 就在你的设备上转录 16.9 MB · 在本标签页中运行 语言 关键词 按下麦克风说点什么。 支持英语、德语、法语、西班牙语、意大利语、荷兰语或波兰语,最长 30 秒。首次按下会下载 16.9 MB 的模型,音频永远不会离开你的设备。 Whistle 负责三项工作,全部在设备上完成: - **转录。**16 kHz 单声道音频,单次最多 30 秒,支持英语、德语、法语、西班牙语、意大利语、荷兰语和波兰语。除非你指定语言,否则会自动检测。 - **词级时间戳。**每个词的起止时间与概率,对齐自解码器的注意力。 - **语音嵌入。**编码器输出,每 80 ms 一帧一行,无需解码出转录文本。 **ENCODER** 波形 16 kHz 单声道,最长 30 s = 480,000 个采样 Log-mel 80 bins,25 ms 窗口,10 ms 步长,250–3500 Hz,按通道归一化 → 3,000 帧 卷积 stem 128 通道,kernel 9,三次减半 → 375 帧,每帧 80 ms Simple Attention 块 × 8 与 Needle 共享 同时对所有帧做 self-attention,4 条 mHC 残差通道,用 Monarch Hadamard MLP 取代前馈网络 **DECODER** 跨记忆 K 和 V 每个片段只投影一次,375 帧 × 8 层,供所有 beam 共享 分层 Simple Attention 块 × 8 与 Needle 共享 GQA 8q : 2kv,48 维 qk / 64 维 v,3-tap 因果卷积,第 3 层和第 7 层使用 engram,宽度 512 门控 cross attention 每个解码层都读取编码器:x ← x + σ(g) · softmax(q̂ K̂ᵀ/√d) V Beam search × 5 长度归一化对数概率,用 Aho-Corasick 自动机进行关键词偏置 转录 8,192 个文本碎片 + 7 个语言 token,最多 320 个,词级时间来自解码器自身的注意力 标记为「共享」的块运行的是 Needle 的代码,而非其副本。`--audio-depth` 选择解码层数;编码器始终运行全部八层。 **前端。**16 kHz 单声道音频以 25 ms 窗口、10 ms 步长分帧,映射为 80 个 log-mel bins,频率限制在 250–3500 Hz,并按通道归一化。30 秒对应 3,000 帧。一个 128 通道、kernel 9 的卷积 stem 将其三次减半,得到每 80 ms 一帧、共 375 帧。此后的每一阶段都以这一速率运行,`embed` 每帧返回一行。 **编码器。**八个 Simple Attention (https://cactuscompute.com/blog/simple-attention-networks) 块:四条 mHC 残差通道,以及用 Monarch Hadamard MLP 取代前馈网络——与 Needle 使用的块完全相同。注意力是非因果的:3 秒处的帧可以关注 12 秒处的帧。 **解码器。**八个宽度 512 的分层 Simple Attention 块:8 个 query head 对 2 个 KV head,48 维 query 和 key,64 维 value,Q、K、V 上各一个 3-tap 因果卷积,第 3 层和第 7 层在 18,432 个槽位上查 engram。这就是 Needle 的块列表,只是层数不同。 语音特有的部分只是每层多了一次加法。每个解码层通过门控 cross attention 读取编码器:`x ← x + σ(g) · softmax(q̂ K̂ᵀ/√d) V`,门控按层学习,K 和 V 取自该音频片段。这些投影在音频到达时运行一次(375 帧 × 8 层),然后在整个解码过程中保持不变。因此五个 beam 只意味着五份简短的转录缓存,而不是对音频做五遍处理。 **解码。**五条 beam,以长度归一化的对数概率打分。关键词偏置用 Aho-Corasick 自动机遍历你传入的短语,与 beam 并行推进,随着自动机前进相应提升这些短语的对数概率。转录上限为 320 个 token。词表为 8,192 个文本碎片加七个语言 token(每种语言一个),因此检测到的语言会作为一个 token 输出,而不是以带外方式返回。 **阶梯在解码器上。**从 2 层起的每一个深度都是作为一个独立模型训练出来的,加载时用 `--audio-depth` 选择其中之一。编码器从不被切片:所有八个块在每个深度上都完整运行。 **静音。**引擎会在解码器启动之前测量音频片段的响度范围。低于阈值时,返回空的转录文本和空的语言,且从不进入 beam search。 **Whistle** **Whisper base** **Moonshine tiny v2** 词错误率,越低越好。缺失的柱状条表示该模型作者从未公布过某项基准:Moonshine 只支持英语,而 Whisper 未公布 SPGISpeech、Earnings-22 或 AMI cleaned 的数据。Whisper 的 AMI 数字是 AMI-IHM,与其他两个模型所报告的 AMI 不是同一个子集。 在 LibriSpeech test-clean 和 test-other、SPGISpeech、Earnings-22 以及 FLEURS 平均值上,Whistle 领先。在 TED-LIUM、AMI 以及 MLS 平均值上,Whisper base 领先——它的体积是 145.3 MB,而 Whistle 是 16.9 MB。 **体积** 兆字节,越小越好 Whistle 16.9 MB Whisper base 145.3 MB Moonshine tiny v2 41.9 MB **首 token 时间** 毫秒,越小越好 Whistle 11.1 ms Whisper base 73.2 ms Moonshine tiny v2 22.8 ms **解码速度** token/秒,越大越好 Whistle 1,319/s Whisper base 266/s Moonshine tiny v2 262/s 在 Apple M4 Pro CPU 上处理 10 秒音频。每个面板内的柱状条独立缩放。 每个模型都在其官方运行时上以默认设置运行:Whistle 使用其 C++ 引擎、5 条 beam,以及 `openai-whisper` 和 `moonshine-voice`(对整段音频做非流式处理)。首 token 时间为「音频输入 → 第一个 token」。解码速度为「token 数量 ÷ 其后的墙钟时间」,因此编码器不会被重复计算。Whisper 会将每个输入都填充到 30 秒,因此其首 token 时间在不同音频长度下是恒定的。Whistle 的时间随音频长度变化:5 秒时为 5.9 ms,10 秒时为 11.1 ms,30 秒时为 36.3 ms。 词错误率使用 Whisper 的规范化器打分。Whistle 的数字基于 86,174 条语句测量。Whisper 和 Moonshine 的数字是其作者公布的,来自多语言 checkpoint 而非仅英语版本。任何测试音频都没有出现在 Whistle 的训练或验证数据中——通过比对每个已公布测试集的音频校验和与说话人 ID 进行了验证。 `needle_load` 读取 `.cact` 文件中包含的任意模型,因此同一个二进制文件既能做语音,也能做文本,或者两者一起: ``` 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 ``` 在第三行中,`needle_complete` 直接接收该音频片段。引擎会转录它、依据转录结果在你的工具上作答,并返回一个 JSON 对象,其中包含调用结果和语音字段,语音字段以 `audio_` 为前缀。调用方不会接触转录文本。 ``` {"function_calls":[{"name":"set_lights","arguments":{"room":"kitchen","on":false}}], "confidence":0.94, "audio_text":"turn off the kitchen lights", "audio_language":"en"} ``` ``` pip install cactus-needle ``` ``` import needle print(needle.transcribe("clip.wav")["text"]) # turn off the kitchen lights ``` 16 kHz 的 WAV 或原始采样无需超出基础安装之外的任何东西。其他采样率和麦克风采集需要 `[mic]` 额外依赖,它会添加 `soxr` 和 `sounddevice`。 每次调用都会返回文本、语言、首 token 的毫秒数,以及首 token 之后解码器的每秒 token 数。`word_timestamps=True` 会为每个词附上其时间与概率。`keywords=["Siobhan", "Krzysztof"]` 会在搜索过程中提升这些短语的对数概率。`language="de"` 会强制指定语言而非自动检测。`needle.Whistle()` 是同一模型的对象形式,可用于 `embed(audio)` 或持有某个调好的 `.cact` 文件。 `needle whistle playground` 从终端麦克风转录语音,`needle whistle compare` 则把同一段音频依次用 Whistle、Whisper 和 Moonshine 跑一遍,并附上各自的时间数据。 引擎为十七个目标平台提供了预构建版本,涵盖 macOS、Linux、Android、iOS、watchOS、Windows on ARM、RISC-V、MIPS、浏览器和 WASI 组件。每个文件夹都包含 `needle` 二进制文件、`libneedle.a` 和 `needle.h`,并能加载你交给它的任意 `.cact` 文件。 ``` needle download macos-arm64 needle download whistle ./macos-arm64/needle --model whistle.cact --audio clip.wav --audio-word-timestamps ``` `needle_load`、`needle_transcribe` 和 `needle_embed` 构成了完整的语音 C API。引擎不读取任何环境变量。所有行为要么是编译时的默认值,要么通过显式标志指定。 模型权重在 Hugging Face (https://huggingface.co/Cactus-Compute/whistle),引擎及其平台文件夹在 Cactus-Compute/needle3 (https://huggingface.co/Cactus-Compute/needle3),源码在 GitHub (https://github.com/cactus-compute/needle)。

相似文章

Cactus-Compute/whistle

Hugging Face Models Trending

Cactus-Compute 发布 Whistle,一个仅 16.9 MB 的端侧语音转文字模型,支持转录、词级时间戳和语音嵌入,可在手机、可穿戴设备、机器人及微控制器上无 GPU 运行,并在多项基准上与 Whisper 和 Moonshine 竞争。

@yibie: https://x.com/yibie/status/2109079699104399623

X AI KOLs Timeline

Cactus Compute 发布 Whistle:一个 16.9 MB、纯 CPU 运行的语音识别模型,支持七种欧洲语言,实测首 token 5-8 毫秒、解码约 1300 token/秒,但对不支持的语言(如中文、日文)不会报错,而是静默输出假词,存在生产环境静默污染风险。

vaibhavs10/incredibly-fast-whisper

Replicate Explore

一个高度优化的OpenAI Whisper Large v3版本,使用Transformers、Optimum和Flash Attention 2,能够在Replicate上在2分钟内转录150分钟的音频。

openai/whisper-large-v3

Hugging Face Models Trending

OpenAI 发布了 Whisper large-v3,这是一个更新后的自动语音识别模型,使用 128 个梅尔频带和一个新的粤语词元,在 500 万小时的数据上训练,错误率较 large-v2 降低 10-20%。