HumansXドキュメントセンター 公式サイトへ ↗

音声テキスト変換 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 モデルを使用しています:

  1. 音声認識モデル: Paraformer 中国語モデル
  • モデルディレクトリ: models/asr/sherpa-onnx-paraformer-zh-2024-03-09
  • モデルファイル: model.int8.ort
  • Tokens ファイル: tokens.txt
  1. 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

パフォーマンスチューニング

  1. スレッド数: num_threads パラメータで推論スレッド数を調整します
  2. サンプリングレート: 16kHz のサンプリングレートに統一します
  3. 特徴量の次元: 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

このページでは、さまざまな言語・用途の事前学習済みモデルが提供されています。例えば次のようなものがあります:

  1. 中国語モデル:
  • Paraformer 中国語モデル
  • Conformer 中国語モデル
  • Zipformer 中国語モデル
  1. 英語モデル:
  • Whisper 英語モデル
  • Conformer 英語モデル
  • Zipformer 英語モデル
  1. 多言語モデル:
  • Whisper 多言語モデル
  • Paraformer 多言語モデル

ダウンロード方法

モデルは次の方法でダウンロードできます:

  1. 直接ダウンロード: Web ページからモデルファイルを直接ダウンロードします
  2. コマンドラインツール: sherpa-onnx が提供するダウンロードスクリプトを使用します
  3. Python スクリプト: Python スクリプトで一括ダウンロードします

ASR モジュールで使用しているモデル

ASR モジュールでは現在 Paraformer 中国語モデルを使用しています。次のリンクから入手できます: Paraformer 中国語モデル

カスタムモデル

独自に学習したモデルも使用できます。モデル形式が ONNX と互換性があることを確認するだけで構いません。

メモリ使用量

  • モデルの読み込み: 約 100MB
  • 推論処理: 約 50MB

トラブルシューティング

よくある問題

  1. モデルの読み込みに失敗する
  • モデルファイルのパスが正しいか確認します
  • モデルファイルが破損していないか確認します
  1. 認識結果が空になる
  • 音声のサンプリングレートが 16kHz か確認します
  • 音声データの形式が正しいか確認します
  1. パフォーマンスの問題
  • スレッド数のパラメータを調整します
  • ハードウェアアクセラレーションの利用を検討します

ログによるデバッグ

詳細ログを有効にすると、問題の診断に役立ちます:

import logging
logging.basicConfig(level=logging.DEBUG)

さらに学ぶために