Introducing AnySpeechRecognizer and AnyDecisionModel: Open Models for Speech and Decisions on Apple Platforms

本文为原文前 6,000 字符的节选翻译,完整内容请查看原文。

Introducing AnySpeechRecognizer and AnyDecisionModel: Open Models for Speech and Decisions on Apple Platforms

语言模型功能强大,能够进行写作、总结、翻译和调用工具。但它们只是机器学习能力的一小部分。假设客户拨打您的支持热线,首先您需要知道他们说了什么(语音识别),然后您需要决定将他们转接到哪里(决策)。您可以将这两项任务都交给语言模型,但针对每项任务构建的模型往往更好、更快且成本更低。

In our AnyLanguageModel 1.0 recap, we looked at a year of local and hosted models in Swift. With AnyLanguageModel and swift-huggingface now on their 1.x releases, we’re extending the same approach to speech and decisions: familiar Swift APIs with a choice of model.

在 AnyLanguageModel 1.0 回顾中,我们审视了一年来 Swift 本地和托管模型的发展。随着 AnyLanguageModel 和 swift-huggingface 进入 1.x 版本,我们将同样的方法扩展到了语音和决策领域:提供熟悉的 Swift API 以及多种模型选择。

Today we’re announcing two packages: AnySpeechRecognizer implements Apple’s new speech-to-text API with a choice of recognition engine, including NVIDIA’s Parakeet and Alibaba’s Qwen3-ASR running locally on Core ML, and adds speaker diarization to track who speaks when. AnyDecisionModel answers yes-or-no, multiple-choice, and rating-scale questions with typed results and probabilities.

今天我们发布了两个软件包:AnySpeechRecognizer 实现了苹果新的语音转文字 API,并提供多种识别引擎选择,包括在 Core ML 上本地运行的 NVIDIA Parakeet 和阿里巴巴 Qwen3-ASR,同时增加了说话人日志功能以追踪谁在何时发言。AnyDecisionModel 则通过类型化结果和概率来回答“是/否”、多项选择和评分量表问题。

It derives each answer from the model’s probabilities instead of generating text, using a model on your device with MLX, Core AI, or llama.cpp, or a decision model from Jev or Ollama. Both packages can download open models from the Hugging Face Hub and run them on device.

它直接从模型的概率中得出答案,而不是生成文本,并使用设备上的 MLX、Core AI 或 llama.cpp 模型,或者来自 Jev 或 Ollama 的决策模型。这两个软件包都可以从 Hugging Face Hub 下载开源模型并在设备上运行。

AnySpeechRecognizer

计算机进行语音转录已有数十年历史,近年来这项技术已经非常成熟。苹果平台已经为此提供了 API。macOS 26 和 iOS 26 推出了 SpeechAnalyzer,这是苹果新的语音转文字 API。您可以向分析器添加 SpeechTranscriber 和 SpeechDetector 等模块,为其提供文件或音频缓冲区流,并从异步序列中读取结果。AssetInventory 负责安装模型,因此您的应用可以决定下载时间。这是一个设计精良的 API,但其背后的唯一引擎是苹果自家的引擎。

AnySpeechRecognizer keeps the API and lets you choose the engine:

  • import Speech
  • import AnySpeechRecognizer

AnySpeechRecognizer 保留了该 API 并允许您选择引擎:

  • import Speech
  • import AnySpeechRecognizer

The package mirrors SpeechAnalyzer, SpeechTranscriber, DictationTranscriber, SpeechDetector, and AssetInventory, with Apple’s Speech framework as the default engine. If your code uses that shared API, changing the import is enough. To use Parakeet instead, change only how you create the transcriber:

该软件包镜像了 SpeechAnalyzer、SpeechTranscriber、DictationTranscriber、SpeechDetector 和 AssetInventory,并以苹果的 Speech 框架作为默认引擎。如果您的代码使用了该共享 API,只需更改导入即可。若要改用 Parakeet,只需更改转录器的创建方式:

let transcriber = SpeechTranscriber(
    model: ParakeetSpeechModel(variant: .v3),
    transcriptionOptions: [],
    reportingOptions: [.volatileResults],
    attributeOptions: [.audioTimeRange]
)

安装资源、运行分析器和读取结果的步骤保持不变。README 中提供了完整的示例,并列出了与苹果框架的区别。

Meet the models

Parakeet v3 是 NVIDIA 的 Parakeet TDT 0.6B v3。它是一个多语言模型:它能识别 25 种欧洲语言并自动判断正在听到的语言,因此您无需传入区域设置。Parakeet Ultra 是 Moondream 对 v3 进行后训练后的版本。在我们的多数测量中,它的准确率更高。Parakeet Unified 是 NVIDIA 的纯英语 Parakeet 模型。所有三款 Parakeet 模型都在该软件包自带的 Core ML 运行时上运行,支持文件和实时输入、易失性结果、单词计时和单词置信度。

Qwen3-ASR is Alibaba’s speech model, in 0.6B and 1.7B sizes. It recognizes 30 languages and 22 Chinese dialects, including Mandarin, Cantonese, Japanese, and Korean, which Parakeet doesn’t cover. It detects the language automatically, or you can set one:

Qwen3-ASR 是阿里巴巴的语音模型,有 0.6B 和 1.7B 两种尺寸。它能识别 30 种语言和 22 种中国方言,包括普通话、粤语、日语和韩语,这些是 Parakeet 所不涵盖的。它可以自动检测语言,您也可以手动设置:

let transcriber = SpeechTranscriber(
    model: QwenSpeechModel(variant: .large, language: Locale.Language(identifier: "yue")),
    transcriptionOptions: [],
    reportingOptions: [],
    attributeOptions: []
)

Qwen3-ASR 为每个最长 40 秒的片段提供一个最终结果,不包含易失性结果、单词计时或置信度。它在 GPU 上运行,速度比 Parakeet 慢,因此更适合转录文件而非实时输入。要添加其他引擎,请实现 SpeechRecognitionModel 以进行配置,并实现 SpeechRecognitionExecutor 以处理模块会话。README 中包含一个简单的提供程序,它会报告占位符文本以帮助您入门。

Core ML models on the Hub

为了在应用中运行这些模型,我们将它们转换为 Core ML 并发布在 Hub 上。每个存储库都记录了其源检查点和每个文件的校验和,软件包将其固定在特定的修订版本上。Parakeet 存储库增加了一个用于实时输入的 8 秒编码器,这以略高的词错误率为代价,将实时分析时间缩短了约三分之一。存储库还包含转换工作流(大部分遵循 FluidInference 的 mobius 脚本),并针对原始模型检查了每次转换。

Downloads happen only when your app asks for them: about 600 MB for each Parakeet, plus about 590 MB for the live encoder, 0.9 to 2.4 GB for Qwen3-ASR, and about 250 MB for Sortformer. Files go in the standard Hugging Face cache, so a Mac app outside the sandbox shares them with Python and other Hugging Face tools.

下载仅在您的应用请求时发生:每个 Parakeet 模型约 600 MB,加上实时编码器约 590 MB,Qwen3-ASR 为 0.9 到 2.4 GB,Sortformer 约为 250 MB。文件存储在标准的 Hugging Face 缓存中,因此沙盒之外的 Mac 应用可以与 Python 及其他 Hugging Face 工具共享这些文件。

Speaker diarization

When you transcribe a conversation

当您转录对话时