ayousanz/kodama-ja-streaming-small

Model

kodama-ja-streaming-small

14

2 commits

1 linked in READMEs

updated Aug 22, 2026

See the code

README

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.data207.9MB音響エンコーダ(float。int8 化は精度が落ちるため不可
onnx/cross_kv_prefill.onnx + .onnx.data32.5MBcross-attention KV の前計算(float)
onnx/decoder_step_crosskv.int8a.onnx83.1MB1ステップ 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負なら本モデルが良い

評価セットnmoonshine-base-jaoursΔ95%CI判定
jvnv_free2400.11210.0638-0.0483[-0.0698, -0.0271]🟢 ours 有意優位(-43%)
jvnv_regular8000.14150.0968-0.0447[-0.0578, -0.0319]🟢 ours 有意優位(-32%)
speechbsd8000.13200.1108-0.0213[-0.0363, -0.0069]🟢 ours 有意優位(-16%)
dom_g(PRIMARY)6290.14720.1567+0.0095[-0.0063, +0.0245]有意差なし
short1300.11680.1448+0.0281[+0.0046, +0.0517]🔴 ours 劣位
propn2480.13540.1695+0.0341[+0.0134, +0.0534]🔴 ours 劣位
fleurs6500.10910.1480+0.0390[+0.0286, +0.0515]🔴 ours 劣位
noise(SNR10dB)4000.13300.2363+0.1033[+0.0855, +0.1239]🔴 最大の弱点

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

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

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

話者nmoonshine-base-jaoursΔ95%CI判定
あみたろ3020.11200.1908+0.0788[+0.0596, +0.0981]🔴 有意に劣位
つくよみちゃん1000.25320.2879+0.0347[+0.0030, +0.0661]🔴 有意に劣位
JVNV2270.12810.0644-0.0637[-0.0868, -0.0432]🟢 有意に優位
合計6290.14720.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セット全勝

評価セットnVosk smalloursΔ95%CI相対
propn2480.26250.1695-0.0929[-0.1120, -0.0721]-35%
dom_g6290.24780.1567-0.0911[-0.1054, -0.0770]-37%
fleurs6500.22480.1480-0.0768[-0.0898, -0.0640]-34%
speechbsd8000.17120.1108-0.0605[-0.0713, -0.0482]-35%
jvnv_regular8000.15510.0968-0.0583[-0.0700, -0.0474]-38%
jvnv_free2400.10000.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

評価セットnVosk bigoursΔ95%CI判定
jvnv_regular8000.14590.0968-0.0491[-0.0617, -0.0364]🟢 有意優位
propn2480.20120.1695-0.0316[-0.0507, -0.0113]🟢 有意優位
fleurs6500.17030.1480-0.0223[-0.0358, -0.0074]🟢 有意優位
dom_g6290.17760.1567-0.0209[-0.0348, -0.0069]🟢 有意優位
speechbsd8000.13030.1108-0.0195[-0.0292, -0.0092]🟢 有意優位
jvnv_free2400.07470.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
ours140.1M324MB(ONNX deploy)0.19
moonshine-base-ja61.5M約 60MB
vosk-model-small-ja-0.2248MB0.62
vosk-model-ja-0.221GB0.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)324MB1091〜1138ms883〜957ms0.19
vosk-model-small-ja-0.2248MB5997ms29ms0.62
vosk-model-ja-0.221GB1082ms133ms0.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 が逆方向に動きます

実効 marginCERoffline との差Finalization途中打ち切り
120.2159+0.1101608ms3/24
160.2090+0.1032703ms3/24
24(採用)0.1596+0.0538883〜957ms1/24
480.1578+0.05201387ms1/24
凍結なし0.1288+0.02302227ms0/24

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

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


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

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

評価セットnCERWERrepetition_ratehallucination_rate
fleurs6500.14800.16290.00000.1215
dom_g(PRIMARY)6290.15670.15550.00640.0000
propn2480.16950.18360.00000.1008
short1300.14480.16450.00000.1000
noise(SNR10dB)4000.23630.25720.00500.1200
speechbsd8000.11080.12360.00000.0575
jvnv_regular8000.09680.08290.00000.0000
jvnv_free2400.06380.05780.00000.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 の結果不採用
ピーク LR3.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
総 step84,816
最終 loss0.4951
精度形式BF16
ハードウェアRTX 5090 × 4(DDP)
run_idphase3-f3c069e-1785651965115807400-f174fe / checkpoint-84816

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


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

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

