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 を参照してください。
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):
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.vosk-model-ja-0.22 (1 GB) on 5 of 6 sets at 1/3 the size.moonshine-base-ja on emotional/character speech and dialogue
(JVNV, SpeechBSD) by 16-43 % relative.Where it is weak - please read before adopting:
moonshine-base-ja at SNR 10 dB).moonshine-base-ja on general-purpose speech (FLEURS), short utterances,
and proper nouns. This is not a general-purpose replacement.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.
| 項目 | 値 |
|---|---|
| アーキテクチャ | 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 とも無改変なので同じ値になります。
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 経路の実測です。
同梱の 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 レイアウトが異なります)。公式ランタイムにそのまま差し込むことはできません。
fugashi + unidic-lite で分かち書き)。日本語なので WER で最適化していません。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 |
比較対象は 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] | 🔴 最大の弱点 |
「公式 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 です。 差が縮んだ今、この留保はより重要になります。
同じ土俵(CPU オフライン・ストリーミング・パーミッシブライセンス)の直接競合である Vosk(Alpha Cephei・Kaldi hybrid・Apache-2.0)と、n を揃えて比較しました。
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% 改善しています。
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 比較で未計測のこと(結論を一般化しないでください):
short / noise)は未測定です。精度表とは別条件です(同一マシン・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)に負けています。 訴求できるのは「サイズ対性能のバランス」であって「最小」ではありません。
精度表・オフライン速度表とは別条件です。 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 |
ストリーミング動作は 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 劣化します。オフライン値をそのまま ストリーミングの性能として提示しないでください。
すべて 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 |
moonshine-base-ja に +0.1033 劣位。
clean 比の劣化率は ours +60% に対し baseline +22% で、構造的に脆いと言えます
(学習データの ReazonSpeech が比較的クリーンなため)。雑音環境での利用は推奨しません。speechbsd は代理指標であり、実対話音源での測定はできていません。dom_g の汚染可能性は未排除(§4)。| 項目 | 値 |
|---|---|
| ベース重み | 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)も 実験しましたが汎用性能を悪化させたため最終モデルには含めていません。
配布物が改変されていないことを検証できます。
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)**です。
| 層 | ライセンス |
|---|---|
| 本モデルの重み・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 へリダイレクトされます)。重みは同一で (sha2c036506f23a09c18df5a50057599ba6d9280999・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 経路)。
moonshine-streaming-small(MIT)評価素材のうちキャラクター音声(あみたろ・つくよみちゃん)は各配布元の規約に従い、 音声そのものを再配布していません。本カードに載せているのは集計値のみです。
2 commits
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 を参照してください。
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):
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.vosk-model-ja-0.22 (1 GB) on 5 of 6 sets at 1/3 the size.moonshine-base-ja on emotional/character speech and dialogue
(JVNV, SpeechBSD) by 16-43 % relative.Where it is weak - please read before adopting:
moonshine-base-ja at SNR 10 dB).moonshine-base-ja on general-purpose speech (FLEURS), short utterances,
and proper nouns. This is not a general-purpose replacement.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.
| 項目 | 値 |
|---|---|
| アーキテクチャ | 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 とも無改変なので同じ値になります。
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 経路の実測です。
同梱の 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 レイアウトが異なります)。公式ランタイムにそのまま差し込むことはできません。
fugashi + unidic-lite で分かち書き)。日本語なので WER で最適化していません。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 |
比較対象は 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] | 🔴 最大の弱点 |
「公式 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 です。 差が縮んだ今、この留保はより重要になります。
同じ土俵(CPU オフライン・ストリーミング・パーミッシブライセンス)の直接競合である Vosk(Alpha Cephei・Kaldi hybrid・Apache-2.0)と、n を揃えて比較しました。
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% 改善しています。
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 比較で未計測のこと(結論を一般化しないでください):
short / noise)は未測定です。精度表とは別条件です(同一マシン・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)に負けています。 訴求できるのは「サイズ対性能のバランス」であって「最小」ではありません。
精度表・オフライン速度表とは別条件です。 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 |
ストリーミング動作は 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 劣化します。オフライン値をそのまま ストリーミングの性能として提示しないでください。
すべて 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 |
moonshine-base-ja に +0.1033 劣位。
clean 比の劣化率は ours +60% に対し baseline +22% で、構造的に脆いと言えます
(学習データの ReazonSpeech が比較的クリーンなため)。雑音環境での利用は推奨しません。speechbsd は代理指標であり、実対話音源での測定はできていません。dom_g の汚染可能性は未排除(§4)。| 項目 | 値 |
|---|---|
| ベース重み | 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)も 実験しましたが汎用性能を悪化させたため最終モデルには含めていません。
配布物が改変されていないことを検証できます。
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)**です。
| 層 | ライセンス |
|---|---|
| 本モデルの重み・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 へリダイレクトされます)。重みは同一で (sha2c036506f23a09c18df5a50057599ba6d9280999・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 経路)。
moonshine-streaming-small(MIT)評価素材のうちキャラクター音声(あみたろ・つくよみちゃん)は各配布元の規約に従い、 音声そのものを再配布していません。本カードに載せているのは集計値のみです。
2 commits