Haas-ja-v1.0 ONNX(fp32 + 量子化版)
third-intelligence/Haas-ja-v1.0 (FastConformer エンコーダ + Kimi Delta Attention 予測ネットの TDT デコーダ)を ONNX に書き出し、 量子化したものです。NeMo・CUDA・Triton なしで、ONNX Runtime を使って CPU(Mac / Apple Silicon を含む)で動きます。
これは非公式の変換で、Third Intelligence が作成・承認したものではありません。モデル自体の功績はすべて 元の作者にあります。学習データ・評価・想定用途は元のモデルカードを参照してください。
English: Unofficial ONNX export of Haas-ja-v1.0 with fp16 / INT8 / INT4 variants. Runs on CPU (incl. Apple Silicon)
with ONNX Runtime, without NeMo, CUDA or Triton. int8dyn_mm/ is the recommended default.
どれを使えばいいか
迷ったら int8dyn_mm/。 x86 でも Mac でも fp32 の約2倍速く(RTFx 31 / 29)、精度はほぼ変わりません。
| フォルダ | サイズ | ReazonSpeech CER | JSUT CER | RTFx x86 | RTFx M1 |
|---|---|---|---|---|---|
int8dyn_mm/ |
895 MB | 9.01 | 4.37 | 31 | 29 |
int8dyn/ |
667 MB | 8.86 | 4.28 | 17 | 34 |
int8wo/ |
667 MB | 8.46 | 4.23 | 15 | 20 |
int4/ |
691 MB | 8.86 | 4.37 | 16 | 26 |
fp16/ |
1.3 GB | 8.46 | 4.19 | 15 | 12 |
fp32/ |
2.5 GB | 8.46 | 4.19 | 16 | 14 |
- CER は ReazonSpeech test・JSUT basic5000 の先頭各100発話を jacer v1.2.0(
cer_strict)で計算した値です。0.5ポイント程度の差は揺れの範囲です。 - RTFx は「音声の長さ ÷ 処理時間」で、大きいほど速いです(20なら1分の音声を3秒で処理)。encoder を ONNX Runtime(CPU、4スレッド)で動かしたときの値で、decoder の分は含みません。x86 は Intel Xeon 4コア、M1 は MacBook Air。
- メモリ使用量などの詳しい計測は BENCHMARKS.md にあります。
- どのフォルダも
encoder.onnxとdecoder_joint.onnx(それぞれ.data付き)の2つで、入出力は共通です。トークナイザtokenizer.modelはリポジトリ直下にあります。
使い方
pip install onnxruntime sentencepiece soundfile librosa huggingface_hub
from huggingface_hub import snapshot_download
import sys
d = snapshot_download("Sanami/haas-ja-onnx", allow_patterns=["int8dyn_mm/*", "tokenizer.model", "haas_ort.py"])
sys.path.insert(0, d)
from haas_ort import sessions, logmel, load_wav, encode, greedy_tdt, Tokenizer
enc_s, dec_s = sessions(f"{d}/int8dyn_mm/encoder.onnx", f"{d}/int8dyn_mm/decoder_joint.onnx", threads=4)
tok = Tokenizer(f"{d}/tokenizer.model")
mel, n = logmel(load_wav("audio.wav")) # サンプルレートは何でも可(16kHz モノラルに変換)
enc, T = encode(enc_s, mel, n)
print(tok.decode(greedy_tdt(dec_s, enc, T)))
haas_ort.py は NeMo の前処理(128-bin log-mel、特徴量ごとの正規化。チェックポイントに bf16 で保存された窓とメルフィルタを使用)と、
NeMo の TDT 貪欲デコード(label-looping、max_symbols=10)を再実装したものです。
encoder は全体を一度に処理する(full context)ので、長い音声は元モデルと同じく区切ってから入れてください。
Rust から使う
rust/ に、Python なしで書き起こせる Rust 版のコマンドが入っています(log-mel・TDT デコード・トークナイザも Rust で実装)。
推論エンジンは ort(ONNX Runtime)と tract(純 Rust)から選べます。
git clone https://huggingface.co/Sanami/haas-ja-onnx && cd haas-ja-onnx/rust
cargo build --release
target/release/haas-rs --backend ort --ort-lib /path/to/libonnxruntime.so --onnx ../int8dyn_mm a.wav
tract の fp16・Q4_0 は fp32/ を読み込むときに --transform f32_to_f16 / --transform block_quant で変換するので、別ファイルは要りません。
x86 では tract は ort の2〜3倍遅いので、ort + int8dyn_mm がおすすめです。詳しくは rust/README.md を参照してください。
ほかの形式
| リポジトリ | 実行系 | 向いている環境 |
|---|---|---|
| この ONNX 版 | ONNX Runtime(Python / Rust など)、tract。Python・Rust の推論コード付き | x86・Mac の CPU |
| Sanami/haas-ja-coreml | Core ML(ANE)、Swift の推論コード付き | iPhone / Mac で最速(M1 で全体 RTFx 約89) |
| sakasegawa/Haas-ja-v1.0-GGUF | speech.cpp(ggml) | Mac の Metal、Vulkan、CPU(M1 Metal で RTFx 63、Q8_0 656MB、メモリ 0.70GB。speech.cpp 0.10.0) |
| oboroge0/Haas-ja-v1.0-onnx、量子化版 | sherpa-onnx | sherpa-onnx を使うアプリ(CPU)。特徴量は sherpa-onnx 側で計算するので、NeMo と完全には一致しません |
さらに詳しく
- BENCHMARKS.md: 計測の詳細(スレッド数別、Rust の ort / tract、メモリ、speech.cpp・sherpa-onnx・Core ML との比較)
- TECHNICAL.md: グラフの入出力と、ONNX 化・検証・量子化の方法
- scripts/: .nemo から ONNX を作り直すスクリプト(書き出し・検証・量子化)
ライセンス
重みもコードも Apache-2.0 です(帰属表示は NOTICE)。
- 重み(
fp32/などの各フォルダとtokenizer.model): third-intelligence/Haas-ja-v1.0(Apache-2.0)を元にしています。 元のモデルは Third Intelligence によるもので、Sanami が ONNX への変換と量子化という改変を加えています(方法は TECHNICAL.md)。 - コード(
haas_ort.py,rust/,scripts/): Copyright 2026 Sanami。
引用
元モデルを引用してください。詳しくは元のモデルカードを参照してください。
Model tree for Sanami/haas-ja-onnx
Base model
third-intelligence/Haas-ja-v1.0