
2つのSwiftパッケージを公開
AnySpeechRecognizerとAnyDecisionModelは、Swiftアプリから音声認識と分類・評価を利用するためのパッケージです。どちらもオープンモデルをHugging Face Hubから取得し、端末上で実行できます。
AnySpeechRecognizerはAppleのSpeechAnalyzerに似たAPIを保ちながら、音声認識エンジンを選べるようにします。AnyDecisionModelは、文章を生成させて回答を読み取る代わりに、選択肢ごとの確率を使って判定結果を返します。
音声認識ではNVIDIAのParakeetやAlibabaのQwen3-ASRをCore MLで動かし、判断ではMLX、Core AI、llama.cppなどのバックエンドを使えます。端末内モデルのほか、JevやOllamaを利用する構成もあります。
音声認識エンジンを切り替える
AppleのSpeechAnalyzerは音声バッファーを受け取り、SpeechTranscriberなどのモジュールへ処理を振り分けます。入力と結果の取得は非同期に進み、アプリはAsyncSequenceを通じて認識結果を読み取れます。
途中経過を表示するvolatile results(暫定結果)を有効にすると、まず暫定的な文字列が届き、音声の文脈が増えた段階で確定結果に置き換わります。言語モデルのアセットはAssetInventoryで必要に応じて取得し、アプリ側で管理できます。
AnySpeechRecognizerはこのAPIの構成を踏襲し、AppleのSpeechを既定のエンジンとして、ParakeetやQwen3-ASRを選択できます。Parakeetは25の欧州言語を扱い、Qwen3-ASRは30言語と22の中国語方言に対応します。日本語と韓国語はQwen3-ASRの対応言語に含まれます。
話者識別と認識速度
音声認識に加え、AnySpeechRecognizerは話者ダイアライゼーション、つまり発話者が誰かを時間軸に沿って識別する機能を備えます。NVIDIAのStreaming Sortformerを使い、最大4人の話者が重なって話す場合も扱います。
公開された評価では、M4 Max搭載Mac StudioとmacOS 27.0.1を使い、LibriSpeechの3〜8分の音声を計測しました。Parakeet Unifiedのファイル入力での単語誤り率はtest-cleanで1.43%、test-otherで2.19%でした。Appleの音声認識はそれぞれ2.12%、3.97%でした。
LibriSpeechは約1,000時間の英語音声コーパスで、読み上げ音声を収録しています。音声はLibriVoxの朗読書籍から作られ、区切りとテキストの対応が整えられています。一方、AMIの会議録音には話者が重なる音声が含まれ、評価に使った全エンジンの単語誤り率が23%を超えました。
判定結果を確率付きで扱う
AnyDecisionModelでは、文章の状態に対して「緊急性があるか」「どの部署が担当するか」「顧客の不満度はどれほどか」といった独立した質問を行えます。回答は真偽値、型付きの選択肢、段階評価として受け取り、選択肢ごとの確率や信頼度も参照できます。
MLXバックエンドは、許可された回答に対応するラベルの確率をモデルから読み取ります。質問文を生成させて後から解析する方式と異なり、あらかじめ定めた回答候補の分布をアプリ側で利用できます。
デモアプリ「Emoji Magnet」は343個の絵文字を並べ、入力した説明に合うものをモデルで選びます。Jevのホスト型バックエンドでは343件の質問を1回のリクエストにまとめ、各フレーズに対する表示更新は約0.5秒です。ローカルのQwen3 4Bを使うMLX構成では、モデル読み込み後に16件を処理する時間は約0.45秒で、343件全体では約10秒です。











