asrbenchmark

【2026年最新】日本語ASRモデル比較:Whisper・Qwen3・Voxtral・ReazonSpeechをRTX5090で徹底ベンチマーク

この記事でわかること: 8種類の日本語音声認識(ASR)モデルを同一条件でベンチマークした一次データを公開。WER・CER・RTFで比較し、「どの用途にどのモデルが最適か」を実体験から解説します。


要約

RTX5090を使って20本(計29秒×20 = 約10分)の自然会話音声を使い、8つのASRモデルを評価しました。総合的な精度・安定性ではopenai/whisper-large-v3-turboqwen/qwen3-asr-1.7bが頭一つ抜け出しています。 速度最優先ならnvidia/parakeet-tdt-0.6b-v3(RTF=0.002)、日本語特化のドメイン適応ならreazon-research/reazonspeech-espnet-v2が有力な選択肢です。

モデルWER↓CER↓RTF↓総合評価
qwen3-asr-1.7b0.18990.14730.034⭐⭐⭐⭐⭐
whisper-large-v3-turbo0.20990.17820.012⭐⭐⭐⭐⭐
reazonspeech-espnet-v20.23420.20070.589⭐⭐⭐⭐
voxtral-mini-4b0.24370.21870.207⭐⭐⭐
parakeet-tdt-0.6b-v30.34650.32350.002⭐⭐⭐
reazonspeech-nemo-v20.35460.33460.020⭐⭐⭐
reazonspeech-k2-v20.46360.44860.026⭐⭐
kotoba-whisper-v2.00.54020.50500.008

テスト環境と評価データについて

ハードウェア・設定

text
GPU: RTX5090
temperature: 0.0
max_new_tokens: 512
language: ja

テストデータセット(20本・各29秒)

このベンチマークが表面的なまとめ記事と異なる最大の理由は、実際のメディア音声を使っているという点です。

  • ニュース読み上げ: 標準的なアナウンサー発話
  • エンタメ(お笑い・バラエティ): フィラー・笑い声・早口が混在
  • ドラマ・アニメ: 感情的な発声、スラング(「てめぇ」「ババー!」等)
  • ビジネス・リアリティショー: 複数話者の重なり

複数話者の重なりや笑い声のノイズを含むことで、実運用に近い難しいシナリオを再現しています。


指標の説明(見慣れない単語の解説)

WER(Word Error Rate:単語誤り率)

text
WER = (置換 + 削除 + 挿入) / 参照単語数

値が小さいほど精度が高い。日本語は英語と違ってスペースで単語が区切られないため、MeCab(形態素解析器)で分かち書きしてからWERを計算しています。また、句読点(、。!?)や記号はモデルごとに付け方が異なるため、評価前にすべて除去して公平な比較を実現しています。詳細は「再現方法」セクションをご覧ください。

CER(Character Error Rate:文字誤り率)

文字単位での誤り率。日本語評価ではWERより信頼性が高いとされます。今回の結果でもWERとCERの順位はほぼ一致しており、両指標の整合性が確認できました。

RTF(Real-Time Factor:リアルタイム係数)

text
RTF = 処理時間 / 音声の長さ

RTF < 1.0 でリアルタイム処理可能。RTF=0.002のparakeetは、29秒の音声を約0.06秒で処理する計算になります。


各モデルの詳細分析

🥇 qwen/qwen3-asr-1.7b — 最高精度(WER: 0.1899)

このモデルの最大の特徴は「補完能力」です。

単なる音の置き換えではなく、文章として成立するように文脈を補完します。息継ぎのタイミングに合わせて句読点が打たれており、まるで書き起こし記者が書いたような仕上がりです。

実際の出力例(具体的な差異):

  • フィラー(「えー」「あの」)を適切に間引きつつ、重要な助詞は保持
  • 20本中、WERが0.5を超えたのは1本のみ。それ以外は0.2以内と安定性が際立っています

注意点:

  • ネットスラングや固有名詞で「空耳」(独自解釈)が発生することがある
  • 平均処理時間0.99秒(RTF=0.034)と、whisperの約3倍の処理時間

🥈 openai/whisper-large-v3-turbo — 安定の汎用性(WER: 0.2099)

