模型观察¶
每周本地 ASR 模型及与 Hex 编译目录相关的运行时的运行日志;最新的条目在最前,每条都注明日期,并逐一与 Hex 当前发布的内容进行对比。
2026-10-22:流式 Parakeet 对比 Moonshine,以及要补充什么¶
问题(Kit):如果 Parakeet 可以流式,我们还需要 Moonshine 吗?始终在线的流式 Parakeet 更好吗?有没有比 Moonshine 更好的小型模型?
结论¶
Moonshine?
├── Drop the ONNX Moonshine stack (moonshine-voice C lib, ORT, download.moonshine.ai)
│ └── Replace with moonshine-streaming-small Q8 GGUF through transcribe-cpp (already in the pinned 0.2.4)
├── Keep a small streaming model for commands and the live draft
│ └── Always-on streaming Parakeet is not better: same WER at command latency, 4-5x the parameters,
│ a second 0.7 GB model copy, and (buffered Unified) a recomputed 5.6 s left context per chunk
└── Meetings only: Apple SpeechTranscriber beats both on cost (Hex measured ~2% CPU, no model memory);
plans/meeting-live-transcription.md already recommends it
置信度:中等。以下所有内容要么来自供应商报告,要么是 Hex 自己的测量;这里没有任何内容在 Kit 的硬件上重新运行过。未测量且具有决定性的:GGUF Moonshine 在 Hex 行切分后的命令识别延迟和漏检率,以及任何始终在线流的 Metal 功耗。
1. 流式 Parakeet 对比 Moonshine¶
Hex 当前运行:moonshine.rs 通过 moonshine-voice C 库加载 Moonshine Streaming Small(small-streaming-en 量化 ONNX 包,磁盘约 250 MB,140M 级),单线程。Hex 自己的数据(docs/features/meetings.md,Mac Studio/Pro,2026-10-22):两条会议草稿流占用一个核心的 31%,命令识别器占用一个核心的 22%,每个 Moonshine 常驻内存约 0.4 GB,第二个 Parakeet 副本在会议峰值时额外增加约 +0.74 GB(2808 对比 2072 MB)。
按延迟的准确率。 NVIDIA 自己的表格基于八个 Open ASR 数据集(AMI、Earnings22、GigaSpeech、LibriSpeech clean/other、SPGI、TED-LIUM、VoxPopuli),平均 WER %。Moonshine 的数据来自其论文,使用相同数据集。
latency (chunk+right) avg WER
Moonshine v2 small (123M) 80 ms lookahead 7.84 // paper Table 3
Moonshine v2 medium (245M) 80 ms lookahead 6.65
Parakeet Unified 0.6B offline 5.91
2.08 s (Hex default 5.6/1.04/1.04) 6.14
1.12 s 6.29
0.56 s 6.52
0.32 s 6.92
0.24 s 7.35
0.16 s 8.44
0.08 s 15.63 // collapses
Nemotron Speech Streaming EN 0.6B (cache-aware)
offline 6.92
1.12 s 6.92
0.56 s 7.09
0.16 s 7.84
0.08 s 8.70
Parakeet TDT v2 0.6B buffered at 1.12 s 22.83 // not trained for it
解读:
- 在命令延迟(低于 0.3 秒)下,Moonshine small(7.84)已经与 0.16 秒下的 Nemotron(7.84)持平,并超过 0.16 秒下的 Unified(8.44)。Moonshine medium(6.65)在体积仅为 40% 的情况下,与 1.12 秒下的 Nemotron(6.92)持平。
- Unified 只有在接受 0.56 到 2 秒的延迟(6.14 到 6.52)时才会胜出,这适合字幕草稿,但与语音命令无关。
- Moonshine 论文在 M3 MacBook 上测得的句末延迟:small 为 148 ms,计算负载 18%;medium 为 258 ms,29%(表 2)。它没有报告功耗。我没有发现任何人发布 Parakeet 或 Nemotron 流式的 Metal 功耗。
计算形态。 Unified 是 缓冲式 流式:NVIDIA 的模型卡上写着“每个块都会重新计算左侧上下文”,而 Hex 的 transcription/gguf_session.rs 使用左侧 5.6 秒、块 1.04 秒、右侧 1.04 秒。每一步要为 1.04 秒的新音频编码约 7.7 秒的音频,大约 7.4 倍的冗余(在 0.56 秒设置下为 12 倍)。按照这些模型卡在 M4 Max 上约 190 到 230 倍实时的离线 Metal 吞吐量,我推导出每条连续流约占 GPU 几个百分点,忽略每块的额外开销;这不是实测值。Nemotron 是缓存感知的(缓存恒定,无重叠),因此一次流式传输的成本大约相当于一次离线计算。Moonshine 的编码器也是增量式的(滑动窗口,50 Hz 前端)。
Apple Silicon 上的吞吐量(transcribe.cpp 数据卡,M4 Max,Q8_0,Metal,离线计算,在 11 秒片段 / 35 秒片段上的 x 实时):
Parakeet Unified 188 / 228
Nemotron EN 207 / 225
Nemotron 3.5 (multiling.) 144 / 138
Moonshine streaming tiny 239 / 112 (CPU 271 / 169)
Moonshine streaming small 129 / 59 (CPU 64 / 49)
Moonshine streaming med 87 / 36 (CPU 47 / 32)
Voxtral Realtime 4B 6 / 7
Moonshine 的自回归解码器在长转写中占主导,而且其 CPU 路径与 Metal 路径接近,因此它不需要 GPU。Nemotron/Unified 是 GPU 模型:在相同芯片上 CPU 为 32 到 39 倍。
一个已加载的 Parakeet 能否同时服务多个流? 在 Hex 的绑定中不行。对照 transcribe-cpp 0.2.4(Hex 的锁定版本)和上游进行了检查:
transcribe.h(上游 main):已知 0.x 限制——尚不支持并发 COMPUTE:在给定模型的所有会话中,最多只能有一个 transcribe_run / transcribe_run_batch / active stream 处于进行中。希望并行转录的调用者应为每个 worker 加载一个模型;支持在同一模型上串行化使用多个会话。docs/bindings.md:C 头文件会允许在调用方串行化的情况下,多个会话各自持有一个活动流并交错馈送数据,但“一个绑定只允许每个模型有一个活动流”。src/session.rs(0.2.4)中的Session::stream会在流的整个生命周期内持有按模型的租约;第二个流或任何run都会返回Error::Busy。Hex 的引擎线程在每次听写采集期间持有的正是这个租约。run_batch仅批处理离线话语。没有批式流式。
因此:每个并发流都需要自己的 Model(Hex 测量第二个 Parakeet 约需 0.7 GB),而常驻在听写模型上的流会阻塞听写(或被听写阻塞)。transcribe.cpp 的 README 说 CPU 和 Metal 权重是内存映射的,所以同一 GGUF 的两次加载可能共享页面;但 Hex 的 +0.74 GB 测量表明,不要未经测量就假定如此。一个解除该限制的 “per-session 后端架构” 被描述为已规划,但未给出日期。
(a) 双轨实时字幕。 Moonshine 仍然是最便宜的正确选择,但它当前的运行时和 Parakeet 都有同样的限制:每个模型对象只能有一个流,所以双轨意味着两个模型。使用 199 MB 的 Q8 GGUF(可 mmap,Metal 或 CPU),这大约是 0.4 GB,与今天相同,且省去 ORT 及其“每个转录器一个流式状态”的问题——在 Hex 的测量中,该问题使每次运行丢失 553 至 631 个数据包。Parakeet 双模型约 1.5 GB,而滚动 Parakeet 本来就会在一个 chunk 内替换草稿。Apple SpeechTranscriber(Hex 测得双轨约占一个核的 2%,分段结束后 final 结果 p50 约 2.3 秒,在合成通话上 WER 3.0%,对比 Moonshine 的 1.7%)便宜一个数量级,且不需要模型内存。
(b) 常驻语音命令。 普通 resolver 命令只从已完成的行运行(AGENTS 不变量),因此部分假设延迟只对语音定界例外情况有影响。候选方案:
- Moonshine small GGUF 配合 VAD 行分段器:199 MB,CPU 或 Metal,LibriSpeech clean 2.54%(模型卡),与 ONNX 构建大致相同。
parakeet-tdt_ctc-110m离线处理 VAD 切分的语音片段:135 MB Q8,LibriSpeech clean 2.43%,英语,CC-BY-4.0。一秒命令的离线解码只需几十毫秒,因此成本在于端点挂尾,而不是模型。此处尚未测试。- 常驻 Nemotron 或 Unified:需要专用 0.7 GB 模型、GPU 上的 12 Hz(80 ms 块)唤醒循环,并且在这些延迟下没有精度增益。只有当 Kit 希望实时草稿中带有听写级标点时,才值得这么做。
Moonshine 相对于 transcribe.cpp 路线的一个结构性优势是:moonshine-voice 自带 VAD 和行事件。transcribe.cpp 的 Moonshine 流返回已提交/暂定文本,单个流上限 81.9 秒,且没有行分段;Hex 会用 Silero VAD v6.2(transcribe.cpp 内置)或 transcription/pause_segmenter 来驱动它,并为每一行启动一个新流。
2. 现状(截至 2026-10-22)¶
有两个排行榜正在使用,且不能跨榜比较:
- Eight-set average(较旧;NVIDIA 和 Moonshine 基于它报告)。
- Current Open ASR Leaderboard(结果提交截至 2026-10-19):九个公开集合,包括 Voice Arena Monsoon 和 URGENT24 嘈杂/混响语音。同一模型在该榜上的分数高于 eight-set average。Moonshine、Parakeet Unified 和 Kyutai 不在当前结果文件中。
当前排行榜 english_short_latest.csv(数据集 hf-audio/open-asr-leaderboard-results,提交 2026-10-19),仅含开放模型。RTFx 是在 A100 上测得的,不能说明 Mac 上的表现:
model params avg WER RTFx license GGUF / transcribe.cpp
Granite Speech 5.0 2B 2.3B 5.06 545 Apache-2.0 not yet (4.0/4.1 and 5.0 TurboCTC only)
Qwen3-ASR 1.7B 2.0B 5.75 836 Apache-2.0 yes (qwen3-asr-1.7b)
Cohere Transcribe 03-2026 2B 6.26 924 Apache-2.0 yes (already in Hex)
Canary-Qwen 2.5B 2.5B 6.37 882 CC-BY-4.0 yes
Parakeet TDT 0.6B v2 0.6B 6.43 6148 CC-BY-4.0 yes (already in Hex)
Parakeet TDT 0.6B v3 0.6B 6.51 6228 CC-BY-4.0 yes (already in Hex)
Qwen3-ASR 0.6B 0.8B 6.60 750 Apache-2.0 yes (already in Hex)
Granite 5.0 TurboCTC (new rev) 0.47B 6.84 21134 Apache-2.0 old English-only rev only
Nemotron Speech Streaming EN 0.62B 6.89 1114 NVIDIA OML yes
Distil-Whisper large-v3.5 0.8B 7.02 898 MIT not in the model list
Whisper large-v3-turbo 0.8B 8.39 811 MIT yes (already in Hex)
Voxtral Mini 4B Realtime 4B 9.01 103 Apache-2.0 yes, 4.7 GB Q8, 6-7x realtime on M4 Max
Nemotron 3.5 ASR Streaming 0.64B 10.51 1348 OpenMDW-1.1 yes (multilingual; English worse)
具备流式能力且体量小,以及 Hex 将如何运行每种:
Moonshine v2 Streaming tiny/small/med MIT; 44M/140M/266M (GGUF params); English only
│ streaming yes (50 Hz frontend, 80 ms feed); 8-set WER 12.01/7.84/6.65; LS clean Q8 4.52/2.54/2.16
│ GGUF Q8 50/199/296 MB in transcribe.cpp. No multilingual in this family; other-language Moonshine is non-streaming
├── Parakeet Unified EN 0.6B NVIDIA OML; buffered streaming, 160 ms to 2.08 s; Hex default; 731 MB Q8
├── Nemotron Speech Streaming EN 0.6B NVIDIA OML; cache-aware, 80 ms to 1.12 s; 730 MB Q8
│ LibriSpeech clean streaming = offline = 2.31% Q8 (byte-equal to NeMo at R=13); supported by 0.2.4
├── Nemotron 3.5 ASR Streaming 0.6B OpenMDW-1.1; 32 supported locales, prompt-conditioned; 751 MB Q8
│ LS clean 3.05% (vs 2.31 EN-only); English regressed on the current leaderboard (10.51 vs 6.89)
├── Multitalker Parakeet Streaming 0.6B NVIDIA OML; Nemotron fine-tune with an embedded Sortformer diarizer
│ (up to 4 speakers); the only local route to "who said it" in a stream; unmeasured by Hex
├── Voxtral Mini 4B Realtime Apache-2.0; 480 ms default delay; auto language detection; too heavy (4.7 GB, 6-7x realtime)
├── Kyutai STT 2.6B EN / 1B EN-FR CC-BY-4.0; 2.5 s / 0.5 s delay; PyTorch/MLX, no GGUF
│ old 8-set avg 6.4; 2.6B is too large for an always-on slot
├── Apple SpeechAnalyzer / SpeechTranscriber system model, macOS 26+, no download; Hex already ships
│ it as a batch model. Independent tests: 2.12% clean / 4.56% other (M2 Pro, 5,559 LibriSpeech
│ utterances, Lyonesse, July 2026), 1.98% on a 40-clip snapshot (IraVoice, M5 Max, p50 about 130 ms
│ post-speech). Parakeet v2 CoreML int8 2.01 / 3.40 in the same Lyonesse round
└── Granite Speech 5.0 TurboCTC Apache-2.0; offline only despite the "streaming-style" encoder;
21k RTFx on A100; the Oct 21 revision adds PnC and 7 languages but is not in transcribe.cpp yet
离线准确率档位(仅供参考,非流式):Granite Speech 5.0 2B 在当前排行榜上位列开源第 2 名(5.06,发布于 2026-10-20,Apache-2.0,支持翻译和 2,000 词关键词偏置,6 种语言);Qwen3-ASR 1.7B 为 5.75(52 种语言);parakeet-ultra(Moondream 对 v3 后训练得到的版本,CC-BY-4.0,25 种语言)在 transcribe.cpp 的 LibriSpeech clean 上列出 1.80%,对比 v3 的 1.94%,并且根据 HF 数据集条目,在更早的排行榜平均分上为 5.32 对比 6.32。TheWhisper large-v3-turbo(TheStage,CC-BY-4.0)在当前排行榜上为 6.07,带有 CoreML 和流式标签,但不提供 GGUF。
3. 目录新增项(按优先级排序)¶
Hex 当前的目录(transcription_models.rs)包括:Parakeet Unified EN、v2、v3、Whisper large-v3-turbo、Qwen3-ASR 0.6B、SenseVoice Small、Cohere Transcribe、Apple Speech。Moonshine 是目录之外的一条独立 ONNX 路径。
1. Moonshine Streaming small (and medium as an option), GGUF // replaces the ONNX Moonshine
│ Gain: removes ORT, moonshine-voice (header 20000 now, 30000 breaking), the download.moonshine.ai
│ host and its failure mode; one runtime, one downloader, Metal or CPU; weights 199 MB vs ~250 MB;
│ same accuracy (card LS clean 2.54% vs Useful Sensors' 2.49%); medium is 6.65 avg for 296 MB.
│ Cost: medium. Rewrite the thin layer behind moonshine.rs: VAD line segmentation (Silero VAD is in
│ transcribe.cpp), a stream per line (81.9 s cap), committed vs tentative text to LineStarted/
│ Updated/Completed, one Model per meeting track and one for commands.
│ Needs no crate bump (0.2.4 has moonshine_streaming). Gate: replay Hex's command fixtures
│ (moonshine_lab) and the meeting_echo_replay call against both backends before deleting ONNX.
│
2. parakeet-ultra (GGUF, offline) // replaces Parakeet v3
│ Gain: same size and API as v3 (740 MB Q8), lower error on English and every FLEURS language,
│ cuts long audio at pauses by itself (30 s segments), which suits meeting chunks.
│ Cost: low. Catalog entry plus a crate bump: the port is pinned 2026-10-04, newer than 0.2.4
│ (2026-09-25); 0.4.1 is current (2026-10-22). Q8_0 (740 MB, 1.80%) and smaller quants are published.
│
3. Nemotron Speech Streaming EN 0.6B (GGUF, cache-aware) // new "Live" tier, not a dictation default
│ Gain: streaming WER equals offline (2.31% LS clean), 80 to 1120 ms chunks, constant memory, no 5.6 s
│ recompute, native PnC. Right choice if the live meeting draft should read like final text, or if
│ Kit wants always-on streaming with a Parakeet-family model.
│ Cost: medium. transcription/gguf_session.rs only sets the buffered Parakeet extension; Nemotron needs
│ StreamExtension::ParakeetStream{att_context_right}. Runs in 0.2.4. License is the NVIDIA Open
│ Model License. Do not make it the dictation default: Unified is more accurate offline (5.91 vs 6.92).
│
4. Granite Speech 5.0 2B and TurboCTC // wait for the port
│ 2B is the accuracy leader (5.06) but needs a 2B LLM decoder; TurboCTC is the fastest and Apache but
│ its revised multilingual/PnC weights are not in transcribe.cpp (README lists the August revision).
│
5. Qwen3-ASR 1.7B // quality tier for final meeting passes
│ 5.75 current, 52 languages, Apache-2.0, already in transcribe.cpp. 2B-class decode cost, so
│ final-pass only. Hex already carries the 0.6B.
│
Not recommended: Voxtral Realtime (4.7 GB, 6-7x realtime, 9.01 avg), Nemotron 3.5 for English
(10.51 current vs 6.89), Kyutai (no GGUF, 2.6B), Moonshine tiny (12.01 avg).
只有在会议草稿场景下,才可能完全弃用 Moonshine:在 macOS 26+ 上使用 Apple SpeechTranscriber,其他场景使用 Nemotron 或什么都不用。对于命令场景,仍保留一个小型流式或 VAD 端点检测模型;Moonshine small 是已发布流式移植版中体积最小、且达到命令级 WER 的模型。
后续测量¶
- 在
moonshine_lab固定测试集上对比 GGUF Moonshine small 与 ONNX 构建:漏检率、更新 p50/p95、CPU、常驻内存(M5 Max 和一款基础 M 系列芯片)。 - 在同一进程内加载第二个相同 Parakeet GGUF 的
Model:在 Metal 上使用 mmap 时的真实常驻内存增量。 - 在 Hex 的通话回放上,以 160 和 560 ms 的 Nemotron EN 对比 Unified(5.6/0.56/0.56):字幕延迟、每分钟音频的 CPU/GPU 时间、
powermetrics能耗。 - transcribe.cpp 的 HEAD 是否已解除“每模型一次计算”的限制(关注
docs/bindings.md和 0.4.x 的说明)。
参考来源¶
- Moonshine v2 论文(Kudlur 等人,2026-02-12),arXiv 2602.12241:表 2 和表 3,编码器窗口 (16,4)/(16,0),80 ms 前瞻。
- UsefulSensors/moonshine-streaming-small 模型卡(MIT);moonshine-ai/moonshine 发布版本(v0.1.5,2026-08-24)。
- transcribe.cpp(MIT)
docs/models/:moonshine-streaming*.md、parakeet.md、parakeet-unified-en-0.6b.md、parakeet-ultra.md、nemotron-speech-streaming-en-0.6b.md、nemotron-3.5-asr-streaming-0.6b.md、voxtral-realtime.md、granite-speech-5.0-turboctc.md、bindings.md;include/transcribe.h;Hex 固定的transcribe-cpp/-sys0.2.4 源码(session.rs、lib.rs、family.rs、arch/)。crates.io:0.2.4 发布于 2026-09-25,0.4.1 发布于 2026-10-22。 - nvidia/parakeet-unified-en-0.6b(2026-04-07)和 nvidia/nemotron-speech-streaming-en-0.6b(2026-03-13)模型卡;arXiv 2604.19079 和 2312.17279。
- Open ASR Leaderboard 结果文件
english_short_latest.csv及其提交日志(2026-10-19),arXiv 2510.06961;IBM Granite Speech 5.0 博客(2026-10-21)。 - kyutai/stt-2.6b-en 模型卡;Mistral Voxtral Mini 4B Realtime 见上方 transcribe.cpp 模型卡。
- Apple 设备端对比来自第三方且出自利益相关发布方:Lyonesse(2026-07-13/15)、IraVoice
mac-asr-benchmark(2026-08-01)、Mumr 会议基准(2026-09-30)。Hex 自身的测量:docs/features/meetings.md和docs/plans/meeting-live-transcription.md。
本页原文 Markdown:在 AtomGit 查看·内容源自开源项目 hex19/hex