音声テキスト変換 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 ファイル:
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 次元の特徴量を使用します
対応モデルの種類
ストリーミングモデル (Streaming Models)
- Zipformer
- Conformer
- LSTM
非ストリーミングモデル (Non-streaming Models)
- Paraformer
- Whisper
- TDNN
ハードウェアアクセラレーション
sherpa-onnx は複数のハードウェアアクセラレーションバックエンドに対応しています:
- CPU: デフォルトでは CPU で推論
- CUDA: NVIDIA GPU によるアクセラレーション
- CoreML: Apple デバイスでのアクセラレーション
- DirectML: Windows デバイスでのアクセラレーション
ASR モジュールでは、クロスプラットフォームでの互換性を確保するため、デフォルトで CPU 推論を使用しています。
API の使い方
オフライン認識 (Offline Recognition)
# 创建识别器
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
オンライン認識 (Online Recognition)
# 创建在线识别器
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)
ドキュメント