PyTorch 重み

ファイルbytessha256
model.safetensors560,571,260bfe2c0e67940fe49e0365d9e71a76e52096576c601d5b7ecbfb662814f33a466
config.json1,697a89a79c1282ea95d1d7447cef0b9d4b65f8ea47f6d62ec7e849f5310e4a10b99
generation_config.json163fd54ad15ad0a14f68db3c58a8d8e5e8f3791ef95e1ea92ee46cd71b4a5d7528c

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

ファイルbytessha256
encoder.onnx1,105,435bc3738dc18aa366d7b306c907896b3fea51dcfc8284e7dbb79f32c9c2563a497
encoder.onnx.data206,806,6566283dfebf6f07e541c395c2d6b0f04c761f0c0fe494c697cae41fdb802afe20d
cross_kv_prefill.onnx76,893b1eb5a176651cf69c68c6bf1e43827ebd900f0093c5d2152166c08302d3404fd
cross_kv_prefill.onnx.data32,440,320ab3d4f810d495722adb091ac83cc0e4afc9f118c82ba0dd192eedef733115f1b
decoder_step_crosskv.int8a.onnx83,129,0651860d39caa1b7329848a7a45eecb45ad647d033e0c18398f8bf69112ed431083

ORT(3グラフ・計 319.6MB)

ファイルbytessha256
encoder.ort205,158,336450c4dd023fa9307f36745dee8b8640e37ef8baebd165342ef7b5d197b816e58
cross_kv_prefill.ort32,432,304c751673eeddbecfe35c8c25b775769626ce9bc18bb70f6d9d0526c16425fd6e5
decoder_step_crosskv.int8a.ort82,039,0080155b520eebbf968df5a34e3ca03663195849ceb37169ef2b529c4aa00d0ed71

クロスランタイム一致: 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-smallMITNOTICE に全文を同梱)
学習データ ReazonSpeech v2CDLA-Sharing-1.0(§3.5 により学習済み重み=Results に義務なし)
学習コード / TransformersApache-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)

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

automatic-speech-recognition
endpoints_compatible
japanese
low-latency
moonshine_streaming
on-device
onnx
safetensors
speech
streaming
transformers

Contributors

ayousanz

2 commits

ayousanz/kodama-ja-streaming-small

Model

kodama-ja-streaming-small

14

2 commits

1 linked in READMEs

updated Aug 22, 2026

See the code

README

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.data207.9MB音響エンコーダ(float。int8 化は精度が落ちるため不可
onnx/cross_kv_prefill.onnx + .onnx.data32.5MBcross-attention KV の前計算(float)
onnx/decoder_step_crosskv.int8a.onnx83.1MB1ステップ 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負なら本モデルが良い

評価セットnmoonshine-base-jaoursΔ95%CI判定
jvnv_free2400.11210.0638-0.0483[-0.0698, -0.0271]🟢 ours 有意優位(-43%)
jvnv_regular8000.14150.0968-0.0447[-0.0578, -0.0319]🟢 ours 有意優位(-32%)
speechbsd8000.13200.1108-0.0213[-0.0363, -0.0069]🟢 ours 有意優位(-16%)
dom_g(PRIMARY)6290.14720.1567+0.0095[-0.0063, +0.0245]有意差なし
short1300.11680.1448+0.0281[+0.0046, +0.0517]🔴 ours 劣位
propn2480.13540.1695+0.0341[+0.0134, +0.0534]🔴 ours 劣位
fleurs6500.10910.1480+0.0390[+0.0286, +0.0515]🔴 ours 劣位
noise(SNR10dB)4000.13300.2363+0.1033[+0.0855, +0.1239]🔴 最大の弱点

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

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

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

話者nmoonshine-base-jaoursΔ95%CI判定
あみたろ3020.11200.1908+0.0788[+0.0596, +0.0981]🔴 有意に劣位
つくよみちゃん1000.25320.2879+0.0347[+0.0030, +0.0661]🔴 有意に劣位
JVNV2270.12810.0644-0.0637[-0.0868, -0.0432]🟢 有意に優位
合計6290.14720.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セット全勝

評価セットnVosk smalloursΔ95%CI相対
propn2480.26250.1695-0.0929[-0.1120, -0.0721]-35%
dom_g6290.24780.1567-0.0911[-0.1054, -0.0770]-37%
fleurs6500.22480.1480-0.0768[-0.0898, -0.0640]-34%
speechbsd8000.17120.1108-0.0605[-0.0713, -0.0482]-35%
jvnv_regular8000.15510.0968-0.0583[-0.0700, -0.0474]-38%
jvnv_free2400.10000.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

評価セットnVosk bigoursΔ95%CI判定
jvnv_regular8000.14590.0968-0.0491[-0.0617, -0.0364]🟢 有意優位
propn2480.20120.1695-0.0316[-0.0507, -0.0113]🟢 有意優位
fleurs6500.17030.1480-0.0223[-0.0358, -0.0074]🟢 有意優位
dom_g6290.17760.1567-0.0209[-0.0348, -0.0069]🟢 有意優位
speechbsd8000.13030.1108-0.0195[-0.0292, -0.0092]🟢 有意優位
jvnv_free2400.07470.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
ours140.1M324MB(ONNX deploy)0.19
moonshine-base-ja61.5M約 60MB
vosk-model-small-ja-0.2248MB0.62
vosk-model-ja-0.221GB0.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)324MB1091〜1138ms883〜957ms0.19
vosk-model-small-ja-0.2248MB5997ms29ms0.62
vosk-model-ja-0.221GB1082ms133ms0.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 が逆方向に動きます

