Két új nyílt forráskódú Swift-csomag, AnySpeechRecognizer és AnyDecisionModel, olyan API-kat hoznak az Apple ökoszisztémába, amelyek lehetővé teszik a fejlesztők számára, hogy választhassanak a beszédfelismerő és döntéshozó modellek között, miközben megtartják a megszokott Swift felületet.
Mire jók ezek a csomagok?
-
AnySpeechRecognizer: az Apple macOS 26 és iOS 26 által bevezetett SpeechAnalyzer API-megoldás paradigma megtartásával kínál cserélhető felismerő motort. Támogatja a Core ML-re konvertált modelleket, köztük NVIDIA Parakeet variánsokat és Alibaba Qwen3-ASR-t, valamint beszélőazonosítást (speaker diarization) a Streaming Sortformer segítségével.
-
AnyDecisionModel: típusos eredményeket és valószínűségeket ad vissza igen/nem, többválasztós és skálázott értékelési kérdésekre. A válaszokat nem szöveg-generálásból olvassa ki, hanem a modell által a címkékhez rendelt valószínűségekből számolja.
Mindkét csomag képes nyílt modelleket letölteni a Hugging Face Hubról és helyben futtatni azokat.
AnySpeechRecognizer részletek
AnySpeechRecognizer megtartja az Apple SpeechAnalyzer, SpeechTranscriber, DictationTranscriber, SpeechDetector és AssetInventory API-szerkezetét, de lehetővé teszi, hogy más motorokat használjunk Apple helyett. Ha a kód a megosztott API-t használja, elegendő az import cseréje (import Speech helyett import AnySpeechRecognizer). A csomag Apple Speech frameworket használ alapértelmezett motorként.
A csomag például Parakeet használatakor csak a transcriber példányosítását kell módosítani; az asset telepítése és az eredmények olvasása ugyanúgy működik.
Támogatott modellek (Core ML konverziók a Hubon)
A csomag Core ML-re konvertált modelleket tett közzé a Hubon, a következő adattáblázat szerinti forrásokkal és licencekkel (a csomag minden konverzióhoz rögzíti a forrás checkpointot és fájl-ellenőrző összeget):
- Parakeet TDT 0.6B v3 — konverzió: mattt/parakeet-tdt-0.6b-v3-coreml — forrás: nvidia/parakeet-tdt-0.6b-v3 — CC BY 4.0
- Parakeet Ultra — mattt/parakeet-ultra-coreml — forrás: moondream/parakeet-ultra — CC BY 4.0
- Parakeet Unified EN 0.6B — mattt/parakeet-unified-en-0.6b-coreml — forrás: nvidia/parakeet-unified-en-0.6b — NVIDIA Open Model License
- Qwen3-ASR 0.6B — mattt/qwen3-asr-0.6b-coreml — forrás: Qwen/Qwen3-ASR-0.6B-hf — Apache 2.0
- Qwen3-ASR 1.7B — mattt/qwen3-asr-1.7b-coreml — forrás: Qwen/Qwen3-ASR-1.7B-hf — Apache 2.0
- Streaming Sortformer 4spk v2 és v2.1 (dariarizációhoz) — mattt/diar-streaming-sortformer-4spk--coreml — források: nvidia/diar_streaming_sortformer_4spk- — CC BY 4.0 vagy NVIDIA Open Model License
A Parakeet futtatókörnyezetéhez a tároló egy 8 másodperces enkódert is hozzáad, ami élő (stream) bemenetnél kb. egyharmaddal csökkenti a feldolgozási időt cserébe egy kissé magasabb szóbeli hibaaránnyal.
Méretek és letöltések
A modellek letöltése csak akkor történik meg, amikor az alkalmazás kéri. Körülbelüli méretek:
- kb. 600 MB minden Parakeet modellhez, plusz kb. 590 MB az élő enkóderhez
- Qwen3-ASR: 0.9–2.4 GB (variánstól függően)
- Sortformer (diarizáció): kb. 250 MB
A fájlok a standard Hugging Face cache-be kerülnek, így például egy Mac alkalmazás a sandboxon kívül is megoszthatja őket Python és más eszközökkel.
Beszélőazonosítás (speaker diarization)
AnySpeechRecognizer hozzáad egy SpeakerDiarizer modult, amely az NVIDIA Streaming Sortformer modelljét futtatja Core ML-en az Apple vagy Parakeet transcriberk mellett, ugyanazon idővonalon. A diarizer akár négy beszélőt követ nyomon, még átfedő beszéd esetén is, és egy SpeakerTimeline hozzárendeli a szavakat a beszélőkhöz, így beszélő szerinti átirat készíthető. Alapértelmezettként Sortformer v2-t használ; választható a v2.1 is.
Teljesítménymérések
A csomag mérési eredményei egy M4 Max Mac Studio (macOS 27.0.1) gépen végzett hear parancs alapján a LibriSpeech fájlokon (3–8 perc) a következők:
- Parakeet v3, file: test-clean 1.55%, test-other 2.78%
- Parakeet v3, live: test-clean 4.73%, test-other 4.29%
- Parakeet Ultra, file: 1.66% / 2.55%
- Parakeet Ultra, live: 2.65% / 3.28%
- Parakeet Unified, file: 1.43% / 2.19%
- Parakeet Unified, live: 1.45% / 2.42%
- Apple transcriber, file: 2.12% / 3.97%
Átviteli idők és memóriaigények a Parakeet esetén: egy órányi audio fájl kb. 20–40 másodperc alatt transzkribálható, élő feldolgozásban kb. 1.5–2.5 percet vesz igénybe; Core ML modellek egyszeri fordítás után nagyjából 100 MB memóriát használnak. Qwen3-ASR jóval lassabb és több GB memóriát igényel. Találkozók és átfedő beszéd nehéz terület: AMI felvételeken minden motor esetében a word error rate 23% fölötti volt.
A szerzők hangsúlyozzák, hogy ezek az adatok egy gépen és néhány adatkészleten alapulnak, és javasolják, hogy mindenki mérje le saját hardverén.
AnyDecisionModel részletek
AnyDecisionModel egy Swift API a döntéshozatalhoz: igen/nem, többválasztós és skálázott (pontozásos) kérdésekre ad típusos visszatérési értékeket és a válaszok valószínűségeit. A DecisionSession modell- és állapotvezérelt: minden kérdés egy adott állapotra (szöveg vagy JSON) vonatkozik, a kérdések függetlenek egymástól, és egyszerre is feladhatók csoportban (batch).
Példák a használatra a cikkben található Swift kódrészletekkel: a session.probability(of:) egy Double-t ad vissza, a session.choice(...) Choice<T>-t a választott esettel és opciókra vonatkozó valószínűségekkel, a session.score(...) pedig Score objektumot ad szintek és valószínűségek mellett.
Demo: Emoji Magnet
Az Emoji Magnet egy macOS demonstrációs alkalmazás, amely 343 emotikon közül emel ki az adott kifejezésnek megfelelőt. Az app minden emotikonra egy igen/nem kérdést tesz fel a modellnek, a Jev hosztolt backend használatával az összes 343 kérdés egyetlen kérésben válaszolható meg, így a vizuális visszajelzés ~0.5 másodperces késéssel jelenik meg. Lokálisan MLX backenddel Qwen3 4B használható, prefix cache-sel kb. 16 kérdést dolgoz fel egy előrehaladási passban; M4 Max gépen csoportonként ~0.45 másodpercet vesz igénybe, az egész 343-as halmaz feldolgozása ~10 másodpercet.
Döntéshalmazok és Clef döntési fejek
A szabványos next-token valószínűségi megközelítés általános modellekkel működik, de ezek gyakran nem voltak kifejezetten döntésekre trenírozva. Cloudflare Clef modellcsaládja például döntési fejet (decision head) hoz: a modell egy előre betanított döntési fejet használ, amely egyszerre ad vissza valószínűségeket több, típusosított kérdésre. A cég Clef-Flash 9B változata is említésre kerül; AnyDecisionModel MLXHeadDecisionModelként futtatja Clef-Flash-t MLX-szel.
A Clef 4-bit változata körülbelül 6.2 GB letöltés, és a model card legalább 16 GB memóriát javasol.
Kalibrálás és megbízhatóság
A csomag támogatja a kalibrációt (Calibration), amely hőmérsékletet és torzítást (bias) alkalmaz a válaszokra, különösen igen/nem esetén. Javasolt külön adatkészleteket használni a kalibráció illesztéséhez és az eredmények értékeléséhez. A next-token backendeinél engedélyezhető rotationDebiasing is, ami minden lehetséges opció-rotációt egyszer lekérdez és átlagolja a valószínűségeket, de ez extra promptértékeltést igényel.
A lokális next-token backends emellett minden választ mellé ad egy confidence értéket a valószínűségek entrópiája alapján — ez a bizalom koncentráltságát méri, nem a helyességet.
Támogatott back-endek
AnyDecisionModel hat backendet támogat:
- MLX: helyi kis nyelvi modellek Apple siliconon (mlx-swift-lm), modellek a Hubról letölthetők.
- MLX decision heads: Clef-szerű modellek döntési fejjel.
- Core AI: MLX-hez hasonlóan Core AI modellek macOS 27 / iOS 27 rendszeren.
- llama.cpp: helyi GGUF modellek llama.swift-en keresztül.
- Jev: TypeSafe Jev System One API-ját hívja.
- Ollama: System One döntési modellt hív egy helyi Ollama szerverről vagy Ollama cloudból (Ollama 0.35.0+ szükséges, cloud esetén 0.40.5+).
A next-token backendeinél a válaszok címkézése korlátot hoz: max 26 opció (A–Z) többválasztós kérdésnél, és max 10 szint pontozásnál; döntési fejeknél ilyen korlát nincs.
Követelmények és kezdés
- Mindkét csomag Swift 6.2 vagy újabb verziót, és macOS 26 vagy iOS 26 vagy újabbat igényel.
- Parakeet/Sorformer runtime és az MLX backend Apple silicon-t igényelnek.
- AnyDecisionModel MLX build feladatokhoz Xcode Swift 6.4+ és Metal toolchain; Core AI-hoz Xcode 27 és OS 27 runtime szükséges.
- Egy példa Package.swift dependency:
dependencies: [ .package(url: "https://github.com/mattt/AnySpeechRecognizer", from: "0.1.0"), .package(url: "https://github.com/mattt/AnyDecisionModel", from: "0.6.0", traits: ["MLX"]) ]
Megjegyzés: jelenleg AnyDecisionModel CoreAI trait nem kombinálható az AnySpeechRecognizer-rel bizonyos függőségi okok miatt (coreai-kit 0.7.3 és swift-huggingface verziók közötti eltérés).
Eszközök és példaprojektek
-
AnySpeechRecognizer tartalmaz egy parancssori eszközt, hear, amely lokális fájlokat transzkribál, beszélőket címkéz és kiértékeli az eredményeket. Minden hear parancshoz meg kell adni a --backend opciót (apple, parakeet vagy qwen), és elő kell készíteni a modelleket a hear prepare paranccsal.
-
AnyDecisionModel-Examples tartalmaz példákat, köztük az Emoji Magnet demót.
Záró megjegyzés
A csomagok nyílt fejlesztés alatt állnak: a szerzők várják a visszajelzéseket, issue-kat és pull requesteket a GitHub-tárhelyeken. Köszönetet mondanak többek között az NVIDIA-nak (Parakeet, Sortformer, NeMo), Moondreamnek (Parakeet Ultra), FluidInference-nek (konverziós munkafolyamatok dokumentálása) és Cloudflare-nek (Clef).



