Appleの新しいSpeechAnalyzerの仕組みから、カスタム語彙が消えたわけではありません。重要なのはモジュールの選択です。Appleは、AnalysisContext.contextualStringsをDictationTranscriber向けの機能として明記しています。SpeechTranscriberを中心に実装する場合、同じコンテキストを渡せば語彙も同じように扱われるとは考えないでください。

要点:文脈に応じた語句を認識に使う設計なら、DictationTranscriberを検討します。語句の一覧を短くし、各フレーズも簡潔にします。必ず置き換わる辞書ではなく、認識されやすくするヒントとして扱ってください。

文字起こしモジュールが2つあり、互換性がありません

iOS 26 の Speech フレームワークは、文字起こしをモジュラーにします。 SpeechTranscriber は、Apple の一般的な会話用の汎用文字起こし機です。 DictationTranscriberはシステムの音声入力により近く、追加の精度制御を提供します。

必要な用途まず評価するモジュール理由
一般的な会話/長文文字起こしSpeechTranscriberAppleは、汎用音声認識モジュールとして記述しています。
アプリ固有の名前や用語を含む短い音声入力DictationTranscriberAppleはこのモジュールでAnalysisContext.contextualStringsを明示的に文書化しています。
カスタム発音/言語モデルDictationTranscriberまた、SFSpeechLanguageModel によって裏付けられたカスタマイズされた言語コンテンツのヒントも公開されます。

contextualStringsの実際の動き

AnalysisContext.contextualStrings は、コンテキスト文字列タグでグループ化された辞書です。 Apple は、これらの単語やフレーズを DictationTranscriber と併用することで、アプリ固有の名前、製品、場所、ドメイン用語、または珍しい単語が認識される可能性を高めることができると述べています。

let context = AnalysisContext()
context.contextualStrings[.general] = [
    "Simple Memo",
    "Obsidian",
    "SpeechAnalyzer"
]

try await analyzer.setContext(context)

実際には3つの限界が重要です:

  • フレーズは簡潔に保ってください。 Appleは、可能な限り1語または2語を推奨します。
  • すべてのタグで、合計を100フレーズ以下に保ってください。
  • あくまでヒントで、保証ではありません。APIは認識結果を誘導するもので、指定どおりの文字起こしを保証しません。

setContext はコンテキストを置き換えます — 追加されません

SpeechAnalyzer.setContext(_:) は、アナライザーの現在のコンテキストオブジェクトを置き換えます。 新しいグループを追加する際に以前のフレーズを保持したい場合は、使用したい完全な新しいコンテキストを構築し、それを設定してください。

let next = AnalysisContext()
next.contextualStrings[.general] = baseTerms + currentScreenTerms
try await analyzer.setContext(next)

これによりタグも有用になり、独自の状態でカテゴリを維持し、繰り返しのsetContext呼び出しを増分として扱うのではなく、意図的にコンテキストを再構築することができます。

SpeechTranscriberはどうですか?

Apple の現在の SpeechTranscriber に関するドキュメントでは、contextualStrings がそのモジュールの精度制御の一つとして記載されていません。 対照的に、DictationTranscriber のドキュメントは開発者に対し、AnalysisContext を作成し、contextualStrings に単語を追加するよう明示的に指示しています。

その区別は安全な実装の境界です:対象のOS、ロケール、デバイスで必要な正確な動作を独自に検証していない限り、文脈的語彙を中心にSpeechTranscriberパイプラインを設計しないでください。

長い発話でカスタム語彙を使いたい場合

すべてに当てはまる移行方法はありません。既存のSFSpeechRecognizerの実装がcontextualStringsに依存している場合、iOS 26への移行は、APIを機械的に改名する作業ではなく、モジュールの選定と回帰テストとして進めます。

  1. DictationTranscriberが、必要な録音時間、遅延、言語、対応端末の範囲に合うか試します。
  2. より豊かな語彙が必要な場合は、カスタマイズされた言語モデルオプションを評価してください。
  3. いずれの新しいモジュールパスも製品が依存する動作を保持していない場合は、そのユースケースで実績のある SFSpeechRecognizer パスを保持し、他のパスは別途移行してください。

選択の基本方針

会話を重視するなら:SpeechTranscriberから始めます。語彙を重視するなら:DictationTranscriberの評価から始めます。語彙が重要な場合は、モジュールが同等だと仮定せず、実際に提供する単語と言語で認識を測ってください。

関連実装ガイド

リアルタイムのマイク入力、モデルの準備、PCM変換、未確定・確定結果、停止と確定処理、Swift 6の並行処理については、iOS 26 SpeechAnalyzerのマイク入力ガイドをご覧ください。動かせるサンプルはGitHub(MITライセンス)で公開しています。

一次情報源