群を抜く文脈理解力が強みです。

ReazonSpeech系列が沈黙したり後半を切り捨てていた雑談パートを、ほぼ完璧に書き起こしました。

強み:

  • フィラーを適宜間引きながら、助詞を補完して文章を成立させる
  • 複数話者・ノイズ混在でも崩れにくい

弱点:Hallucination(幻覚)

Whisperには音声のない場所で存在しない文章を生成する「幻覚」現象があります。今回は参照に存在しない「私」という単語が末尾に付加されました。長時間音声での運用時は後処理で検知する仕組みが必要です。


reazon-research/reazonspeech-espnet-v2 — 日本語ドメイン適応(WER: 0.2342)

日本のメディア放送データで学習されており、「トー横」(東横の俗称) のような地名と俗称を文脈で切り分ける能力が実証されました。これはニュース・報道用途で大きなアドバンテージです。

感嘆符(!)・疑問符(?)を積極的に使用し、会話の勢いや感情を再現しようとする傾向があります。

弱点:

  • RTF=0.589と最も遅い(29秒の音声に約17秒かかる)
  • フィラーを積極的にカットするため、フィラー保持が必要な用途には不向き

mistralai/voxtral-mini-4b-realtime-2602 — 読みやすさ優先(WER: 0.2437)

音声の忠実な再現より「読みやすさ」を優先する設計が明確です。

具体例:

  • ぐらいくらい(表記統一)
  • っていうかというのか(口語を書き言葉に変換)

字幕制作や議事録など、可読性が重要な用途に向いています。

重大な懸念点: 1本のファイルでアラビア語のような文字列が突然出力されました。本番運用では言語検証のバリデーション処理が必須です。


nvidia/parakeet-tdt-0.6b-v3 — 超高速処理(RTF: 0.002)

RTF=0.002は今回のベンチマーク最速。 29秒の音声を約0.06秒で処理します。

TDT(Transducer with Dynamic Time Alignment)アーキテクチャの特性上、エネルギーの低い音声や重要度が低いと判断されたトークンをスキップします。この「積極的な省略」がWER=0.3465という精度に影響しています。

向いている用途:

  • リアルタイムキャプションの下書き
  • 大量音声ファイルの高速インデックス作成(精度より速度優先)

向いていない用途:

  • 詳細な議事録、ドラマや会話の完全書き起こし

reazonspeech-nemo-v2 と k2-v2 の比較

両者とも同じReazonSpeechブランドですが、表記スタイルに明確な差があります。

比較項目nemo-v2k2-v2
数字表記13歳(半角)十三歳(漢数字)
英字gps(小文字)GPS
処理速度RTF=0.020RTF=0.026
省略傾向後半が消える中間を省略(中抜き)

nemo-v2は警察用語「マル暴(マルボウ)」を正確に漢字変換できるなど、専門用語への対応力も示しました。


kotoba-whisper-v2.0 — 今回の結果では最下位(WER: 0.5402)

ニュース原稿のような明瞭な音声には対応できますが、自然会話・感情音声・複数話者には課題が顕著でした。

特徴的な問題:

  • 音声が不明瞭な際に同じフレーズを繰り返す
  • フィラー(「えっと」「あの」「まー」)の直後の重要な単語が欠落する
  • 音声の最初の部分が書き起こせないケースがある

用途別おすすめモデル

text
精度最優先(議事録・字幕)
  → qwen3-asr-1.7b または whisper

日本語メディア特化(ニュース・報道)
  → reazonspeech-espnet-v2

速度最優先(リアルタイム・バッチ処理)
  → parakeet-tdt-0.6b-v3

可読性重視(書き言葉に変換したい)
  → voxtral-mini(ただし言語バリデーション必須)

再現方法:WER評価パイプラインの全体像

このベンチマークで最も重要なのは「どうやってWERを公平に計算するか」という設計です。特に日本語ASRのWER計算には独自の工夫が必要で、単純に jiwer.wer(ref, hyp) を呼ぶだけでは正確な評価になりません。

Step 1:テキスト正規化(句読点・記号・スペースの除去)

