Vosk:リアルタイムの音声認識、オフライン対応 ligne
Vosk(alphacep/vosk-api、Apache 2.0ライセンス、Alpha Cepheiが開発)は、オフラインの音声認識エンジンで、連続的に音声をテキストに変換します。言語ごとに約50MBのポータブルモデルを提供しており、フランス語の軽量モデル vosk-model-small-fr-0.22 は41MBです。20言語以上をサポートし、Raspberry Piやスマートフォンで動作しますが、難解な音声に対してWhisperよりも精度が低いため、ボイスコマンドやリアルタイム入力に限定して使用することを推奨します。
Voskは、Alpha Cephei社が開発した、Kaldiエンジンを基盤とするオフライン音声認識エンジンです。非常に軽量で、ストリーミング処理に対応しています。数十MBのモデルを使い、性能が控えめなプロセッサでも、話すそばから文字起こしを行います。文字起こしの品質で大規模モデルに匹敵するわけではありません。Voskは別の役割を担っており、その機能を簡単に代替することはできません。このガイドでは、公式のフランス語モデル二つに関する数値も含め、プロジェクトが公開している数値を詳しく説明したうえで、Whisperと率直に比較します。
#Voskが異なるやり方で行うこと
定評のある文字起こしモデルはファイルを処理します。録音全体を渡すと、処理が完了してからテキストを返します。一方、Voskはストリームを処理します。音声を小さな単位で受け取り、発話の進行に合わせて部分的な結果、次いで確定した結果を出力します。ストリーミングAPIにより、遅延はほぼゼロです。プロジェクトの公式紹介ページでも、この「zero-latency response with streaming API」を、モデルのサイズと並ぶ中心的な特徴として説明しています。
このアーキテクチャの違いから、ほかの特徴もすべて説明できます。モデルは非常に小さく、CPU上で容易に実行でき、メモリ使用量はRaspberry Piやエントリーモデルのスマートフォンでも対応できる範囲に収まります。一方、認識が難しい音声やノイズの多い音声では、文字起こしの品質は大規模モデルより劣ります。
#数字で見るVosk:フランス語での数値も含めて
お使いのマシンで、プライベートかつ無料のChatGPTを1時間で構築 — LM Studio、Ollama、Open WebUI、ご自身のドキュメント、クラウド不要。
- 永久に利用できるオンラインスペース
- PDF + ファイル
- 生涯アップデート
このプロジェクトは、提供する機能を明確に示しています。公式リポジトリでは、「20+ languages and dialects」の音声認識、Python、Java、Node.js、C#、C++、Rust、Go向けのバインディング、そして50 MBの「ポータブル」モデルが案内されています。より高い精度を求める人向けには、はるかに大きなサーバー用モデルも用意されています。すべてApache 2.0ライセンスで公開されており、プロジェクトで利用するオープンソースの依存関係について法務部門に説明する必要がある場合に、有用な裏付けとなります。
| モデル | サイズ | 単語エラー率(値が低いほど良い) | 想定用途 |
|---|---|---|---|
| vosk-model-small-fr-0.22 | 41MB | 23.95(Common Voice)· 19.30(MTEDX)· 27.25(podcasts) | Android、iOS、Raspberry Pi |
| vosk-model-fr-0.22 | 1.4 GB | 14.72(Common Voice)· 11.64(MLS)· 13.10(MTEDX) | サーバー、より高い精度 |
サイズの差(41 MB に対し 1.4 GB)により、精度の差が明確に表れ、テストデータによって単精度から双精度に近づくような誤字率の変化が見られます。これは Vosk の中心的な妥協点であり、数値で示されているように、軽量である一方で誤りの確率が高くなるというものです。限定された語彙を持つ音声コマンドには問題ありませんが、インタビューのテキスト記録には不適切です。公式モデルを超えて、フランスのエディターリナゴーラが運営する LinTO プロジェクトは、Vosk と互換性を持つフランス語モデルを公開しています。フランス語プロジェクトにおいて複数のソースを比較し選定する際の重要な参考となります。
4つのテストセット(Common Voice、MTEDX、ポッドキャスト、MLS)の詳細は、そのまま受け取るべき単なるランキングではなく、方法論上の警告として読む価値があります。同じモデルでも、テストセットによって単語エラー率が2倍近く変動し、軽量版ではMTEDXで19.30、ポッドキャストで27.25となっています。スタジオで録音されたクリアな音声と、環境騒音の中で録音された会話では、どのモデルを選んでも品質が異なります。これは、製品仕様書に記載されている単一の平均値に頼るのではなく、実際の使用状況を反映した録音でテストすべき理由の一つです。
#リアルタイム処理こそ真の強み
- レイテンシー
- 話している間、テキストが表示され、これにより音声コマンドやリアルタイムの字幕が可能になります。
- 部分的な結果
- アプリケーションは発話が終わる前に反応できます。ウェイクワードや短いコマンドには欠かせない機能です。
- 必要容量
- フランス語向けの軽量モデルは41 MBなのに対し、サーバー版は1.4 GB、汎用の大規模モデルは数GBになることも多くあります。
- 語彙が限定されている
- 認識対象を想定される単語のリストに限定でき、これによりコマンドの認識精度が大幅に向上します。
この点は過小評価されています。アプリケーションを音声で操作する場合、可能となるコマンドを五十個に制限することで、中程度のエンジンを非常に信頼できるものに変えることができます——一方、一般向けの大きなモデルは、類似する発音の間で迷い続けます。これは、公式ドキュメントが「再構成可能な語彙」という機能を、発話者の識別と並んでエンジンの標準機能として挙げていることからも確認できます。この規模のエンジンでは、こうした機能を標準で提供しているものに多くありません。
#VoskまたはWhisper
| 基準 | Vosk | Whisperおよびその派生モデル |
|---|---|---|
| モード | 連続ストリーミング | ファイル |
| レイテンシー | ほぼゼロ(APIストリーミング) | 処理後 |
| モデルのサイズ | バリエーションにより41 MB~1.4 GB | 数百MBから数GB |
| ハードウェア | 低スペックプロセッサ、組み込み型 | 十分な性能のプロセッサ、GPUがあると望ましい |
| 認識が難しい音声での精度 | まずまずの精度、測定済み(WER ≈ 15–28、モデルとテストによって異なる) | 明らかに優れています |
| 句読点と書式設定 | 限定的 | 良好 |
| 選択に適した用途 | 音声コマンド、リアルタイム処理、組み込み用途 | 会議、インタビュー、動画の文字起こし |
あらゆる場面で優位に立つものはありません。本格的な処理パイプラインでは、両方を併用することがよくあります。ユーザーが話している間はVoskでコマンドを検出したり、即座にフィードバックを表示したりし、録音が終わって計算リソースが利用可能になったら、Faster-Whisperのようなより重いモデルで、音声により忠実な最終的な文字起こしを生成します。
#優位に立つケース
- 01アプリケーションの音声コマンド制限された語彙、最小限の遅延、ネットワーク依存なし
- 02リアルタイム字幕社内会議、講演、リアルタイムのアクセシビリティ。
- 03組み込みハードウェアミニコンピューターや単体で動作する機器など、大型モデルが収まらない環境——プロジェクトはRaspberry PiとAndroidを対象として明記しています。
- 04GPUなしでの厳格なプライバシー保護何も外部に送信してはならず、グラフィックスカードも搭載していない普通のパソコン。
この4つのケースには共通点があります。ほぼゼロの遅延と、控えめな性能のハードウェアでも扱えるリソース使用量を得る代わりに、テキストの品質は最高でなくても、十分な水準であれば許容できるという点です。逆に、最高の品質が求められ、数秒の遅延は許容できるという条件になると、Faster-Whisper のようなファイルベースのモデルが再び優位になります。そのため、適切に設計された一連の音声処理システムでは、両者は一方が他方を置き換えるよりも、併用されることが多いのです。
#オーディオフォーマットとテキストのエクスポート
実際には、文字起こしのプロジェクトがエンジンの呼び出しだけで完結することはありません。受け取った入力形式を読み込み、必要に応じて変換したうえで、後続の処理で利用できる形式で結果を書き出す必要があります。また、複数の録音提供元を同時に扱う必要があることもよくあります。上で引用した研究に記載されているパイプラインは、この一連の流れを示しています。Pythonの前処理モジュールで一般的な複数の音声形式(WAV、MP3、FLAC、OGG)を読み込み、VoskのKaldiRecognizerで音声認識を行い、得られたテキストを、読み直しや保存にすぐ使える構造化された文書として書き出します。
この点が重要なのは、Vosk自体が入力として特定の形式の音声ストリーム(モノラルPCM、通常16 kHz)を必要とし、どんなファイルでもそのまま受け付けるわけではないためです。そのため、携帯電話での録音、ビデオ会議からのエクスポート、さまざまな出所の圧縮ファイルなど、多様な音声を扱うプロジェクトでは、ほぼ必ずエンジンに渡す前に変換処理が必要になります。このガイドの前半で述べた、明示的なエラーが出ないまま認識精度が低下する不具合は、エンジン自体よりも、この変換処理に潜んでいることが多いのです。
#言語モデルをカスタマイズする
内部では、Voskの音声認識は、音声認識エンジンKaldiから派生した独自のKaldiRecognizerを利用しています。これにより、新しい言語や分野に対応するたびにゼロから作り直すのではなく、Kaldiのカスタマイズ用ツールのエコシステム全体を継承できるのです。このテーマに関する最近の研究では、カスタマイズしたVoskパイプラインを用いて、用途に合わせた言語モデルの具体的な効果を測定しました。カスタマイズしたモデルは、特に専門用語、強いアクセント、ノイズの多い音声において、単語誤り率を低下させます。
フランス語のプロジェクトでは、これによって、軽量モデルとサーバー用モデルのどちらを選ぶかという選択にとどまらない、具体的な方法が見えてきます。汎用的な語彙だけで済ませるのではなく、業務用の語彙集(製品名、組織内の専門用語、頭字語、地域固有の固有名詞)を言語モデルに組み込む方法です。単にダウンロードするより手間はかかりますが、特定の分野でVoskの運用時の品質を大規模モデルの品質に最も近づけられる手段です。しかも、大規模モデルに伴う計算コストや遅延を負担する必要はありません。
#実装
仕組みはシンプルです。パッケージをインストールし(Pythonでは pip install vosk)、必要な言語のモデルをダウンロードします。音声ストリームを開き、音声データを小分けにしてエンジンに送り、途中結果、続いて最終結果を読み取ります。Python、Java、Node.js、C#、C++、Rust、Go向けのバインディングが用意されています。また、WebSocketサーバーを使えば、Webページやモバイルアプリを、お使いのマシン上で動作するエンジンに接続できます。
本番環境に移行する前に注意すべき点が2つあります。まず、品質は選択した言語モデルに大きく依存します。上の表は目安を示していますが、それを基に仕組みを構築する前に、ご自身の録音データでテストしてください。次に、音声のサンプリングレートをモデルが想定する値に合わせる必要があります。合っていないと、明確なエラーメッセージが出ないまま認識精度が低下します。
- ローカル音声アシスタント:処理の全工程
- ローカルでファイルを高速に文字起こしする
- Kokoroでアシスタントに音声で応答させる
- Whisper + Ollama:100%オフラインの文字起こし
- 出典:Vosk の公式 GitHub リポジトリ
- 出典:Voskモデルカタログ(サイズとスコアを含む)
- 出典:Voskの言語モデルパーソナライズに関する調査
#FAQ
Voskは無料ですか?+
グラフィックカードは必要ですか?+
Vosk か Whisper か?+
フランス語にも対応していますか?認識精度はどの程度ですか?+
認識する語彙を制限できますか?+
組み込み用途のプロジェクトには、どのサイズのモデルを選べばよいですか?+
モデルを変更せずに精度を向上させることは可能ですか?+
ご意見、誤りのご指摘、補足はありますか?ぜひお知らせください。皆さんにとってより良いガイドにするために役立ちます。