Zipformer RNNT+CTC ひらがな日本語音声認識モデル
軽量・高速なひらがな専用の日本語音声認識モデルです。Zipformer エンコーダと RNNT+CTC デコーダを組み合わせた 20.6M パラメータのモデルで、ReazonSpeech 全データ(約2,200万サンプル)で学習しています。
特徴
- 軽量: 20.6M パラメータ(82MB)
- 高速: 1 CPU コアで RTF 0.020(50倍速でリアルタイム処理可能)
- ひらがな出力: 漢字変換不要。音声をそのままひらがなに変換
- 依存なし: icefall / k2 / lhotse 不要。PyTorch + torchaudio のみ
性能
CER(文字誤り率)比較
| モデル | パラメータ | Common Voice 8 (2000件) | JSUT basic5000 (2000件) | RTF (1 CPU コア) |
|---|---|---|---|---|
| 本モデル (RNNT) | 20.6M | 10.9% | 3.3% | 0.020 |
| Moonshine tiny-ja | 27.1M | 4.9%* | - | 0.068 |
| Moonshine base-ja | 61.5M | 5.8%* | - | 0.079 |
*Moonshine は漢字出力をひらがなに変換して比較。50サンプルでの評価。
本モデルの強み
- RTF が Moonshine の 3.4 倍速い(0.020 vs 0.068)
- パラメータ数が 24% 少ない(20.6M vs 27.1M)
- CER では Moonshine に劣るが、速度とサイズで大幅に有利
- ひらがな直接出力のため、後処理(漢字→ひらがな変換)が不要
CER 分布(Common Voice 200 サンプル分析)
| 区分 | 割合 |
|---|---|
| 完全一致 (CER 0%) | 46% |
| ほぼ正解 (CER 1-10%) | 23% |
| まあまあ (CER 11-30%) | 22% |
| 悪い (CER 31-50%) | 8% |
| 壊滅的 (CER 50%超) | 2% |
約7割の発話でほぼ正しい認識結果が得られます。
使い方
推論
import torch
import torchaudio
from hiragana_zipformer.data import compute_fbank, load_audio
from hiragana_zipformer.model import HiraganaZipformerConfig, build_model
# モデル読み込み
checkpoint = torch.load("model.pt", map_location="cpu")
config = HiraganaZipformerConfig.from_dict(checkpoint["config"])
model = build_model(config=config, model_type="rnnt_ctc")
model.load_state_dict(checkpoint["model_state_dict"])
model.eval()
# 音声読み込みと推論
waveform = load_audio("sample.wav", sample_rate=16000)
features = compute_fbank(waveform, sample_rate=16000, num_mel_bins=80).unsqueeze(0)
feature_lengths = torch.tensor([features.size(1)], dtype=torch.long)
with torch.no_grad():
result = model.greedy_decode(features, feature_lengths, strategy="rnnt")[0]
print(result) # ひらがな出力: "きょーわいいてんきですね"
コマンドラインでの推論
python infer.py --checkpoint model.pt --audio sample.wav --decode-strategy rnnt
モデル構成
- エンコーダ: Zipformer2(3ステージ: dim 192/256/320, layers 2/2/3)
- RNNT Predictor: 1層 GRU(dim 320)、専用 BOS トークン
- RNNT Joiner: Linear projection(dim 320)+ Tanh + Linear
- CTC head: 補助ロス用
- 語彙: ひらがな 83 文字 + blank
学習データ
- ReazonSpeech: 約2,200万サンプル(日本語ニュース音声)
- 学習エポック: 約3.5エポック(2,625,000ステップ)
- AMP: bfloat16
- GPU: NVIDIA RTX 3090(24GB)
技術的な詳細
本モデルは icefall の Zipformer2 を参考に、単体運用のために簡略化した standalone 版です。以下の改良を加えています:
- RNNT predictor に専用の学習可能な BOS トークンを追加(blank と分離)
- predictor_dim / joiner_dim を 160 から 320 に拡大
- AMP (bfloat16) 対応で学習を高速化
- RNNT loss clamp を無効化(-1.0)して early training での勾配阻害を防止
ライセンス
Apache License 2.0
引用
本モデルは ReazonSpeech データセットを使用して学習しています。