Eszközök

Mesterséges intelligenciával generált szöveg

AnySpeechRecognizer és AnyDecisionModel: nyílt modellek hangfeldolgozásra és döntéshozatalra Apple platformokon

A bejelentés főszereplői az AnySpeechRecognizer és az AnyDecisionModel csomagok, melyeket mattt fejlesztett Swift alapú alkalmazásokhoz Apple platformokra.

AnySpeechRecognizer és AnyDecisionModel: nyílt modellek hangfeldolgozásra és döntéshozatalra Apple platformokon

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).