kodama-ja-streaming-small

kodama(谺/木霊)= 反響・こだま。An independent name; "kodama" means "echo" in Japanese.

日本語ストリーミング音声認識(ASR)モデル。moonshine-ai/moonshine-streaming-small(MIT・英語)を ReazonSpeech v2 の全量 35,000 時間でフルファインチューニングしたものです。 CPU オフライン動作・低遅延ストリーミングを想定し、ONNX / ORT の deploy 資産(324MB)を同梱しています。

これは独立したモデルであり、Moonshine AI / Useful Sensors, Inc. の製品でも公認モデルでもありません。 公式日本語 Moonshine(moonshine-tiny-ja / moonshine-base-ja)およびその変換・量子化派生は、 初期重み・tokenizer・decoder 重みのいずれにも一切使っていません(ベンチマーク比較にのみ使用)。 詳細は NOTICE を参照してください。

English summary

A Japanese streaming ASR model, full fine-tuned from moonshine-ai/moonshine-streaming-small (MIT, English) on 35,000 hours of ReazonSpeech v2. Ships with ONNX/ORT deploy graphs (324 MB) for CPU on-device, low-latency use.

Where it is strong (offline CER, paired bootstrap CI, matched n):

  • Beats vosk-model-small-ja-0.22 (48 MB) on all 6 evaluated sets by 34-38 % relative, and reaches its first partial result about 5.3x sooner.
  • Beats vosk-model-ja-0.22 (1 GB) on 5 of 6 sets at 1/3 the size.
  • Beats the official moonshine-base-ja on emotional/character speech and dialogue (JVNV, SpeechBSD) by 16-43 % relative.

Where it is weak - please read before adopting:

  • Noise is the biggest weakness (+0.1033 CER vs moonshine-base-ja at SNR 10 dB).
  • Worse than moonshine-base-ja on general-purpose speech (FLEURS), short utterances, and proper nouns. This is not a general-purpose replacement.
  • Streaming costs accuracy: +0.0538 CER versus offline at the shipped setting.
  • hallucination_rate is 0.10-0.12 on several sets and did not improve with more data.

This is not a product of Moonshine AI. See NOTICE.


1. モデル諸元

項目
アーキテクチャ Moonshine Streaming(Encoder/Decoder 各10層・語彙 32,768・16kHz)
パラメータ数 140,135,225(140.1M)
重み(PyTorch) model.safetensors 560,571,260 bytes(F32・262 テンソル)
ONNX deploy 3グラフ 323.6MB(float encoder + float cross_kv prefill + int8a decode step)
ORT 3グラフ 319.6MB
学習データ ReazonSpeech v2 "all"(35,000h)単独
ライセンス Apache-2.0(ベースは MIT・NOTICE 参照)

⚠️ ベースモデルのモデルカードは 123M と記載していますが、safetensors ヘッダの実測は 140,135,225 params です。 本モデルはアーキテクチャ・tokenizer とも無改変なので同じ値になります。


2. 使い方

2.1 Transformers(オフライン推論)

pip install --upgrade "git+https://github.com/huggingface/transformers.git#egg=transformers" "datasets[audio]"
import torch
from transformers import MoonshineStreamingForConditionalGeneration, AutoProcessor

model_id = "ayousanz/kodama-ja-streaming-small"
device = "cuda:0" if torch.cuda.is_available() else "cpu"

model = MoonshineStreamingForConditionalGeneration.from_pretrained(model_id).to(device)
processor = AutoProcessor.from_pretrained(model_id)

# audio は 16kHz mono の 1次元配列
inputs = processor(audio_16k_mono, return_tensors="pt", sampling_rate=16000).to(device)

# ハルシネーションループを避けるため出力長を制限する(ベースモデル推奨の式)
token_limit_factor = 6.5 / processor.feature_extractor.sampling_rate
max_length = int((inputs.attention_mask.sum(dim=-1) * token_limit_factor).max().item())

ids = model.generate(**inputs, max_length=max_length)
print(processor.decode(ids[0], skip_special_tokens=True))

⚠️ Transformers 経路で遅延・RTF を測らないでください。 Transformers 実装は効率的な ストリーミング経路が未完成であるとベースモデル側が明記しています。本カードの遅延値は すべて ONNX Runtime 経路の実測です。

2.2 ONNX Runtime(低遅延・CPU)

同梱の deploy 3グラフを使います。この3つで1セット・1モデルです。

