把一个语音识别模型压到 16.9 MB,在纯 CPU 上只吃 124 MB 内存,还能跑出每秒 1,300 多个 Token。Cactus Compute 推出的 Whistle 刚拿出来时,几乎被包装成了端侧工控的救星。官方声称它在 LibriSpeech 上击败了体积极其庞大的行业标杆 OpenAI Whisper base。

把模型压到原来的八分之一,还能在标准测试集上反超对手,听起来像某种工程奇迹。

但最新一轮独立实测拆穿了这个神话。这不仅是一场基准口径被精巧剪裁过的跑分魔术,更暴露出了极轻量模型在长语音处理中最危险的工程缺陷:当音频跨过 30 秒窗口时,系统会在没有任何报错提示的情况下,静默丢弃整段音频。

关键性能与资源开销横向对照 模型体积 (越小越好) 16.9 MB Whisper base 为 145.3 MB 首字延迟 (越短越好) 11.1 ms Whisper base 为 73.2 ms 解码吞吐 (越高越好) 1,319/s Whisper base 为 266/s

跑分拆妆:束搜索带来的统计幻觉

语音转录在本地设备上的瓶颈往往不是算力,而是内存占用与首字延迟。Whisper base 在 CPU 上以 FP32 运行,启动后峰值内存直奔 823 MB。Cactus Whistle 搭配自身的 Needle C++ 推理引擎,将峰值内存压制在 124 MB,基于 Apache-2.0 协议开源,原生支持英、德、法、西等 7 种语言。

官方给出的成绩十分亮眼:在 Apple M4 Pro 上首字延迟仅 11.1 毫秒,LibriSpeech clean 评测集词错率 4.31%,甚至在带噪的 other 子集录得 10.49%。

轻量化与重型基准失衡,高噪复杂声学场景下轻量模型的稳定性急剧下滑(示意图)
轻量化与重型基准失衡,高噪复杂声学场景下轻量模型的稳定性急剧下滑(示意图)

但独立的配对检验揭开了对照组的猫腻:官方对比的基准,是未启用束搜索的贪婪解码版 Whisper。

在 100 组测试样本的配对检验中,Whistle 录得 10.27% 的词错率,确实好于贪婪解码下 Whisper base 的 12.46%。然而一旦为 Whisper base 打开标准的 5-beam 束搜索,后者的错误率随即降至 10.83%。经过配对说话人重采样与统计校正后,两者的精度差异在统计学上直接归零。

模型存储体积运行内存 (CPU)LibriSpeech CleanTED-LIUM (演讲)AMI (会议噪声)
Whistle16.9 MB~124 MB4.31%7.61%26.07%
Whisper base (5-beam)145.3 MB~823 MB4.5% 左右5.00%21.50%
Moonshine tiny v241.9 MB未公布12.00%未公布未公布

脱离干净朗读集后,抗噪能力的短板更难掩盖。长演讲 TED-LIUM 测试中,Whistle 词错率为 7.61%,落后于 Whisper base 的 5.00%;高噪会议 AMI 数据集上,Whistle 词错率直接飙升到 26.07%,显著弱于对手的 21.50%。

所谓全面超越,无非是在自己精选的跑道上,挑了一个没穿跑鞋的对手。

速度衰减与 30 秒静默截断

比起精度注水,推理效率的递减与工程稳定性才是更现实的硬伤。Whistle 的速度优势并不是恒定的,加速比随音频长度出现断崖式衰减。

在 5 秒以内的短语音输入下,Whistle 凭借极轻的计算负荷跑出 Whisper base 近 7.7 倍的速度;但音频拉长到 30 秒时,加速优势迅速缩水到 2.8 倍。极小架构在长序列注意力矩阵上的低效,大幅消耗了它原本建立的轻量红利。

8 层投影缓存与自动机硬锁,用极致工程剪裁换取微型端侧生存空间(示意图)
8 层投影缓存与自动机硬锁,用极致工程剪裁换取微型端侧生存空间(示意图)

比速度衰减更致命的是滑动窗口的处理逻辑。

Whistle 单次推理的硬性上限被锁在 30 秒,长音频必须依赖底层引擎切片与窗口拼接。但在 Needle 3.3.0 动态库实测中,当音频跨越 30 秒窗口边界时,引擎在没有抛出任何系统异常的情况下,静默丢弃了中间几秒的音频内容。

程序正常返回,退出状态码为零,日志毫无异样,但说话人的中段语音直接凭空蒸发。在真实产线中,一个直接崩溃并报出段错误的程序,远比一个假装成功却把业务数据吃掉的系统好排查得多。

  • 风险警示.在官方彻底修复 Needle 引擎的长音频窗口重叠逻辑前,切忌将该模型直接挂载到无外部切片守护的长录音、长会议实时转录管线中。

语音直通工具链的脆弱闭环

Cactus 的产品野心从来不是做一个听写记事本,而是要充当端侧微控制器的执行中枢。它把 16 kHz 单声道输入剧烈下采样为每 80 毫秒一帧,解码端设计了门控交叉注意力,只做一次投影缓存,配合内置的 Aho-Corasick 自动机硬锁特定关键词,力求直接输出 JSON 工具调用指令。

缺乏中间校验的指令直通,端侧语音误读会直接击穿防线引发外设误操作
缺乏中间校验的指令直通,端侧语音误读会直接击穿防线引发外设误操作
单进程直通管线对比传统链路 原始音频输入 16 kHz 单声道采样 Whistle + Needle 共享算子 零 IPC / 门控交叉注意力投影 结构化 JSON 工具调用 硬件动作直接执行闭环

这套单二进制直通管线省去了中间进程通信的开销,却把整条容错防线压得极脆。

在云端,大模型尚有充足的上下文窗口做二次推演纠错。但在 120 MB 的严苛端侧环境里,没有任何空间容纳一个冗余的纠错语言模型。语音端一旦因为噪声或口音误读动词,下游的 Tool Call 链路就会直接被标记为抑制状态,物理外设当场失联;若是非英语环境,Needle 还会频繁出现参数漂移。

追求纯离线部署的嵌入式团队还必须提防另一件事:项目的底层 C++ 库以预编译二进制形式提供,训练管线未开源,且配套的 Python SDK 默认回传带有匿名 ID 的遥测日志。要彻底切断网络上传,必须手动在系统环境中显式注入 NEEDLE_TELEMETRY=0 或 DO_NOT_TRACK=1。

边缘模型的真实账本

汉代扬雄在《法言》里写过一句话:山不让凌陟,故莫之极大;地不让舨步,故莫之广厚。做系统架构同样如此。

把参数压缩到 16.9 MB、把内存压到 124 MB,本身是一项极高水平的工程剪裁。如果应用场景被死死限制在智能家居开关、车载唤醒词、工业手柄操作这类 5 秒以内的短指令里,Whistle 带来的延迟红利与极低资源开销,确实是体量庞大的 Whisper 无法提供的。

但参数规模欠下的债务,在长文本、高抗噪和多轮拼接这些硬指标上,终究无法单凭算子技巧凭空抹平。

轻量化模型适合做锋利的单功能工兵,而不是挑大梁的通用听写核心。盲信跑分表上的超越,往往是系统事故的起点。把守护机制、切片逻辑与外围校验做严密,才不至于让硬件上省下来的几百兆内存预算,最后全部变成售后排障时结算不完的代价。