ASRモデルによって句読点の付け方が大きく異なります。例えばreazonspeech-espnet-v2は を積極的に挿入しますが、参照テキスト(アノテーション)にはそれらがない場合があります。句読点の有無でWERが不公平に変動しないよう、評価前にすべて除去します。

python
import unicodedata

def normalize_text(text: str) -> str:
    # NFKC正規化:全角英数→半角、異体字の統一など
    text = unicodedata.normalize("NFKC", text)
    chars: list[str] = []
    for ch in text:
        cat = unicodedata.category(ch)
        if cat.startswith("Z"):  # スペース・イデオグラフィックスペース等の区切り文字
            continue
        if cat.startswith("P"):  # 句読点(、。!?「」など)
            continue
        if cat.startswith("S"):  # 記号(¥、©など)
            continue
        chars.append(ch)
    return "".join(chars).strip()

この正規化により、以下のような「表記揺れ」による誤評価を防いでいます。

処理変換例
NFKC正規化13歳13歳kmkm
句読点除去行って、叫んで。行って叫んで
スペース除去東京 都東京都

Step 2:MeCabによる日本語分かち書き(WER専用)

日本語はスペースで単語が区切られないため、英語と同じ方法でWERを計算できません。スペース分割ではなくMeCabで形態素解析(分かち書き)してからWERを計算しています。

python
import MeCab

_MECAB_TAGGER = None

def _get_mecab_tagger():
    global _MECAB_TAGGER
    if _MECAB_TAGGER is None:
        # -Owakati:分かち書きモードで出力
        _MECAB_TAGGER = MeCab.Tagger("-Owakati")
    return _MECAB_TAGGER

def _contains_japanese(text: str) -> bool:
    for ch in text:
        code = ord(ch)
        if (
            0x3040 <= code <= 0x30FF  # ひらがな・カタカナ
            or 0x4E00 <= code <= 0x9FFF  # CJK統合漢字
            or 0x3400 <= code <= 0x4DBF  # CJK拡張A
        ):
            return True
    return False

def tokenize_for_wer(text: str) -> list[str]:
    # すでにスペース区切りなら分割(英語等)
    if " " in text:
        return [tok for tok in text.split(" ") if tok]
    # 日本語が含まれていればMeCabで分かち書き
    if _contains_japanese(text):
        tagger = _get_mecab_tagger()
        parsed = str(tagger.parse(text) or "").strip()
        return [w for w in parsed.split() if w]
    # その他(純粋な英数字等)は文字単位
    return [ch for ch in text if not ch.isspace()]

なぜMeCabが必要か? 例として「行ってきました」という単語がある場合、単純な文字分割だとすべての文字が独立したトークンになりますが、MeCabなら 行っ / て / き / まし / た と形態素単位に分割されます。これにより「削除」「挿入」の数が実際の誤りに近い値になります。


Step 3:CER計算(文字単位)

CERはシンプルに文字単位で分割します。スペースのみ除外します。

python
def tokenize_for_cer(text: str) -> list[str]:
    return [ch for ch in text if not ch.isspace()]

Step 4:jiwer でエラーレート計算

トークン列をスペース結合した文字列としてjiwerに渡し、置換・削除・挿入の数を取得します。

python
import jiwer

def compute_error_rate(ref: str, hyp: str, mode: str) -> tuple[float, int, int]:
    ref_n = normalize_text(ref)
    hyp_n = normalize_text(hyp)

    if mode == "wer":
        ref_tokens = tokenize_for_wer(ref_n)
        hyp_tokens = tokenize_for_wer(hyp_n)
    elif mode == "cer":
        ref_tokens = tokenize_for_cer(ref_n)
        hyp_tokens = tokenize_for_cer(hyp_n)

    # jiwer はスペース区切りの文字列として受け取る
    out = jiwer.process_words(
        " ".join(ref_tokens),
        " ".join(hyp_tokens)
    )
    err = int(out.substitutions + out.deletions + out.insertions)
    total = int(out.hits + out.substitutions + out.deletions)
    return (err / max(total, 1)), err, total

最終的なWER・CERは、20サンプル全体の誤り数と参照トークン数を集計したコーパス全体の集計値として算出しています(サンプルごとのWERを平均するのではなく、全体での Σerr / Σtotal を使用)。これにより短いサンプルの影響を抑えた公平な評価になります。


