Qwen3-ASRのインストールと使用方法
Qwen3-ASRは、音声ファイルから文字起こしを行うローカル音声認識モデルです。
本ページでは、Windows上に専用のPython環境を作成し、Qwen3-ASR-0.6BまたはQwen3-ASR-1.7Bを使って日本語音声を文字起こしする方法を説明します。
環境の作成
ここでは、Qwen3-ASRのPython環境を
D:\qwen3-asr
に作成します。
Windowsのコマンドプロンプトを開き、次を実行します。
D:
mkdir qwen3-asr
cd qwen3-asr
uvがインストールされていない場合は、まずインストールします。
pip install uv
Python 3.12を使って仮想環境を作成します。
uv venv --python 3.12
仮想環境を有効にします。
.venv\Scripts\activate
使用中のPythonを確認します。
where python
python -c "import sys; print(sys.executable)"
次のように表示されれば、正しい仮想環境が使われています。
D:\qwen3-asr\.venv\Scripts\python.exe
Qwen3-ASRのインストール
Qwen3-ASRをインストールします。
uv pip install --python .venv\Scripts\python.exe -U qwen-asr
qwen-asrパッケージを1回インストールすれば、0.6Bモデルと1.7Bモデルの両方を使用できます。
モデルデータは、各モデルを初めて使用したときに自動的にダウンロードされます。
CUDA版PyTorchのインストール
qwen-asrのインストール時にCPU版PyTorchが入る場合があります。
NVIDIA GPUを使用する場合は、CUDA版PyTorchを明示的にインストールします。
uv pip uninstall --python .venv\Scripts\python.exe torch torchvision torchaudio
uv pip install --python .venv\Scripts\python.exe ^
torch torchvision torchaudio ^
--index-url https://download.pytorch.org/whl/cu128
インストール後、GPUが認識されていることを確認します。
D:\qwen3-asr\.venv\Scripts\python.exe -c "import torch; print('PyTorch:',torch.__version__); print('CUDA runtime:',torch.version.cuda); print('CUDA available:',torch.cuda.is_available()); print('GPU:',torch.cuda.get_device_name(0) if torch.cuda.is_available() else 'none')"
正常な例は次のとおりです。
PyTorch: 2.x.x+cu128
CUDA runtime: 12.8
CUDA available: True
GPU: NVIDIA GeForce ...
PyTorchのwheelには必要なCUDAランタイムが含まれるため、通常は同じ版のCUDA Toolkitを別途インストールする必要はありません。ただし、NVIDIAドライバは必要です。
FFmpegの準備
MP4、M4A、MOVなどは、内部の音声がAACなどで圧縮されているため、soundfileから直接読み込めない場合があります。
また、長時間音声の分割にもFFmpegを使用します。
次のコマンドが実行できることを確認してください。
ffmpeg -version
ffprobe -version
動画から手動で16 kHz、モノラル、16 bit PCMのWAVを作成する場合は、次のように実行します。
ffmpeg -i input.mp4 -vn -ac 1 -ar 16000 -c:a pcm_s16le output.wav
Qwen3-ASRの簡単なサンプル
次のプログラムをsample_qwen3_asr.pyとして保存します。
# sample_qwen3_asr.py
import torch
from qwen_asr import Qwen3ASRModel
model = Qwen3ASRModel.from_pretrained(
"Qwen/Qwen3-ASR-0.6B",
dtype=torch.bfloat16,
device_map="cuda:0",
max_inference_batch_size=1,
max_new_tokens=2048,
)
results = model.transcribe(
audio=r"D:\audio\sample.wav",
language="Japanese",
)
print("language:", results[0].language)
print(results[0].text)
実行します。
python sample_qwen3_asr.py
1.7Bモデルを使用する場合は、モデル名を変更します。
"Qwen/Qwen3-ASR-1.7B"
0.6Bモデルと1.7Bモデル
用途に応じて、次のように使い分けます。
モデル |
特徴 |
推奨用途 |
|---|---|---|
Qwen3-ASR-0.6B |
軽量で高速 |
動作確認、比較、小容量GPU |
Qwen3-ASR-1.7B |
文脈判断と認識精度を重視 |
講義、会議、専門的な音声 |
1.7Bモデルでも、未知の専門用語、略語、化学式、数値などが必ず正しく認識されるわけではありません。必要に応じて、後段のLocal LLMに専門用語集や講義資料を与えて校正します。
transcribe_qwen3_asr.py
transcribe_qwen3_asr.pyは、Qwen3-ASRを使って音声ファイルを文字起こしするためのコマンドラインプログラムです。MP4などの動画ファイルは、先にFFmpegでWAVへ変換します。
基本的な実行例は次のとおりです。
D:\qwen3-asr\.venv\Scripts\python.exe transcribe_qwen3_asr.py sample.wav
既定では1.7Bモデルを使用します。
0.6Bモデルを使用する場合は、次のように指定します。
D:\qwen3-asr\.venv\Scripts\python.exe transcribe_qwen3_asr.py sample.wav -m 0.6B
複数ファイルを処理する場合は、globを使用できます。
D:\qwen3-asr\.venv\Scripts\python.exe transcribe_qwen3_asr.py "*.wav" -m 1.7B
出力ファイル
入力ファイルがsample.wavの場合、次の3ファイルを出力します。
sample-time.txt
sample.txt
sample-info.txt
それぞれの内容は次のとおりです。
ファイル |
内容 |
|---|---|
|
タイムスタンプ付き文字起こし |
|
本文とチャンク境界情報 |
|
実行環境、モデル、GPU、入力、処理時間などのJSON |
環境情報には、Python、PyTorch、Transformers、CUDA、GPU、モデル名、処理時間、Realtime factorなどが記録されます。
タイムスタンプ
タイムスタンプを出力する場合は、Qwen3-ForcedAligner-0.6Bも使用します。
既定ではタイムスタンプを有効にしています。
初回実行時には、ASRモデルに加えてForcedAlignerも自動的にダウンロードされます。
タイムスタンプを使用しない場合は、次のように指定します。
python transcribe_qwen3_asr.py sample.wav --timestamps 0
この場合、処理は軽くなりますが、sample-time.txtには正確な時刻情報が入りません。
長時間音声とチャンク境界
ForcedAlignerが扱う音声長とGPUメモリを考慮し、長時間音声は既定で240秒単位に分割します。
文の途中で切れることによる欠落を避けるため、各チャンクの前後を既定で10秒重複させます。
チャンク1の担当範囲:00:00~04:00
実際の認識範囲 :00:00~04:10
チャンク2の担当範囲:04:00~08:00
実際の認識範囲 :03:50~08:10
重複時間は変更できます。
python transcribe_qwen3_asr.py sample.wav --chunk-overlap 15
チャンク長を変更する場合は、次のように指定します。
python transcribe_qwen3_asr.py sample.wav --chunk-seconds 180
境界付近では同じ発話が二重に認識されるため、出力には次のようなマーカーを残します。
[[ASR_BOUNDARY 0001|0002 OVERLAP=10.0s;
LLM: reconcile duplicated or incomplete text across this boundary]]
単純な文字列一致で重複を削除すると、両チャンクの認識結果が少し異なる場合に誤結合する可能性があります。このため、境界情報を残し、後段のLocal LLMで比較・統合できる構造にしています。
Local LLMによる後処理
ASRの生出力は保存したまま、別ファイルとして校正版を作成することを推奨します。
Local LLMには、例えば次のように指示します。
以下は講義音声の文字起こしです。
ASR_CHUNK間には重複音声の認識結果があります。
ASR_BOUNDARYの前後を比較し、重複部分を一つに統合してください。
制約:
・内容を追加、要約、推測しない
・文が途中で切れている場合は、前後から完全な文を採用する
・数値、単位、数式、固有名詞を不用意に変更しない
・指定した専門用語と明らかな同音誤変換だけを修正する
・判断できない部分は[要確認]とする
・最終出力からASR_CHUNKとASR_BOUNDARYマーカーを削除する
講義資料や専門用語集も一緒に与えると、専門用語の校正精度が上がります。
CPUでの実行
GPUを使用できない場合は、次のようにCPUを指定できます。
python transcribe_qwen3_asr.py sample.wav --device cpu --dtype float32
ただし、特に1.7Bモデルは処理に時間がかかります。
トラブルシューティング
ModuleNotFoundError: No module named 'qwen_asr'
インストール先と実行しているPythonが異なる可能性があります。
仮想環境のPythonを明示してインストールします。
uv pip install --python D:\qwen3-asr\.venv\Scripts\python.exe -U qwen-asr
importを確認します。
D:\qwen3-asr\.venv\Scripts\python.exe -c "import qwen_asr; print(qwen_asr.__file__)"
Torch not compiled with CUDA enabled
CPU版PyTorchがインストールされています。
「CUDA版PyTorchのインストール」の手順に従って、CUDA版へ入れ替えてください。
CUDA available: False
まず、次を確認します。
nvidia-smi
続いて、PyTorchのCUDA初期化を確認します。
D:\qwen3-asr\.venv\Scripts\python.exe -c "import torch; print(torch.cuda.device_count()); torch.cuda.init(); print(torch.cuda.get_device_name(0))"
nvidia-smiに
GPU is lost. Reboot the system to recover this GPU
と表示された場合は、Python環境ではなくNVIDIAドライバがGPUを見失っています。作業を保存してWindowsを再起動します。
Format not recognised
例えば、次のようなエラーです。
soundfile.LibsndfileError: Format not recognised
MP4やAACなどをsoundfileが直接読めないことが原因です。
FFmpegを使ってWAVへ変換します。
ffmpeg -i input.mp4 -vn -ac 1 -ar 16000 -c:a pcm_s16le output.wav
GPUメモリが不足する
まず0.6Bモデルを使用します。
python transcribe_qwen3_asr.py sample.wav -m 0.6B
バッチ上限も小さくします。
python transcribe_qwen3_asr.py sample.wav -m 0.6B --max-inference-batch-size 1
タイムスタンプが不要なら、ForcedAlignerを無効にします。
python transcribe_qwen3_asr.py sample.wav -m 0.6B --timestamps 0
参考情報
Qwen3-ASR公式リポジトリ:https://github.com/QwenLM/Qwen3-ASR
Qwen3-ASR-0.6B:https://huggingface.co/Qwen/Qwen3-ASR-0.6B
Qwen3-ASR-1.7B:https://huggingface.co/Qwen/Qwen3-ASR-1.7B