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]"
1 import torch
2 from transformers import MoonshineStreamingForConditionalGeneration , AutoProcessor
3
4 model_id = "ayousanz/kodama-ja-streaming-small"
5 device = "cuda:0" if torch . cuda . is_available ( ) else "cpu"
6
7 model = MoonshineStreamingForConditionalGeneration . from_pretrained ( model_id ) . to ( device )
8 processor = AutoProcessor . from_pretrained ( model_id )
9
10 # audio は 16kHz mono の 1次元配列
11 inputs = processor ( audio_16k_mono , return_tensors = "pt" , sampling_rate = 16000 ) . to ( device )
12
13 # ハルシネーションループを避けるため出力長を制限する(ベースモデル推奨の式)
14 token_limit_factor = 6.5 / processor . feature_extractor . sampling_rate
15 max_length = int ( ( inputs . attention_mask . sum ( dim = - 1 ) * token_limit_factor ) . max ( ) . item ( ) )
16
17 ids = model . generate ( ** inputs , max_length = max_length )
18 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.data207.9MB 音響エンコーダ(float。int8 化は精度が落ちるため不可 ) onnx/cross_kv_prefill.onnx + .onnx.data32.5MB cross-attention KV の前計算(float) onnx/decoder_step_crosskv.int8a.onnx83.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 fleursFLEURS ja_jp test(汎用・読み上げ) 650 dom_g対象ドメイン(PRIMARY) : キャラクター音声・感情音声(あみたろ/つくよみちゃん/JVNV)629 speechbsdSpeechBSD(対話の代理指標) 800 jvnv_regular / jvnv_freeJVNV(感情音声の代理指標) 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_free240 0.1121 0.0638 -0.0483 [-0.0698, -0.0271] 🟢 ours 有意優位 (-43%) jvnv_regular800 0.1415 0.0968 -0.0447 [-0.0578, -0.0319] 🟢 ours 有意優位 (-32%) speechbsd800 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] ⚪ 有意差なし short130 0.1168 0.1448 +0.0281 [+0.0046, +0.0517] 🔴 ours 劣位 propn248 0.1354 0.1695 +0.0341 [+0.0134, +0.0534] 🔴 ours 劣位 fleurs650 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 相対 propn248 0.2625 0.1695 -0.0929 [-0.1120, -0.0721] -35% dom_g629 0.2478 0.1567 -0.0911 [-0.1054, -0.0770] -37% fleurs650 0.2248 0.1480 -0.0768 [-0.0898, -0.0640] -34% speechbsd800 0.1712 0.1108 -0.0605 [-0.0713, -0.0482] -35% jvnv_regular800 0.1551 0.0968 -0.0583 [-0.0700, -0.0474] -38% jvnv_free240 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_regular800 0.1459 0.0968 -0.0491 [-0.0617, -0.0364] 🟢 有意優位 propn248 0.2012 0.1695 -0.0316 [-0.0507, -0.0113] 🟢 有意優位 fleurs650 0.1703 0.1480 -0.0223 [-0.0358, -0.0074] 🟢 有意優位 dom_g629 0.1776 0.1567 -0.0209 [-0.0348, -0.0069] 🟢 有意優位 speechbsd800 0.1303 0.1108 -0.0195 [-0.0292, -0.0092] 🟢 有意優位 jvnv_free240 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-ja61.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.2248MB 5997ms 29ms 0.62 vosk-model-ja-0.221GB 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 fleurs650 0.1480 0.1629 0.0000 0.1215 dom_g(PRIMARY)629 0.1567 0.1555 0.0064 0.0000 propn248 0.1695 0.1836 0.0000 0.1008 short130 0.1448 0.1645 0.0000 0.1000 noise(SNR10dB)400 0.2363 0.2572 0.0050 0.1200 speechbsd800 0.1108 0.1236 0.0000 0.0575 jvnv_regular800 0.0968 0.0829 0.0000 0.0000 jvnv_free240 0.0638 0.0578 0.0000 0.0000
9. 既知の制限(採用前に必ずお読みください)
🔴 雑音に弱い(最大の弱点) 。SNR 10dB で moonshine-base-ja に +0.1033 劣位。
clean 比の劣化率は ours +60% に対し baseline +22% で、構造的に脆いと言えます
(学習データの ReazonSpeech が比較的クリーンなため)。雑音環境での利用は推奨しません。
🔴 キャラクター音声(あみたろ・つくよみちゃん)で公式 ja Moonshine に有意に劣位 。
全量データでも埋まりませんでした(§4 の話者別表)。
🔴 汎用用途では公式 ja Moonshine が上 (FLEURS +0.0390・short +0.0281・propn +0.0341)。
総合力の置き換えではなく、対象ドメイン向けのモデル です。
🚨 hallucination_rate はデータ量では下がりません 。fleurs 0.1215/short 0.1000/propn 0.1008 は
35倍少ないデータで学習した前世代と完全に同値 でした=CER とは独立の課題です。
無音区間で出力が出ることがあるため、実運用では VAD / エンドポインティングを併用してください。
ストリーミングは CER +0.0538 のトレードオフを伴います (§7)。
encoder は int8 量子化できません (careful static QDQ でも精度ゲート未達)。float 208MB がサイズの下限です。
対話ドメインの直接評価は未実施 です。speechbsd は代理指標であり、実対話音源での測定はできていません。
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.safetensors560,571,260 bfe2c0e67940fe49e0365d9e71a76e52096576c601d5b7ecbfb662814f33a466config.json1,697 a89a79c1282ea95d1d7447cef0b9d4b65f8ea47f6d62ec7e849f5310e4a10b99generation_config.json163 fd54ad15ad0a14f68db3c58a8d8e5e8f3791ef95e1ea92ee46cd71b4a5d7528c
ONNX deploy(3グラフ・計 323.6MB)
ファイル bytes sha256 encoder.onnx1,105,435 bc3738dc18aa366d7b306c907896b3fea51dcfc8284e7dbb79f32c9c2563a497encoder.onnx.data206,806,656 6283dfebf6f07e541c395c2d6b0f04c761f0c0fe494c697cae41fdb802afe20dcross_kv_prefill.onnx76,893 b1eb5a176651cf69c68c6bf1e43827ebd900f0093c5d2152166c08302d3404fdcross_kv_prefill.onnx.data32,440,320 ab3d4f810d495722adb091ac83cc0e4afc9f118c82ba0dd192eedef733115f1bdecoder_step_crosskv.int8a.onnx83,129,065 1860d39caa1b7329848a7a45eecb45ad647d033e0c18398f8bf69112ed431083
ORT(3グラフ・計 319.6MB)
ファイル bytes sha256 encoder.ort205,158,336 450c4dd023fa9307f36745dee8b8640e37ef8baebd165342ef7b5d197b816e58cross_kv_prefill.ort32,432,304 c751673eeddbecfe35c8c25b775769626ce9bc18bb70f6d9d0526c16425fd6e5decoder_step_crosskv.int8a.ort82,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 MIT (NOTICE に全文を同梱)学習データ 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)
評価素材のうちキャラクター音声(あみたろ・つくよみちゃん)は各配布元の規約に従い、
音声そのものを再配布していません 。本カードに載せているのは集計値のみです。