Step 5:RTF(リアルタイム係数)の計測

各ASRモデルはサブプロセスとして起動し、transcribe_elapsed_sec(推論時間)とaudio_duration_sec(音声の長さ)をJSONで返します。RTFはその比です。

python
# 各モデルのtranscribe.pyが返すJSONの形式
{
    "text": "書き起こされたテキスト",
    "transcribe_elapsed_sec": 0.34,  # 推論にかかった秒数
    "audio_duration_sec": 29.0,       # 音声の長さ(秒)
    "rtf": 0.012                      # transcribe_elapsed / audio_duration
}

# コーパス全体のRTF = Σtranscribe_elapsed / Σaudio_duration
rtf = transcribe_elapsed_sum / audio_duration_sum

依存ライブラリ

text
jiwer          # WER/CER計算
MeCab          # 日本語形態素解析(分かち書き)
unicodedata    # テキスト正規化(Python標準ライブラリ)

MeCabのインストール(Ubuntu系):

bash
sudo apt-get install mecab libmecab-dev mecab-ipadic-utf8
pip install mecab-python3 jiwer

FAQ(よくある質問)

Q1. 日本語ASRで一番精度が高いモデルは何ですか?

今回のベンチマークでは qwen/qwen3-asr-1.7b(WER=0.1899)が最高精度でした。ただし自然会話・ノイズ混在環境での安定性は whisper も同等で、用途によって使い分けが重要です。

Q2. WERとCERどちらを見ればいいですか?

日本語の場合、分かち書きの曖昧さからWERは過剰に悪化することがあります。今回はMeCabで形態素解析してから計算しているため、単純な文字分割よりは信頼性が高いですが、それでもCERをメインの評価指標にすることを推奨します。今回の結果でも両者の順位はほぼ一致していました。

Q3. リアルタイム文字起こしに向いているモデルは?

RTF < 0.1が実用的な目安です。今回の結果では parakeet-tdt-0.6b-v3(RTF=0.002)、whisper(RTF=0.012)、nemo-v2(RTF=0.020)が該当します。ただし精度とのトレードオフを考慮してください。

Q4. フィラー(えー・あのー)を保持したい場合は?

qwen3-asr-1.7bwhisper は適宜間引きますが、比較的忠実です。reazonspeech-espnet-v2 は積極的にカットするため不向きです。

Q5. 複数話者が混在する音声に強いモデルは?

今回のテストでは whisperqwen3-asr-1.7b が複数話者・ノイズ混在環境でも安定した精度を維持しました。ReazonSpeech系列は複数話者が重なると後半を切り捨てる傾向があります。

Q6. Whisperの幻覚(Hallucination)はどう対策すればいいですか?

①無音区間の事前VAD(音声区間検出)処理、②繰り返しパターンの後処理検知、③no_speech_thresholdパラメータの調整、が有効です。長時間音声での運用時は特に注意が必要です。

Q7. voxtral-miniがアラビア語を出力したのはなぜですか?

詳細な原因は不明ですが、多言語モデル特有の言語混在問題と推測されます。本番環境では出力言語の自動バリデーションを実装することを強く推奨します。

Q8. このベンチマークはどのくらい信頼できますか?

20本のテストデータはジャンルを分散させていますが、サンプル数としては限定的です。特定ドメイン(医療・法律など)での運用では、そのドメインのデータで追加評価することを推奨します。


まとめ

8モデルを同一条件でベンチマークした結果をまとめると:

  • 精度・安定性のバランス: qwen3-asr-1.7b > whisper
  • 日本語メディア特化: reazonspeech-espnet-v2
  • 速度重視: parakeet-tdt-0.6b-v3
  • 避けるべき用途があるモデル: kotoba-whisper-v2.0(自然会話)、voxtral-mini(言語バリデーション未実装の場合)

音声認識はモデル選定だけでなく、前処理(ノイズ除去・話者分離)と後処理(幻覚検知・言語バリデーション)の組み合わせで大きく精度が変わります。本記事のデータを参考に、用途に合わせた最適なパイプラインを構築してください。