実効 marginCERoffline との差Finalization途中打ち切り
120.2159+0.1101608ms3/24
160.2090+0.1032703ms3/24
24(採用)0.1596+0.0538883〜957ms1/24
480.1578+0.05201387ms1/24
凍結なし0.1288+0.02302227ms0/24

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

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


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

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

評価セットnCERWERrepetition_ratehallucination_rate
fleurs6500.14800.16290.00000.1215
dom_g(PRIMARY)6290.15670.15550.00640.0000
propn2480.16950.18360.00000.1008
short1300.14480.16450.00000.1000
noise(SNR10dB)4000.23630.25720.00500.1200
speechbsd8000.11080.12360.00000.0575
jvnv_regular8000.09680.08290.00000.0000
jvnv_free2400.06380.05780.00000.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 の結果不採用
ピーク LR3.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
総 step84,816
最終 loss0.4951
精度形式BF16
ハードウェアRTX 5090 × 4(DDP)
run_idphase3-f3c069e-1785651965115807400-f174fe / checkpoint-84816

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


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

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

PyTorch 重み

ファイルbytessha256
model.safetensors560,571,260bfe2c0e67940fe49e0365d9e71a76e52096576c601d5b7ecbfb662814f33a466
config.json1,697a89a79c1282ea95d1d7447cef0b9d4b65f8ea47f6d62ec7e849f5310e4a10b99
generation_config.json163fd54ad15ad0a14f68db3c58a8d8e5e8f3791ef95e1ea92ee46cd71b4a5d7528c

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

ファイルbytessha256
encoder.onnx1,105,435bc3738dc18aa366d7b306c907896b3fea51dcfc8284e7dbb79f32c9c2563a497
encoder.onnx.data206,806,6566283dfebf6f07e541c395c2d6b0f04c761f0c0fe494c697cae41fdb802afe20d
cross_kv_prefill.onnx76,893b1eb5a176651cf69c68c6bf1e43827ebd900f0093c5d2152166c08302d3404fd
cross_kv_prefill.onnx.data32,440,320ab3d4f810d495722adb091ac83cc0e4afc9f118c82ba0dd192eedef733115f1b
decoder_step_crosskv.int8a.onnx83,129,0651860d39caa1b7329848a7a45eecb45ad647d033e0c18398f8bf69112ed431083

ORT(3グラフ・計 319.6MB)

ファイルbytessha256
encoder.ort205,158,336450c4dd023fa9307f36745dee8b8640e37ef8baebd165342ef7b5d197b816e58
cross_kv_prefill.ort32,432,304c751673eeddbecfe35c8c25b775769626ce9bc18bb70f6d9d0526c16425fd6e5
decoder_step_crosskv.int8a.ort82,039,0080155b520eebbf968df5a34e3ca03663195849ceb37169ef2b529c4aa00d0ed71

クロスランタイム一致: 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-smallMITNOTICE に全文を同梱)
学習データ ReazonSpeech v2CDLA-Sharing-1.0(§3.5 により学習済み重み=Results に義務なし)
学習コード / TransformersApache-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)

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

automatic-speech-recognition
endpoints_compatible
japanese
low-latency
moonshine_streaming
on-device
onnx
safetensors
speech
streaming
transformers

Contributors

ayousanz

2 commits