换一行 import,换掉识别引擎
macOS 26 和 iOS 26 引入了苹果新的语音转文字接口 SpeechAnalyzer,设计得不错,但背后只有苹果自己的引擎。Hugging Face 10 月 29 日发布的 AnySpeechRecognizer 照搬了这套接口(SpeechAnalyzer、SpeechTranscriber、AssetInventory 等),默认仍用苹果引擎;代码只用共享接口的话,把 import Speech 换成 import AnySpeechRecognizer 即可,想用别的引擎只改创建转写器那一行。
可选引擎都已转换成 Core ML 发布在 Hub 上:英伟达 Parakeet TDT 0.6B v3(25 种欧洲语言,自动识别语种)、Moondream 在其基础上后训练的 Parakeet Ultra、英语专用的 Parakeet Unified,以及阿里的 Qwen3-ASR 0.6B 和 1.7B。后者覆盖 30 种语言和 22 种中文方言,包括 Parakeet 不支持的普通话、粤语、日语和韩语,但每段最长 40 秒才出一次结果、跑在 GPU 上更慢,更适合转写文件而不是实时输入。苹果接口没有说话人分离,这个包另加了一个基于英伟达 Streaming Sortformer 的模块,最多区分 4 个说话人,能把每个带时间戳的词归到具体的人。模型只在应用请求时下载:每个 Parakeet 约 600 MB,Qwen3-ASR 0.9–2.4 GB,Sortformer 约 250 MB。
作者用 M4 Max Mac Studio 测了 3–8 分钟的 LibriSpeech 录音:从文件转写时,test-clean 上 Parakeet Unified 词错率 1.43%、Parakeet v3 1.55%,苹果自带引擎 2.12%;Parakeet 转写一小时音频约需 20–40 秒,编译后内存约 100 MB。坏消息也写得清楚:在多人插话的 AMI 会议录音上,所有引擎词错率都在 23% 以上;目前只在 macOS 27 上测过,还没上 iPhone。
让模型做选择题,而不是写作文
AnyDecisionModel 处理的是另一类常见需求:这条消息急不急、工单该给哪个组、客户有多恼火。常规做法是让语言模型生成一段文字再去解析,只拿到一个答案。这个包改为读取每个候选答案的概率:是否题返回一个概率值,选择题返回选中项、每个选项的概率和一个置信度,选项可以直接是 Swift 枚举。它有六种后端:MLX 本地小模型、带决策头的模型(如 Cloudflare 的 Clef-Flash,4-bit 版下载 6.2 GB,建议 16 GB 内存的 Mac)、macOS 27 / iOS 27 上的 Core AI、llama.cpp、TypeSafe 的托管模型 Jev,以及本地 Ollama。
示例应用 Emoji Magnet 把 343 个表情各问一遍「是否符合描述」:在 M4 Max 上用 MLX 跑 Qwen3 4B,每次前向一次回答 16 题、约 0.45 秒,全部问完约 10 秒。文档也提醒,语言模型给出的原始概率往往过于自信,包里提供了校准和选项轮换去偏;置信度只衡量概率是否集中,不代表答案正确,上线前要用自己的数据测错误率。
对做 Mac 和 iPhone 应用的开发者,这两个包的价值在于把开源语音和分类模型接到苹果原生的写法上,录音不必上传云端;两个仓库都是 Apache-2.0 许可,Hub 上转换后的各模型沿用原始许可,其中 Parakeet Unified 等为英伟达开放模型许可。
via: Hugging Face 博客:Introducing AnySpeechRecognizer and AnyDecisionModel、GitHub:mattt/AnySpeechRecognizer、GitHub:mattt/AnyDecisionModel