🤗

ReazonSpeech NeMo ASRでバッチ推論で音声認識

2024/10/21に公開

この記事でやること

日本語ASRモデルで有名なReazonSpeechのNeMo ASRをWindowsでバッチ推論で(多分)高速に一気に複数ファイルを書き起こしします。

公式ドキュメント のやり方だと推論がバッチ1つ1つで、しかもファイルを保存し直す処理とかも入っており、複数ファイルのバッチ推論ができず、ちょっと遅いです。

環境構築

WSL使わずに素のWindowsで動きます(重要)。コマンドはWindowsと uv 使用前提です。

uv venv
uv pip install torch --index-url https://download.pytorch.org/whl/cu124
uv pip install setuptools wheel pip -U
uv pip install Cython

最後の2つが重要、最近の何かでコケるのでちょっと回り道が必要

git clone https://github.com/reazon-research/ReazonSpeech.git
.venv\Scripts\activate
pip install ReazonSpeech/pkg/nemo-asr

最後はビルド関係の影響でuvが多分使えないので遅い。

推論コード

公式で用意されているインターフェース だと単一ファイルバッチサイズ1が前提となっており、バッチ推論にたどり着かない、のでNeMo ASRモデルのtranscribeを直接呼び出せばできる。

import json
from pathlib import Path

from nemo.collections.asr.models import EncDecRNNTBPEModel

from reazonspeech.nemo.asr import load_model

if __name__ == "__main__":
    # NeMo ASRモデルの初期化
    model: EncDecRNNTBPEModel = load_model()

    # あるフォルダに入っているwavファイルを一気に書き起こししたい
    audio_root = Path("path/to/audio/directory")
    audio_files = [str(f) for f in audio_root.rglob("*.wav")]

    results = model.transcribe(audio_files, batch_size=32)  # ここでバッチサイズ指定
    print(results[0])

最後の results には0番目と1番目からなり、よくわかっていないが内容は初期設定だと同じなので、[0]のところに audio_files の並びに対応した書き起こし結果 list[str] が返ってくる。

詳しくは transcribe() メソッドの 公式説明 を読んでください。ワーカー数指定とかもできるのでたぶん最適化すればもうちょっといろいろ早くなる。

Discussion