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。

引用

元モデルを引用してください。詳しくは元のモデルカードを参照してください。

Downloads last month

-

Downloads are not tracked for this model. How to track
Inference Providers NEW
This model isn't deployed by any Inference Provider. 🙋 Ask for provider support

Model tree for Sanami/haas-ja-onnx

Quantized
(8)
this model