好文集ChatGPT Plus¥119

16.9 MB 的语音识别,和它不认识的语言

10 月 2 日,Cactus Compute 放出 Whistle:一个 16.9 MB 的语音识别模型,跑在 CPU 上,没有任何依赖,也不需要 GPU。它和这家公司另一个模型 Needle 共用同一个 C++ 引擎、同一个 .cact 容器、同一套量化——已经在跑 Needle 的设备,多装一个语音模型不用再加一个运行时。

我们在自己的机器上把它装起来量了一遍(M4 Max,pip install cactus-needle,Apache-2.0)。七种支持的语言逐条对照都对得上;中文喂进去,出来一串法语假词。

它支持的语言是七种:英语、德语、法语、西班牙语、意大利语、荷兰语、波兰语。CLI 里直接写在参数里:--language {en,de,fr,es,it,nl,pl}。

我们量的

用语音合成做了九段 3.7–6.2 秒的音频,每段是一句含"240"和"11%"两个数字的话,做成 16 kHz 单声道送进去:

语种 它转出来的 自动检测 结论

en The report says 240 users left, 11% in July. en 全对

de Der Bericht sagt, 240 Nutzer, 11% im Juli. de 全对

fr Le rapport dit 240 utilisateurs, 11% en juillet. fr 全对

es El informe dice 240 usuarios, 11% en julio. es 全对

it Il rapporto dice 240 utenti, 11% a luglio. it 全对

nl Het rapport zegt 250 gebruikers, 11% in juli. nl 240 听成 250

pl Report mówi 240 użytkowników, 11% w lipcu. pl Raport 拼成 Report

zh Pour gauche, il y a un baisseau chez Goyoncou… fr 全错

ja Deportoni Orito, Uzawani Hakują Juni… pl 全错

每段的耗时(同一台机器):首 token 5–8 毫秒,解码 1,236–1,340 token/秒,整段跑完 21–51 毫秒。数字被规范化成 240、11% 而不是英文单词,看得出后面有一层后处理。

最要紧的一条:不支持的语种不会报错,会编

中文那段,它判定成法语,然后吐出一串法语形状的假词;日文那段判定成波兰语,同样是一串假词。它没有"我不知道"这个选项。

这跟它自己的另一处设计是矛盾的:模型会先量整段音频的响度范围,低于阈值就直接返回空转写、跳过搜索。也就是说它知道"没有内容"这种情况该怎么处理——但"内容是我没有的语言"这种情况,它不返回空,是把音频硬套进七种语言里的一种。

线上跑的话,这不是崩溃,是静默污染:一段中文会被写成法语垃圾进你的日志或数据库,而且看起来很像正常输出。

他们自报的数字,和我们量到的

官方给的(M4 Pro,10 秒音频):文件 16.9 MB 对 Whisper base 145.3 MB、Moonshine tiny v2 41.9 MB;首 token 11.1 毫秒对 73.2 / 22.8;解码 1,319 token/秒对 266 / 262。WER 在 LibriSpeech test-clean/test-other、SPGISpeech、Earnings-22、FLEURS 平均上领先,在 TED-LIUM、AMI、MLS 平均上落后。

速度这部分我们复现了:更短的片段上我们量到首 token 5–8 毫秒、解码 1,236–1,340 token/秒,和他们的量级一致。这部分他们没夸大。

WER 那部分要打个折:Whistle 的数字是他们自己量的(86,174 条),Whisper 与 Moonshine 的数字来自各自论文——自测对引用,永远不是苹果对苹果,而且"9 倍小、6 倍快"只跟 2022 年的 Whisper base 比。他们的披露本身比多数厂商干净(说明用了 Whisper normalizer、说明比的是多语言 checkpoint、逐条标出对方作者没发的基准),还声称用音频校验和与说话人 ID 比对确认测试音频没进训练集——这条很少见。

值得看的是它想让你干什么

needle_complete 这个接口可以直接吃音频,一次调用返回一个 JSON:函数调用、audio_* 字段、以及置信度。也就是说语音到动作之间不经过"先转写成文本、再由上层决定"这一步。配上静音返回空的行为,能看出这套东西的目标并不在转写本身:它是给端上自动化当入口的,干净音频、标准问答留在本地,复杂或噪声大的交给云。

另外两个实:

  • 格式是自有的 .cact,不是 GGUF;权重 17 MB,首次运行自动从 Hugging Face 拉

  • 默认开启匿名遥测(上报函数名、版本、操作系统,不含内容),NEEDLE_TELEMETRY=0 关闭。我们这次全程关掉了

一句话结论

16.9 MB、纯 CPU、首 token 不到十毫秒,七种欧洲语言都能用;中文别用,它不会告诉你它不会。我的测试全是合成的干净朗读音频,真实会议(多人、口音、背景音)会明显更难,那部分没测。

链接

发布说明:https://cactuscompute.com/blog/whistle

最佳实践:https://cactuscompute.com/blog/whistle-best-practices

权重:https://huggingface.co/Cactus-Compute/whistle

引擎源码:https://github.com/cactus-compute/needle

#本地AI #语音识别

全文完
查看原文