音声認識(ASR)— sherpa-onnx 認識フレームワークの概要
概要
sherpa-onnx は、ONNX Runtime をベースとしたオープンソースの音声認識ツールキットです。Paraformer、Conformer、Zipformer など複数の音声認識モデルに対応しています。ASR モジュールでは、sherpa-onnx を音声認識のコアエンジンとして使用しています。
公式リポジトリ:https://github.com/k2-fsa/sherpa-onnx
公式ドキュメント:https://k2-fsa.github.io/sherpa/onnx/
特長
- 複数モデルに対応:Paraformer、Conformer、Zipformer の各モデルに対応しています
- 多言語に対応:中国語、英語などの言語に対応しています
- 高性能:ONNX Runtime ベースで、さまざまなハードウェアアクセラレーションに対応しています
- クロスプラットフォーム:Windows、Linux、macOS などの OS に対応しています
- 軽量:エッジデバイスへのデプロイ向けにモデルが最適化されています
- リアルタイム認識:ストリーミング音声認識に対応しています
ASR モジュールでの利用
使用モデル
ASR モジュールでは、以下の sherpa-onnx モデルを使用しています。
- 音声認識モデル:Paraformer 中国語モデル
- モデルディレクトリ:
models/asr/sherpa-onnx-paraformer-zh-2024-03-09 - モデルファイル:
model.int8.ort - トークンファイル:
tokens.txt
- VAD モデル:Silero VAD モデル
- モデルファイル:
models/vad/silero_vad.onnx
組み込み方法
import sherpa_onnx
# VAD を初期化
vad_config = sherpa_onnx.VadModelConfig()
vad_config.silero_vad.model = "models/vad/silero_vad.onnx"
vad = sherpa_onnx.VoiceActivityDetector(vad_config, buffer_size_in_seconds=100)
# ASR を初期化
recognizer = sherpa_onnx.OfflineRecognizer.from_paraformer(
paraformer="models/asr/sherpa-onnx-paraformer-zh-2024-03-09/model.int8.ort",
tokens="models/asr/sherpa-onnx-paraformer-zh-2024-03-09/tokens.txt",
num_threads=2,
sample_rate=16000,
feature_dim=80,
decoding_method="greedy_search"
)
# 音声を認識
stream = recognizer.create_stream()
stream.accept_waveform(16000, audio_data)
recognizer.decode_stream(stream)
text = stream.result.text
モデルの最適化
量子化
ASR モジュールで使用するモデルには INT8 量子化が施されており、モデルサイズの削減と推論の高速化を実現しています。
- 元のモデル:
model.onnx - 量子化モデル:
model.int8.ort
パフォーマンスチューニング
- スレッド数:
num_threadsパラメーターで推論スレッド数を調整します - サンプリングレート:16kHz のサンプリングレートに統一しています
- 特徴量の次元:80 次元の特徴量を使用しています
対応モデルの種類
ストリーミングモデル
- Zipformer
- Conformer
- LSTM
非ストリーミングモデル
- Paraformer
- Whisper
- TDNN
ハードウェアアクセラレーション
sherpa-onnx は、さまざまなハードウェアアクセラレーションのバックエンドに対応しています。
- CPU:デフォルトでは CPU で推論します
- CUDA:NVIDIA GPU によるアクセラレーション
- CoreML:Apple デバイスによるアクセラレーション
- DirectML:Windows デバイスによるアクセラレーション
ASR モジュールでは、クロスプラットフォームの互換性を確保するため、デフォルトで CPU 推論を使用しています。
API の使い方
オフライン認識
# 認識器を作成
recognizer = sherpa_onnx.OfflineRecognizer.from_paraformer(...)
# 音声ストリームを作成
stream = recognizer.create_stream()
# 音声データを入力
stream.accept_waveform(sample_rate, audio_data)
# 認識を実行
recognizer.decode_stream(stream)
# 結果を取得
result = stream.result.text
オンライン認識
# オンライン認識器を作成
recognizer = sherpa_onnx.OnlineRecognizer.from_paraformer(...)
# オンラインストリームを作成
stream = recognizer.create_stream()
# 音声データを入力
stream.accept_waveform(sample_rate, audio_data)
# 認識を実行
recognizer.decode_stream(stream)
# 途中結果を取得
result = stream.result.text
VAD 処理
# VAD を作成
vad = sherpa_onnx.VoiceActivityDetector(vad_config, buffer_size_in_seconds=100)
# 音声データを入力
vad.accept_waveform(audio_data)
# 発話区間があるか確認
if not vad.empty():
# 発話区間を取得
samples = vad.front.samples
# 処理済みの発話区間を削除
vad.pop()
モデルの入手
公式の学習済みモデル
sherpa-onnx 公式の学習済みモデルのページからモデルをダウンロードできます:https://k2-fsa.github.io/sherpa/onnx/pretrained_models/index.html
このページでは、さまざまな言語・用途向けの学習済みモデルが提供されています。主なものは以下のとおりです。
- 中国語モデル:
- Paraformer 中国語モデル
- Conformer 中国語モデル
- Zipformer 中国語モデル
- 英語モデル:
- Whisper 英語モデル
- Conformer 英語モデル
- Zipformer 英語モデル
- 多言語モデル:
- Whisper 多言語モデル
- Paraformer 多言語モデル
ダウンロード方法
モデルは以下の方法でダウンロードできます。
- 直接ダウンロード:Web ページからモデルファイルを直接ダウンロードします
- コマンドラインツール:sherpa-onnx が提供するダウンロードスクリプトを使用します
- Python スクリプト:Python スクリプトで一括ダウンロードします
ASR モジュールで使用しているモデル
ASR モジュールでは現在 Paraformer 中国語モデルを使用しています。以下のリンクから入手できます:Paraformer 中国語モデル
カスタムモデル
独自に学習させたモデルを使用することもできます。その場合は、モデル形式が ONNX と互換性があることを確認してください。
メモリ使用量
- モデルの読み込み:約 100MB
- 推論処理:約 50MB
トラブルシューティング
よくある質問
- モデルの読み込みに失敗する
- モデルファイルのパスが正しいか確認してください
- モデルファイルが破損していないか確認してください
- 認識結果が空になる
- 音声のサンプリングレートが 16kHz になっているか確認してください
- 音声データの形式が正しいか確認してください
- パフォーマンスに問題がある
- スレッド数のパラメーターを調整してください
- ハードウェアアクセラレーションの利用を検討してください
ログによるデバッグ
詳細ログを有効にすると、問題の診断に役立ちます。
import logging
logging.basicConfig(level=logging.DEBUG)
ドキュメント