OHF-Voice/speech-to-phrase
Fast and personalized local speech-to-text
Speech‑to‑Phrase – Home Assistantに特化した音声認識システム
何であるか – 任意の音声を文字起こししようとするのではなく、「ユーザーが発話したのは、既知のコマンドフレーズのどれか?」 という問いに答える、ローカルで実行される音声認識システムです。Home Assistantのエンティティ、エリア、フロア名を含む、事前に定義されたコマンドテンプレートと照合することで、発話内容を特定します。
なぜ存在するか – ホームオートメーションでは、通常、限られた明確なコマンドセット(例:キッチンの照明を点ける、買い物リストにリンゴを追加するなど)を認識するだけで十分です。このように語彙を制限することで、高速な処理、オフライン動作、そしてHome Assistantで使用している正確な名前に対応したカスタマイズが可能になります。
動作原理(概要)
- 文のテンプレート – 事前に書かれた言語ファイル(YAML)が、発話可能なコマンドを記述します。このリポジトリには多数の言語用テンプレートが同梱されており、独自のものも追加可能です。
- 動的展開 – 起動時に、Home Assistantに公開されたエンティティ、エリア、フロア名とテンプレートがマージされ、すべての可能な発話表現を表す hassil テンプレートファイルが生成されます。
- 有限状態トランスデューサー(FST) – Rhasspyの白書で紹介された手法を使用して、コンパクトなテンプレートをOpenFSTとOpenGRMを用いてFSTにコンパイルします。これにより、すべての文を列挙せずに、膨大な組み合わせ空間を効率的に表現できます。
- Kaldi音響モデル – FSTをKaldi用の言語モデルに変換します。Kaldiはオープンソースの音声認識ツールキットです。組み込みの発音辞書とPhonetisaurusモデルにより、既知・未知の単語に対して音声素を提供します。
- 後処理のファジー層 – Kaldiが生の文字起こしを生成した後、小さなファジー照合ステップでわずかな誤り(重複・欠落語)を修正し、エンティティ名がHome Assistantが認識しているものと正確に一致するように強制します。
主な特徴
- ローカル専用 – クラウドサービスは一切不要。ファイアウォールの向こう側でも動作可能。
- 多言語対応 – Kaldiベースのバージョン(v1.4.3)は22言語をサポート。新しいリライト版(
OHF‑Voice/apps内)は最も一般的な言語をカバーしています。 - カスタム文 – コードを変更せずに、独自のYAMLファイルを追加してコマンドセットを拡張可能。
- Docker対応 – 公式コンテナ(
rhasspy/wyoming-speech-to-phrase)が提供され、Wyoming統合を通じてHome Assistantに接続可能。 - 自動モデルダウンロード – 音響モデルと発音ツールは、公開されたHuggingFaceデータセット
rhasspy/rhasspy-speechから自動取得されます。 - Home Assistant統合 – Home AssistantのWebSocket経由で接続し、長期間有効なアクセストークンを使用します。
クイックスタート(手順)
- インストール – Home AssistantのSupervisorストアからアドオンを追加するか、READMEに記載されたDockerコマンドを実行します。
- 認証情報の提供 –
--hass-websocket-uriと--hass-tokenを指定して、サービスがエンティティを読み取れるようにします。 - (オプション)カスタム文 – 言語固有の
sentences.yamlファイルを含むディレクトリを作成し、--custom-sentences-dir /path/to/dirで起動します。 - 実行 – サービスは必要な音響モデルをダウンロードし、FSTを構築、Kaldi言語モデルを訓練して、ポート10300で音声認識を開始します。
- 利用 – 音声をWyomingエンドポイントに送信。認識結果として一致したフレーズが返され、Home Assistantがそれを自動化に変換できます。
現在サポートされている言語(Kaldi v1.4.3)
英語、フランス語、ドイツ語、オランダ語、スペイン語、イタリア語、ロシア語、チェコ語、カタロニア語、ギリシャ語、ルーマニア語、ポルトガル語(ポルトガル)、ポーランド語、ヒンディ語、バスク語、フィンランド語、モンゴル語、スロベニア語、スワヒリ語、タイ語、トルコ語。
拡張・カスタマイズ方法
- 新しいエンティティ名の追加 – デバイスをHome AssistantのAssist機能に公開するだけで、自動的に反映されます。
- 新しいコマンドテンプレートの作成 –
speech_to_phrase/sentences/<lang>/sentences.yamlのフォーマットに従うか、カスタムテンプレートディレクトリから独自のものを提供します。 - 新しい言語の追加 – 発音辞書と音響モデル(または既存のKaldiモデルの再利用)を提供し、文のテンプレートを追加してください。言語サポートの進捗状況はイシュー #149 を参照してください。
プロジェクトの現在の状態
このリポジトリ内のKaldiベースのコードはバージョン1.4.3で凍結されています。開発は**OHF‑Voice/apps** モノレポに移行しており、制約付きCTCデコーダー、Home Assistantのインテントを文のソースとして使用、コマンド選択用のWeb UIを備えた新しい実装が進行中です。
どのような人に向いているか
- オフラインでプライバシーを守りながら音声制御を希望するホームオートメーション愛好家。
- Home Assistantのカスタム音声アシスタントを開発し、公開しているエンティティ名を正確に理解できる認識器が必要な開発者。
- コマンドセットが限定的である場合に、クラウドベースの音声認識の軽量な代替手段を探している人。
リンク
- アドオンバッジ – Home Assistant Supervisorから迅速にインストール可能。
- Dockerイメージ –
rhasspy/wyoming-speech-to-phrase。 - Home Assistantインテントリポジトリ – 新しいリライト版の文のテンプレートの元。
- Rhasspy白書 – FSTコンパイルの基盤技術。
- イシュー #149 – 言語サポートと移行に関する状況のトラッカー。
関連
- プロジェクト
- プロジェクト
- プロジェクト
- プロジェクト
- プロジェクト