ファイル サイズ 役割
onnx/encoder.onnx + .onnx.data 207.9MB 音響エンコーダ(float。int8 化は精度が落ちるため不可
onnx/cross_kv_prefill.onnx + .onnx.data 32.5MB cross-attention KV の前計算(float)
onnx/decoder_step_crosskv.int8a.onnx 83.1MB 1ステップ decode(int8 動的量子化・CER 無劣化

.ort 版(ort/・計 319.6MB)はモバイル/組込み向けの事前最適化形式です。

⚠️ 同梱の .ort公式 moonshine-voice の6グラフ束とは非互換です(3グラフ分割で I/O 名と cache レイアウトが異なります)。公式ランタイムにそのまま差し込むことはできません。


3. 評価条件(数値を読む前に)

  • 主指標は CER(WER は副指標・fugashi + unidic-lite で分かち書き)。日本語なので WER で最適化していません。
  • テキスト正規化は全モデル共通の単一実装を通しています(本モデル・公式 ja Moonshine・Vosk すべて同じ関数)。 評価時は句読点除去つきで統一。
  • 比較は必ず同一サブセット・同一 n で行い、paired bootstrap CI(n_boot=1000・seed=0)で有意性を判定しています。 端点の比較だけで「改善した」とは書いていません。
  • 全評価は逐次実行で n_errors=0(並列実行は CUDA エラーで発話が落ち、CER が壊れるため)。
  • 精度・オフライン速度・ストリーミング遅延は別々の表に載せています(混ぜると誤読を招くため)。

評価セット

ID 内容 n
fleurs FLEURS ja_jp test(汎用・読み上げ) 650
dom_g 対象ドメイン(PRIMARY): キャラクター音声・感情音声(あみたろ/つくよみちゃん/JVNV) 629
speechbsd SpeechBSD(対話の代理指標) 800
jvnv_regular / jvnv_free JVNV(感情音声の代理指標) 800 / 240
short / noise / propn 診断セット(FLEURS 派生。短発話/SNR 10dB 雑音付加/固有名詞) 130 / 400 / 248

4. 精度 — 公式日本語 Moonshine base との比較

比較対象は moonshine-base-ja(61.5M params・非ストリーミング・本モデルの 44% のサイズ)。 ベンチマーク比較のためだけに使用しており、学習には一切関与していません。

Δ は ours - baseline負なら本モデルが良い

評価セット n moonshine-base-ja ours Δ 95%CI 判定
jvnv_free 240 0.1121 0.0638 -0.0483 [-0.0698, -0.0271] 🟢 ours 有意優位(-43%)
jvnv_regular 800 0.1415 0.0968 -0.0447 [-0.0578, -0.0319] 🟢 ours 有意優位(-32%)
speechbsd 800 0.1320 0.1108 -0.0213 [-0.0363, -0.0069] 🟢 ours 有意優位(-16%)
dom_g(PRIMARY) 629 0.1472 0.1567 +0.0095 [-0.0063, +0.0245] 有意差なし
short 130 0.1168 0.1448 +0.0281 [+0.0046, +0.0517] 🔴 ours 劣位
propn 248 0.1354 0.1695 +0.0341 [+0.0134, +0.0534] 🔴 ours 劣位
fleurs 650 0.1091 0.1480 +0.0390 [+0.0286, +0.0515] 🔴 ours 劣位
noise(SNR10dB) 400 0.1330 0.2363 +0.1033 [+0.0855, +0.1239] 🔴 最大の弱点

⚠️ 「dom_g で有意差なし」を正しく読むために

「公式 ja Moonshine を超えた」とは言えません。 点推定では依然 baseline が上(0.1472 vs 0.1567)で、 「有意差なし」は同等と区別できないという意味です。

さらに、この「同等」は話者間の相殺です。 合計値だけを見ると一様に同等に見えますが、 実際は逆方向の差が打ち消し合っています。

話者 n moonshine-base-ja ours Δ 95%CI 判定
あみたろ 302 0.1120 0.1908 +0.0788 [+0.0596, +0.0981] 🔴 有意に劣位
つくよみちゃん 100 0.2532 0.2879 +0.0347 [+0.0030, +0.0661] 🔴 有意に劣位
JVNV 227 0.1281 0.0644 -0.0637 [-0.0868, -0.0432] 🟢 有意に優位
合計 629 0.1472 0.1567 +0.0095 [-0.0063, +0.0245] ⚪ 有意差なし

キャラクター音声2話者では負けています。 全量 35,000 時間でも埋まりませんでした。

⚠️ dom_g の汚染可能性は排除できていません。 素材は ITA / JVS の公開台本の読み上げで、比較対象の moonshine-base-ja学習データを開示していません。したがって汚染判定は fail-closed で UNKNOWN です。 差が縮んだ今、この留保はより重要になります。


5. 精度 — Vosk との比較

同じ土俵(CPU オフライン・ストリーミング・パーミッシブライセンス)の直接競合である Vosk(Alpha Cephei・Kaldi hybrid・Apache-2.0)と、n を揃えて比較しました。

5.1 vs vosk-model-small-ja-0.22(48MB)— 6セット全勝

評価セット n Vosk small ours Δ 95%CI 相対
propn 248 0.2625 0.1695 -0.0929 [-0.1120, -0.0721] -35%
dom_g 629 0.2478 0.1567 -0.0911 [-0.1054, -0.0770] -37%
fleurs 650 0.2248 0.1480 -0.0768 [-0.0898, -0.0640] -34%
speechbsd 800 0.1712 0.1108 -0.0605 [-0.0713, -0.0482] -35%
jvnv_regular 800 0.1551 0.0968 -0.0583 [-0.0700, -0.0474] -38%
jvnv_free 240 0.1000 0.0638 -0.0362 [-0.0509, -0.0218] -36%

全セットで CI が 0 を跨がず、相対 34〜38% 改善しています。

5.2 vs vosk-model-ja-0.22(1GB)— 6セット中5セット優位・サイズは 1/3

評価セット n Vosk big ours Δ 95%CI 判定
jvnv_regular 800 0.1459 0.0968 -0.0491 [-0.0617, -0.0364] 🟢 有意優位
propn 248 0.2012 0.1695 -0.0316 [-0.0507, -0.0113] 🟢 有意優位
fleurs 650 0.1703 0.1480 -0.0223 [-0.0358, -0.0074] 🟢 有意優位
dom_g 629 0.1776 0.1567 -0.0209 [-0.0348, -0.0069] 🟢 有意優位
speechbsd 800 0.1303 0.1108 -0.0195 [-0.0292, -0.0092] 🟢 有意優位
jvnv_free 240 0.0747 0.0638 -0.0109 [-0.0257, +0.0040] 有意差なし

⚠️ 「1GB の Vosk に全セットで勝った」とは書けませんjvnv_free は CI が 0 を跨ぎます)。

Vosk 比較で未計測のこと(結論を一般化しないでください):

  • 雑音条件は未比較です。本モデルは雑音が最大の弱点であり、Kaldi hybrid は雑音に強い可能性があります。 上記の「全セット優位」を雑音環境に一般化しないでください。
  • Vosk 側の診断セット(short / noise)は未測定です。
  • 遅延計測時、Vosk の endpointing は無効のまま測っています(有効なら Vosk の Finalization は さらに前倒しになる=Vosk 有利方向の未計測要因)。

6. オフライン速度・サイズ

精度表とは別条件です(同一マシン・CPU)。

モデル params 配布サイズ offline RTF
ours 140.1M 324MB(ONNX deploy) 0.19
moonshine-base-ja 61.5M 約 60MB
vosk-model-small-ja-0.22 48MB 0.62
vosk-model-ja-0.22 1GB 0.21

絶対サイズでは公式 ja Moonshine(61.5M)と Vosk small(48MB)に負けています。 訴求できるのは「サイズ対性能のバランス」であって「最小」ではありません。


7. ストリーミング遅延

精度表・オフライン速度表とは別条件です。 block 500ms・同一マシン・CPU。 n は行ごとに異なります(ours 採用設定 n=24/Vosk n=8)。

モデル サイズ TTFP(初回部分結果) Finalization(確定まで) offline RTF
ours(採用設定・実効 margin 24) 324MB 1091〜1138ms 883〜957ms 0.19
vosk-model-small-ja-0.22 48MB 5997ms 29ms 0.62
vosk-model-ja-0.22 1GB 1082ms 133ms 0.21
  • Vosk small(48MB)に対しては TTFP 約 5.3倍・RTF 3.3倍 速い=「48MB は小さいが低遅延ではない」。
  • Vosk big(1GB)に対しては Finalization が 6.6〜7.2倍 劣位です。AED は全 encoder フレームに cross-attend するため、Kaldi の増分デコードには構造的に及ばず、パラメータ調整では埋まりません。 対話 UI の体感を最も左右する指標なので、そこが重要な用途では Vosk big を検討してください。
  • Finalization は CPU 実測で、同一設定の再測定でも約 8% 振れます。

ストリーミングは精度とのトレードオフです

ストリーミング動作は bounded-tail revision(local-agreement) で実装しています。 実効 margin を変えると CER と Finalization が逆方向に動きます

実効 margin CER offline との差 Finalization 途中打ち切り
12 0.2159 +0.1101 608ms 3/24
16 0.2090 +0.1032 703ms 3/24
24(採用) 0.1596 +0.0538 883〜957ms 1/24
48 0.1578 +0.0520 1387ms 1/24
凍結なし 0.1288 +0.0230 2227ms 0/24

(同一 n=24 での offline CER は 0.1058)

🚨 本カードの精度表(§4・§5)はすべて offline の値です。 ストリーミングでは採用設定でも CER が +0.0538 劣化します。オフライン値をそのまま ストリーミングの性能として提示しないでください。


8. 全評価セットの実測値

すべて checkpoint-84816・逐次実行・n_errors=0

評価セット n CER WER repetition_rate hallucination_rate
fleurs 650 0.1480 0.1629 0.0000 0.1215
dom_g(PRIMARY) 629 0.1567 0.1555 0.0064 0.0000
propn 248 0.1695 0.1836 0.0000 0.1008
short 130 0.1448 0.1645 0.0000 0.1000
noise(SNR10dB) 400 0.2363 0.2572 0.0050 0.1200
speechbsd 800 0.1108 0.1236 0.0000 0.0575
jvnv_regular 800 0.0968 0.0829 0.0000 0.0000
jvnv_free 240 0.0638 0.0578 0.0000 0.0000

9. 既知の制限(採用前に必ずお読みください)

  1. 🔴 雑音に弱い(最大の弱点)。SNR 10dB で moonshine-base-ja+0.1033 劣位。 clean 比の劣化率は ours +60% に対し baseline +22% で、構造的に脆いと言えます (学習データの ReazonSpeech が比較的クリーンなため)。雑音環境での利用は推奨しません。
  2. 🔴 キャラクター音声(あみたろ・つくよみちゃん)で公式 ja Moonshine に有意に劣位。 全量データでも埋まりませんでした(§4 の話者別表)。
  3. 🔴 汎用用途では公式 ja Moonshine が上(FLEURS +0.0390・short +0.0281・propn +0.0341)。 総合力の置き換えではなく、対象ドメイン向けのモデルです。
  4. 🚨 hallucination_rate はデータ量では下がりません。fleurs 0.1215/short 0.1000/propn 0.1008 は 35倍少ないデータで学習した前世代と完全に同値でした=CER とは独立の課題です。 無音区間で出力が出ることがあるため、実運用では VAD / エンドポインティングを併用してください。
  5. ストリーミングは CER +0.0538 のトレードオフを伴います(§7)。
  6. encoder は int8 量子化できません(careful static QDQ でも精度ゲート未達)。float 208MB がサイズの下限です。
  7. 対話ドメインの直接評価は未実施です。speechbsd は代理指標であり、実対話音源での測定はできていません。
  8. dom_g の汚染可能性は未排除(§4)。

10. 学習の再現情報

項目
ベース重み moonshine-ai/moonshine-streaming-small(MIT。学習時は UsefulSensors/…組織リネーム前の同一重み
学習データ ReazonSpeech v2 "all"(35,000h)単独・2 epochs
tokenizer ベース付属のまま(日本語 tokenizer への差し替えは A/B の結果不採用
ピーク LR 3.2e-4(4GPU DDP × --lr-scale sqrt の結果)
スケジューラ cosine_with_min_lr(min_lr_rate=0.1)・warmup 2,604 step
バッチ per-device 128 × 4 GPU = 実効 512
総 step 84,816
最終 loss 0.4951
精度形式 BF16
ハードウェア RTX 5090 × 4(DDP)
run_id phase3-f3c069e-1785651965115807400-f174fe / checkpoint-84816

学習方式はフルファインチューニング(LoRA ではありません)。混合データ(Common Voice / moe-speech)も 実験しましたが汎用性能を悪化させたため最終モデルには含めていません


11. 成果物のハッシュ(SHA-256)

配布物が改変されていないことを検証できます。

PyTorch 重み

ファイル bytes sha256
model.safetensors 560,571,260 bfe2c0e67940fe49e0365d9e71a76e52096576c601d5b7ecbfb662814f33a466
config.json 1,697 a89a79c1282ea95d1d7447cef0b9d4b65f8ea47f6d62ec7e849f5310e4a10b99
generation_config.json 163 fd54ad15ad0a14f68db3c58a8d8e5e8f3791ef95e1ea92ee46cd71b4a5d7528c

ONNX deploy(3グラフ・計 323.6MB)

ファイル bytes sha256
encoder.onnx 1,105,435 bc3738dc18aa366d7b306c907896b3fea51dcfc8284e7dbb79f32c9c2563a497
encoder.onnx.data 206,806,656 6283dfebf6f07e541c395c2d6b0f04c761f0c0fe494c697cae41fdb802afe20d
cross_kv_prefill.onnx 76,893 b1eb5a176651cf69c68c6bf1e43827ebd900f0093c5d2152166c08302d3404fd
cross_kv_prefill.onnx.data 32,440,320 ab3d4f810d495722adb091ac83cc0e4afc9f118c82ba0dd192eedef733115f1b
decoder_step_crosskv.int8a.onnx 83,129,065 1860d39caa1b7329848a7a45eecb45ad647d033e0c18398f8bf69112ed431083

ORT(3グラフ・計 319.6MB)

ファイル bytes sha256
encoder.ort 205,158,336 450c4dd023fa9307f36745dee8b8640e37ef8baebd165342ef7b5d197b816e58
cross_kv_prefill.ort 32,432,304 c751673eeddbecfe35c8c25b775769626ce9bc18bb70f6d9d0526c16425fd6e5
decoder_step_crosskv.int8a.ort 82,039,008 0155b520eebbf968df5a34e3ca03663195849ceb37169ef2b529c4aa00d0ed71

クロスランタイム一致: PyTorch greedy と ONNX greedy を token-id レベルで照合し、 float 経路で 24/24 完全一致(bit-exact・CER 差 0.0)。int8a 経路は token-id 20/24 ですが CER は float と同値(0.1058)です。


12. ライセンスと系譜

ライセンス
本モデルの重み・ONNX 資産 Apache-2.0
ベースモデル moonshine-ai/moonshine-streaming-small MITNOTICE に全文を同梱)
学習データ ReazonSpeech v2 CDLA-Sharing-1.0(§3.5 により学習済み重み=Results に義務なし)
学習コード / Transformers Apache-2.0

ℹ️ ベースモデルの HF 組織名は UsefulSensors から moonshine-ai に変更されています (2026-08-22 に確認。旧 ID は新 ID へリダイレクトされます)。重みは同一で (sha 2c036506f23a09c18df5a50057599ba6d9280999・lastModified 2026-02-10)、 宣言ライセンスも MIT のままです。本モデルの学習は組織リネーム前の同じ重みで行いました。

同梱の tokenizer はベースモデル由来の MIT 素材なので、再配布時は NOTICE を必ず保持してください。

⚠️ 特許許諾の範囲: Apache-2.0 §3 の特許許諾は本モデルの貢献部分(日本語追加学習と ONNX 資産)について 本モデルの著作権者が与えるものです。ベースは MIT で特許について沈黙しており、Useful Sensors, Inc. は Moonshine アーキテクチャに関する特許許諾を与えていません。§3 をベースアーキテクチャまで及ぶものと 読まないでください。

⚠️ ライセンスは競合に対する差別化にはなりません(Vosk もモデル込みで Apache-2.0)。 本モデル固有の性質は「学習データの由来が開示されていて、同じ手順で再現できる」ことです (ReazonSpeech v2 単独。比較対象の moonshine-base-ja は学習データ非開示)。

商標について: "Moonshine" はベースモデルを同定するための帰属表示としてのみ用いています。 Moonshine AI の商標ポリシーは公開されていませんが(moonshine.ai/{trademark,brand,legal,terms} はいずれも 404)、 同社は Community License 側で名称・マークの使用を明示的に禁じており、ブランド保護の意思は示されています。 本モデルはその系譜には属しません(MIT 経路)。


13. 謝辞

  • Moonshine AI(Useful Sensors, Inc.) — ベースモデル moonshine-streaming-small(MIT)
  • Reazon Human Interaction Lab — ReazonSpeech v2(CDLA-Sharing-1.0)
  • 評価に用いた公開コーパス: FLEURS、SpeechBSD、JVNV、ITA / JVS コーパス
  • 競合比較: Alpha Cephei — Vosk(Apache-2.0)

評価素材のうちキャラクター音声(あみたろ・つくよみちゃん)は各配布元の規約に従い、 音声そのものを再配布していません。本カードに載せているのは集計値のみです。

Downloads last month
12
Safetensors
Model size
0.1B params
Tensor type
F32
·
Inference Providers NEW
This model isn't deployed by any Inference Provider. 🙋 Ask for provider support

Model tree for ayousanz/kodama-ja-streaming-small

Finetuned
(1)
this model

Dataset used to train ayousanz/kodama-ja-streaming-small

Space using ayousanz/kodama-ja-streaming-small 1