v2: 300h cluster finetune (H100, bf16) - chunk CER 0.1679, gap 0.0095
Browse files- README.md +17 -13
- eval/eval_full_lr2e4_ep4.json +241 -0
- eval/eval_full_lr6e4_ep4.json +241 -0
- model.pt +2 -2
README.md
CHANGED
|
@@ -19,31 +19,35 @@ library_name: funasr
|
|
| 19 |
|
| 20 |
SenseVoiceSmall を**チャンクマスク学習(SCAMA方式)でファインチューニングした日本語特化モデル**です。ストリーミング(チャンク逐次)推論時の精度劣化を解消することを目的としています。
|
| 21 |
|
| 22 |
-
ベースの SenseVoiceSmall は全区間双方向 attention で学習されているため、そのままチャンク推論すると精度が大きく劣化します。本モデルはダイナミックチャンクマスク(chunk_size を学習ステップごとに 8/12/16 からランダム選択)で
|
| 23 |
|
| 24 |
-
|
|
|
|
|
|
|
| 25 |
|
| 26 |
| モデル | チャンク推論 CER | フル注意 CER | ギャップ |
|
| 27 |
|---|---|---|---|
|
| 28 |
-
| SenseVoiceSmall(公開重み) | 0.
|
| 29 |
-
| **本モデル
|
| 30 |
|
| 31 |
-
- チャンク推論 CER は相対
|
| 32 |
-
- フル注意(非ストリーミング)推論も
|
| 33 |
- 評価データは学習と話者を完全分離(声優単位のリーク検証済み)
|
|
|
|
| 34 |
|
| 35 |
-
## 学習詳細
|
| 36 |
|
| 37 |
-
- **データ**: [OOPPEENN/VisualNovel_Dataset](https://huggingface.co/datasets/OOPPEENN/56697375616C4E6F76656C5F44617461736574) のサブセット
|
| 38 |
- **方式**: GT教師あり CTC + ダイナミックチャンクマスク(chunk_size=[8,12,16] / stride=[6,10,14] / pad_left=0 / look_back=1、1フレーム=60ms)
|
| 39 |
-
- **設定**: 4エポック、LR 2e-4、
|
| 40 |
- **正規化**: モデルネイティブの全角句読点規約(!?…~)を維持。ASCII への NFKC 折り畳みは句読点について無効化
|
|
|
|
| 41 |
|
| 42 |
## 制約・注意
|
| 43 |
|
| 44 |
- **日本語特化**です。中国語・広東語・英語・韓国語の性能は評価しておらず、維持対象外です
|
| 45 |
- 感情・イベントラベルはベースモデルの機能を引き継ぎますが、本 FT では最適化していません
|
| 46 |
-
- チャンク推論
|
| 47 |
|
| 48 |
## 使い方
|
| 49 |
|
|
@@ -63,14 +67,14 @@ res = model.generate(input="audio.wav", language="ja", use_itn=True)
|
|
| 63 |
|
| 64 |
### チャンク(ストリーミング)推論
|
| 65 |
|
| 66 |
-
同梱 `model.py` の `init_chunk_cache()` / `forward_chunk()`、または [SenseVoice-mod](https://github.com/nelmo-ux/SenseVoice-mod) の `streaming/` パッケージ(
|
| 67 |
|
| 68 |
## ファイル
|
| 69 |
|
| 70 |
-
- `model.pt` — ファインチューニング済み重み(
|
| 71 |
- `config.yaml` / `configuration.json` / `am.mvn` / `chn_jpn_yue_eng_ko_spectok.bpe.model` — funasr ロードに必要な一式(ベースモデル由来)
|
| 72 |
- `model.py` — チャンク推論対応のモデル実装(remote code)
|
| 73 |
-
- `eval/` —
|
| 74 |
|
| 75 |
## ライセンス・帰属
|
| 76 |
|
|
|
|
| 19 |
|
| 20 |
SenseVoiceSmall を**チャンクマスク学習(SCAMA方式)でファインチューニングした日本語特化モデル**です。ストリーミング(チャンク逐次)推論時の精度劣化を解消することを目的としています。
|
| 21 |
|
| 22 |
+
ベースの SenseVoiceSmall は全区間双方向 attention で学習されているため、そのままチャンク推論すると精度が大きく劣化します。本モデルはダイナミックチャンクマスク(chunk_size を学習ステップごとに 8/12/16 からランダム選択)でファインチューニングを行い、このギャップをほぼ解消しました。
|
| 23 |
|
| 24 |
+
**v2(現行)**: 300時間コーパス・H100×2(bf16)で学習。v1(54時間・Apple Silicon MPS)から全指標で改善。
|
| 25 |
+
|
| 26 |
+
## 結果(v2、保留話者 5,194クリップ・日本語・CER、fp32評価)
|
| 27 |
|
| 28 |
| モデル | チャンク推論 CER | フル注意 CER | ギャップ |
|
| 29 |
|---|---|---|---|
|
| 30 |
+
| SenseVoiceSmall(公開重み) | 0.4024 | 0.1781 | 0.2243 |
|
| 31 |
+
| **本モデル v2** | **0.1679** | **0.1584** | **0.0095** |
|
| 32 |
|
| 33 |
+
- チャンク推論 CER は**相対 58% 削減**、チャンクとフル注意の差は **96% 縮小**(0.2243 → 0.0095)
|
| 34 |
+
- フル注意(非ストリーミング)推論もベースモデルより改善
|
| 35 |
- 評価データは学習と話者を完全分離(声優単位のリーク検証済み)
|
| 36 |
+
- `eval/` に評価の生JSON(採用条件と次点条件)を同梱
|
| 37 |
|
| 38 |
+
## 学習詳細(v2)
|
| 39 |
|
| 40 |
+
- **データ**: [OOPPEENN/VisualNovel_Dataset](https://huggingface.co/datasets/OOPPEENN/56697375616C4E6F76656C5F44617461736574) のサブセット300時間(196,047クリップ、24アーカイブ・22スタジオ、16kHz mono、話者分離 train/val 分割)
|
| 41 |
- **方式**: GT教師あり CTC + ダイナミックチャンクマスク(chunk_size=[8,12,16] / stride=[6,10,14] / pad_left=0 / look_back=1、1フレーム=60ms)
|
| 42 |
+
- **設定**: 4エポック、LR 2e-4(Noam、warmup 680 step ≈ 総ステップの8%)、実効バッチ 48,000 token、bf16、H100 NVL ×2 で約45分
|
| 43 |
- **正規化**: モデルネイティブの全角句読点規約(!?…~)を維持。ASCII への NFKC 折り畳みは句読点について無効化
|
| 44 |
+
- 学習・評価コードと再現手順: [nelmo-ux/SenseVoice-mod](https://github.com/nelmo-ux/SenseVoice-mod)(`feat/chunk-training` ブランチ、`docs/chunk_training.md`)
|
| 45 |
|
| 46 |
## 制約・注意
|
| 47 |
|
| 48 |
- **日本語特化**です。中国語・広東語・英語・韓国語の性能は評価しておらず、維持対象外です
|
| 49 |
- 感情・イベントラベルはベースモデルの機能を引き継ぎますが、本 FT では最適化していません
|
| 50 |
+
- 同梱の `model.py` はチャンク推論対応版(`forward_chunk` / `init_chunk_cache` を含む)です
|
| 51 |
|
| 52 |
## 使い方
|
| 53 |
|
|
|
|
| 67 |
|
| 68 |
### チャンク(ストリーミング)推論
|
| 69 |
|
| 70 |
+
同梱 `model.py` の `init_chunk_cache()` / `forward_chunk()`、または [SenseVoice-mod](https://github.com/nelmo-ux/SenseVoice-mod) の `streaming/` パッケージ(チャンクバックエンド)を使用してください。学習時ジオメトリ(window 12 / stride 10 / pad_right 2 / look_back 1)での評価値が上表���す。
|
| 71 |
|
| 72 |
## ファイル
|
| 73 |
|
| 74 |
+
- `model.pt` — ファインチューニング済み重み(v2 採用チェックポイント、weights のみ)
|
| 75 |
- `config.yaml` / `configuration.json` / `am.mvn` / `chn_jpn_yue_eng_ko_spectok.bpe.model` — funasr ロードに必要な一式(ベースモデル由来)
|
| 76 |
- `model.py` — チャンク推論対応のモデル実装(remote code)
|
| 77 |
+
- `eval/` — 全 val 確定評価の生JSON(採用 lr2e4/ep4・次点 lr6e4/ep4)
|
| 78 |
|
| 79 |
## ライセンス・帰属
|
| 80 |
|
eval/eval_full_lr2e4_ep4.json
ADDED
|
@@ -0,0 +1,241 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
{
|
| 2 |
+
"generated_at": "2026-08-16T17:36:28+00:00",
|
| 3 |
+
"device": "cuda",
|
| 4 |
+
"precision": {
|
| 5 |
+
"mode": "fp32",
|
| 6 |
+
"comparable_to_fp32_baseline": true,
|
| 7 |
+
"allow_tf32_requested": false,
|
| 8 |
+
"cudnn_allow_tf32": false,
|
| 9 |
+
"cuda_matmul_allow_tf32": false,
|
| 10 |
+
"cudnn_deterministic": true,
|
| 11 |
+
"float32_matmul_precision": "highest",
|
| 12 |
+
"note": "TF32 disabled explicitly; CUDA ran in fp32 to stay comparable to the fp32 baseline"
|
| 13 |
+
},
|
| 14 |
+
"geometry": {
|
| 15 |
+
"geometry_index": 1,
|
| 16 |
+
"window_frames": 12,
|
| 17 |
+
"stride_frames": 10,
|
| 18 |
+
"pad_left_frames": 0,
|
| 19 |
+
"pad_right_frames": 2,
|
| 20 |
+
"encoder_look_back": 1,
|
| 21 |
+
"lookahead_ms": 120.0,
|
| 22 |
+
"training_config": {
|
| 23 |
+
"chunk_size": [
|
| 24 |
+
8,
|
| 25 |
+
12,
|
| 26 |
+
16
|
| 27 |
+
],
|
| 28 |
+
"stride": [
|
| 29 |
+
6,
|
| 30 |
+
10,
|
| 31 |
+
14
|
| 32 |
+
],
|
| 33 |
+
"pad_left": [
|
| 34 |
+
0,
|
| 35 |
+
0,
|
| 36 |
+
0
|
| 37 |
+
],
|
| 38 |
+
"encoder_att_look_back_factor": [
|
| 39 |
+
1,
|
| 40 |
+
1,
|
| 41 |
+
1
|
| 42 |
+
]
|
| 43 |
+
}
|
| 44 |
+
},
|
| 45 |
+
"scoring": {
|
| 46 |
+
"cer": "corpus-level Levenshtein over NFKC-normalised characters",
|
| 47 |
+
"punctuation": "stripped",
|
| 48 |
+
"whitespace": "stripped",
|
| 49 |
+
"rich_tags": "stripped",
|
| 50 |
+
"wer_note": "whitespace tokens; near-meaningless for unsegmented Japanese and Chinese - read CER"
|
| 51 |
+
},
|
| 52 |
+
"models": {
|
| 53 |
+
"base": {
|
| 54 |
+
"dir": "/workspace/models/SenseVoiceSmall",
|
| 55 |
+
"checkpoint": null
|
| 56 |
+
},
|
| 57 |
+
"finetuned": {
|
| 58 |
+
"dir": "/workspace/models/SenseVoiceSmall",
|
| 59 |
+
"checkpoint": "/outputs/run_lr2e4/model.pt.ep4"
|
| 60 |
+
}
|
| 61 |
+
},
|
| 62 |
+
"japanese": {
|
| 63 |
+
"note": "the selection axis: checkpoint choice keys off these numbers only",
|
| 64 |
+
"val": {
|
| 65 |
+
"jsonl": "/corpus/vn/val.jsonl",
|
| 66 |
+
"num_clips": 5194,
|
| 67 |
+
"metrics": {
|
| 68 |
+
"per_model": {
|
| 69 |
+
"base": {
|
| 70 |
+
"chunk": {
|
| 71 |
+
"cer": 0.4023662974910737,
|
| 72 |
+
"mean_cer": 0.4914901804851688,
|
| 73 |
+
"wer": 0.9986962190352021,
|
| 74 |
+
"num_clips": 5194,
|
| 75 |
+
"ref_chars": 104467,
|
| 76 |
+
"char_edits": 42034,
|
| 77 |
+
"ref_words": 13806,
|
| 78 |
+
"word_edits": 13788
|
| 79 |
+
},
|
| 80 |
+
"chunk_last_partial": {
|
| 81 |
+
"cer": 0.4350751912087071,
|
| 82 |
+
"mean_cer": 0.5188694564001065,
|
| 83 |
+
"wer": 0.9962335216572504,
|
| 84 |
+
"num_clips": 5194,
|
| 85 |
+
"ref_chars": 104467,
|
| 86 |
+
"char_edits": 45451,
|
| 87 |
+
"ref_words": 13806,
|
| 88 |
+
"word_edits": 13754
|
| 89 |
+
},
|
| 90 |
+
"full": {
|
| 91 |
+
"cer": 0.17806580068346942,
|
| 92 |
+
"mean_cer": 0.2572920595098674,
|
| 93 |
+
"wer": 0.970013037809648,
|
| 94 |
+
"num_clips": 5194,
|
| 95 |
+
"ref_chars": 104467,
|
| 96 |
+
"char_edits": 18602,
|
| 97 |
+
"ref_words": 13806,
|
| 98 |
+
"word_edits": 13392
|
| 99 |
+
},
|
| 100 |
+
"chunk_minus_full_cer": 0.2243004968076043,
|
| 101 |
+
"chunk_vs_full_cer": 0.3284395888446859
|
| 102 |
+
},
|
| 103 |
+
"finetuned": {
|
| 104 |
+
"chunk": {
|
| 105 |
+
"cer": 0.1679382005800875,
|
| 106 |
+
"mean_cer": 0.22391173120153837,
|
| 107 |
+
"wer": 0.6450094161958568,
|
| 108 |
+
"num_clips": 5194,
|
| 109 |
+
"ref_chars": 104467,
|
| 110 |
+
"char_edits": 17544,
|
| 111 |
+
"ref_words": 13806,
|
| 112 |
+
"word_edits": 8905
|
| 113 |
+
},
|
| 114 |
+
"chunk_last_partial": {
|
| 115 |
+
"cer": 0.2597853867728565,
|
| 116 |
+
"mean_cer": 0.3537779663494788,
|
| 117 |
+
"wer": 0.7392438070404173,
|
| 118 |
+
"num_clips": 5194,
|
| 119 |
+
"ref_chars": 104467,
|
| 120 |
+
"char_edits": 27139,
|
| 121 |
+
"ref_words": 13806,
|
| 122 |
+
"word_edits": 10206
|
| 123 |
+
},
|
| 124 |
+
"full": {
|
| 125 |
+
"cer": 0.15843280653220634,
|
| 126 |
+
"mean_cer": 0.21153142062270727,
|
| 127 |
+
"wer": 0.6774590757641605,
|
| 128 |
+
"num_clips": 5194,
|
| 129 |
+
"ref_chars": 104467,
|
| 130 |
+
"char_edits": 16551,
|
| 131 |
+
"ref_words": 13806,
|
| 132 |
+
"word_edits": 9353
|
| 133 |
+
},
|
| 134 |
+
"chunk_minus_full_cer": 0.009505394047881144,
|
| 135 |
+
"chunk_vs_full_cer": 0.08638681916209283
|
| 136 |
+
}
|
| 137 |
+
},
|
| 138 |
+
"delta": {
|
| 139 |
+
"chunk_cer": -0.23442809691098623,
|
| 140 |
+
"full_cer": -0.019632994151263072,
|
| 141 |
+
"chunk_minus_full_cer": -0.21479510275972316,
|
| 142 |
+
"chunk_vs_full_cer": -0.24205276968259304
|
| 143 |
+
}
|
| 144 |
+
}
|
| 145 |
+
},
|
| 146 |
+
"clips": []
|
| 147 |
+
},
|
| 148 |
+
"reference_only": {
|
| 149 |
+
"note": "reference only, not a selection criterion: this finetune is Japanese-specialised and Chinese retention is not a maintained property",
|
| 150 |
+
"clips": [
|
| 151 |
+
{
|
| 152 |
+
"key": "zh_sample.wav",
|
| 153 |
+
"path": "/workspace/runtime/llama.cpp/tests/sample.wav",
|
| 154 |
+
"language": "auto",
|
| 155 |
+
"reference_source": "base model full-attention decode (no ground truth)",
|
| 156 |
+
"per_model": {
|
| 157 |
+
"base": {
|
| 158 |
+
"full": "<|zh|><|NEUTRAL|><|Speech|><|woitn|>我想问我在滨海新区有房",
|
| 159 |
+
"chunk": "我想想问我在滨海心新区有有房",
|
| 160 |
+
"chunk_last_partial": "我想想问我在滨���心新区有",
|
| 161 |
+
"chunk_vs_full_cer": 0.2727272727272727
|
| 162 |
+
},
|
| 163 |
+
"finetuned": {
|
| 164 |
+
"full": "<|ja|><|NEUTRAL|><|Speech|><|woitn|>我想我在滨海新区有房",
|
| 165 |
+
"chunk": "我想。海新区",
|
| 166 |
+
"chunk_last_partial": "我想。海新区",
|
| 167 |
+
"chunk_vs_full_cer": 0.5
|
| 168 |
+
}
|
| 169 |
+
},
|
| 170 |
+
"drift_cer_vs_base_full": 0.09090909090909091,
|
| 171 |
+
"gap_delta": 0.2272727272727273
|
| 172 |
+
}
|
| 173 |
+
]
|
| 174 |
+
},
|
| 175 |
+
"selection": {
|
| 176 |
+
"metric": "ja_val_chunk_cer",
|
| 177 |
+
"value": 0.1679382005800875,
|
| 178 |
+
"model": "finetuned",
|
| 179 |
+
"note": "corpus CER of the complete chunk-mode decode on the held-out Japanese val set; lower is better"
|
| 180 |
+
},
|
| 181 |
+
"examples": [
|
| 182 |
+
{
|
| 183 |
+
"key": "0verflow_School_Days_HQ__ちっちゃい子__04_kb_c03_0630",
|
| 184 |
+
"scope": "japanese",
|
| 185 |
+
"reference": "ねー。ままー。あっち、ちゅーしてる",
|
| 186 |
+
"base_full": "<|ja|><|EMO_UNKNOWN|><|Speech|><|woitn|>ねえママあちチューしてる",
|
| 187 |
+
"base_chunk": "ねえマママ八九しててる",
|
| 188 |
+
"base_chunk_last_partial": "ねえマママ八九しててる",
|
| 189 |
+
"finetuned_full": "<|ja|><|NEUTRAL|><|Speech|><|woitn|>ねえ、ママ、あっち、チューしてる",
|
| 190 |
+
"finetuned_chunk": "ねえ、まマ、あっち、ちゅーしてる",
|
| 191 |
+
"finetuned_chunk_last_partial": "ねえ、まマ、あっち、ちゅーしてる"
|
| 192 |
+
},
|
| 193 |
+
{
|
| 194 |
+
"key": "0verflow_School_Days_HQ__ちっちゃい子__04_kb_c03_0680",
|
| 195 |
+
"scope": "japanese",
|
| 196 |
+
"reference": "ちゅーだよ。ちゅー……あっ、ままー",
|
| 197 |
+
"base_full": "<|ja|><|EMO_UNKNOWN|><|Speech|><|woitn|>十だよじまあまあ",
|
| 198 |
+
"base_chunk": "十代だよじはマ奶",
|
| 199 |
+
"base_chunk_last_partial": "十代だよじはマ奶",
|
| 200 |
+
"finetuned_full": "<|ja|><|NEUTRAL|><|Speech|><|woitn|>ちゅーだよ!ちゅー!わ、まーま",
|
| 201 |
+
"finetuned_chunk": "ちーだよ、ちゅーは、な",
|
| 202 |
+
"finetuned_chunk_last_partial": "ちーだよ、ちゅーは、な"
|
| 203 |
+
},
|
| 204 |
+
{
|
| 205 |
+
"key": "0verflow_School_Days_HQ__ちっちゃい子__04_kc_c03_0490",
|
| 206 |
+
"scope": "japanese",
|
| 207 |
+
"reference": "ねー。ままー。あっち、ちゅーしてる",
|
| 208 |
+
"base_full": "<|ja|><|EMO_UNKNOWN|><|Speech|><|woitn|>ねえママあちチューしてる",
|
| 209 |
+
"base_chunk": "ねえマママ八九しててる",
|
| 210 |
+
"base_chunk_last_partial": "ねえマママ八九しててる",
|
| 211 |
+
"finetuned_full": "<|ja|><|NEUTRAL|><|Speech|><|woitn|>ねえ、ママ、あっち、チューしてる",
|
| 212 |
+
"finetuned_chunk": "ねえ、まマ、あっち、ちゅーしてる",
|
| 213 |
+
"finetuned_chunk_last_partial": "ねえ、まマ、あっち、ちゅーしてる"
|
| 214 |
+
},
|
| 215 |
+
{
|
| 216 |
+
"key": "0verflow_School_Days_HQ__ちっちゃい子__04_kc_c03_0540",
|
| 217 |
+
"scope": "japanese",
|
| 218 |
+
"reference": "ちゅーだよ。ちゅー……あっ、ままー",
|
| 219 |
+
"base_full": "<|ja|><|EMO_UNKNOWN|><|Speech|><|woitn|>十だよじまあまあ",
|
| 220 |
+
"base_chunk": "十代だよじはマ奶",
|
| 221 |
+
"base_chunk_last_partial": "十代だよじはマ奶",
|
| 222 |
+
"finetuned_full": "<|ja|><|NEUTRAL|><|Speech|><|woitn|>ちゅーだよ!ちゅー!わ、まーま",
|
| 223 |
+
"finetuned_chunk": "ちーだよ、ちゅーは、な",
|
| 224 |
+
"finetuned_chunk_last_partial": "ちーだよ、ちゅーは、な"
|
| 225 |
+
},
|
| 226 |
+
{
|
| 227 |
+
"key": "0verflow_School_Days_HQ__みなみ__02_2s_r08_0130",
|
| 228 |
+
"scope": "japanese",
|
| 229 |
+
"reference": "どうせ、大した用じゃないんでしょ",
|
| 230 |
+
"base_full": "<|ja|><|SURPRISED|><|Speech|><|woitn|>どうせ大したようじゃないんでしょう",
|
| 231 |
+
"base_chunk": "どうせせ大ししたようじゃないないんでしょ",
|
| 232 |
+
"base_chunk_last_partial": "どうせせ大ししたようじゃない",
|
| 233 |
+
"finetuned_full": "<|ja|><|NEUTRAL|><|Speech|><|woitn|>どうせ、大したようじゃないんでしょ",
|
| 234 |
+
"finetuned_chunk": "どうせ、大したようじゃないんでしょ",
|
| 235 |
+
"finetuned_chunk_last_partial": "どうせ、大したようじゃな"
|
| 236 |
+
}
|
| 237 |
+
],
|
| 238 |
+
"warnings": [
|
| 239 |
+
"bundled ja.mp3 not found under ~/.cache/huggingface/hub/models--FunAudioLLM--SenseVoiceSmall/snapshots/*/example/ja.mp3 - skipped; pull the HuggingFace snapshot or pass --ja-clip to include it"
|
| 240 |
+
]
|
| 241 |
+
}
|
eval/eval_full_lr6e4_ep4.json
ADDED
|
@@ -0,0 +1,241 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
{
|
| 2 |
+
"generated_at": "2026-08-16T16:54:50+00:00",
|
| 3 |
+
"device": "cuda",
|
| 4 |
+
"precision": {
|
| 5 |
+
"mode": "fp32",
|
| 6 |
+
"comparable_to_fp32_baseline": true,
|
| 7 |
+
"allow_tf32_requested": false,
|
| 8 |
+
"cudnn_allow_tf32": false,
|
| 9 |
+
"cuda_matmul_allow_tf32": false,
|
| 10 |
+
"cudnn_deterministic": true,
|
| 11 |
+
"float32_matmul_precision": "highest",
|
| 12 |
+
"note": "TF32 disabled explicitly; CUDA ran in fp32 to stay comparable to the fp32 baseline"
|
| 13 |
+
},
|
| 14 |
+
"geometry": {
|
| 15 |
+
"geometry_index": 1,
|
| 16 |
+
"window_frames": 12,
|
| 17 |
+
"stride_frames": 10,
|
| 18 |
+
"pad_left_frames": 0,
|
| 19 |
+
"pad_right_frames": 2,
|
| 20 |
+
"encoder_look_back": 1,
|
| 21 |
+
"lookahead_ms": 120.0,
|
| 22 |
+
"training_config": {
|
| 23 |
+
"chunk_size": [
|
| 24 |
+
8,
|
| 25 |
+
12,
|
| 26 |
+
16
|
| 27 |
+
],
|
| 28 |
+
"stride": [
|
| 29 |
+
6,
|
| 30 |
+
10,
|
| 31 |
+
14
|
| 32 |
+
],
|
| 33 |
+
"pad_left": [
|
| 34 |
+
0,
|
| 35 |
+
0,
|
| 36 |
+
0
|
| 37 |
+
],
|
| 38 |
+
"encoder_att_look_back_factor": [
|
| 39 |
+
1,
|
| 40 |
+
1,
|
| 41 |
+
1
|
| 42 |
+
]
|
| 43 |
+
}
|
| 44 |
+
},
|
| 45 |
+
"scoring": {
|
| 46 |
+
"cer": "corpus-level Levenshtein over NFKC-normalised characters",
|
| 47 |
+
"punctuation": "stripped",
|
| 48 |
+
"whitespace": "stripped",
|
| 49 |
+
"rich_tags": "stripped",
|
| 50 |
+
"wer_note": "whitespace tokens; near-meaningless for unsegmented Japanese and Chinese - read CER"
|
| 51 |
+
},
|
| 52 |
+
"models": {
|
| 53 |
+
"base": {
|
| 54 |
+
"dir": "/workspace/models/SenseVoiceSmall",
|
| 55 |
+
"checkpoint": null
|
| 56 |
+
},
|
| 57 |
+
"finetuned": {
|
| 58 |
+
"dir": "/workspace/models/SenseVoiceSmall",
|
| 59 |
+
"checkpoint": "/outputs/run_lr6e4/model.pt.ep4"
|
| 60 |
+
}
|
| 61 |
+
},
|
| 62 |
+
"japanese": {
|
| 63 |
+
"note": "the selection axis: checkpoint choice keys off these numbers only",
|
| 64 |
+
"val": {
|
| 65 |
+
"jsonl": "/corpus/vn/val.jsonl",
|
| 66 |
+
"num_clips": 5194,
|
| 67 |
+
"metrics": {
|
| 68 |
+
"per_model": {
|
| 69 |
+
"base": {
|
| 70 |
+
"chunk": {
|
| 71 |
+
"cer": 0.4023662974910737,
|
| 72 |
+
"mean_cer": 0.4914901804851688,
|
| 73 |
+
"wer": 0.9986962190352021,
|
| 74 |
+
"num_clips": 5194,
|
| 75 |
+
"ref_chars": 104467,
|
| 76 |
+
"char_edits": 42034,
|
| 77 |
+
"ref_words": 13806,
|
| 78 |
+
"word_edits": 13788
|
| 79 |
+
},
|
| 80 |
+
"chunk_last_partial": {
|
| 81 |
+
"cer": 0.4350751912087071,
|
| 82 |
+
"mean_cer": 0.5188694564001065,
|
| 83 |
+
"wer": 0.9962335216572504,
|
| 84 |
+
"num_clips": 5194,
|
| 85 |
+
"ref_chars": 104467,
|
| 86 |
+
"char_edits": 45451,
|
| 87 |
+
"ref_words": 13806,
|
| 88 |
+
"word_edits": 13754
|
| 89 |
+
},
|
| 90 |
+
"full": {
|
| 91 |
+
"cer": 0.17806580068346942,
|
| 92 |
+
"mean_cer": 0.2572920595098674,
|
| 93 |
+
"wer": 0.970013037809648,
|
| 94 |
+
"num_clips": 5194,
|
| 95 |
+
"ref_chars": 104467,
|
| 96 |
+
"char_edits": 18602,
|
| 97 |
+
"ref_words": 13806,
|
| 98 |
+
"word_edits": 13392
|
| 99 |
+
},
|
| 100 |
+
"chunk_minus_full_cer": 0.2243004968076043,
|
| 101 |
+
"chunk_vs_full_cer": 0.3284395888446859
|
| 102 |
+
},
|
| 103 |
+
"finetuned": {
|
| 104 |
+
"chunk": {
|
| 105 |
+
"cer": 0.16874228225181157,
|
| 106 |
+
"mean_cer": 0.22313613924150844,
|
| 107 |
+
"wer": 0.6497175141242938,
|
| 108 |
+
"num_clips": 5194,
|
| 109 |
+
"ref_chars": 104467,
|
| 110 |
+
"char_edits": 17628,
|
| 111 |
+
"ref_words": 13806,
|
| 112 |
+
"word_edits": 8970
|
| 113 |
+
},
|
| 114 |
+
"chunk_last_partial": {
|
| 115 |
+
"cer": 0.2664190605645802,
|
| 116 |
+
"mean_cer": 0.3629660993168242,
|
| 117 |
+
"wer": 0.74655946689845,
|
| 118 |
+
"num_clips": 5194,
|
| 119 |
+
"ref_chars": 104467,
|
| 120 |
+
"char_edits": 27832,
|
| 121 |
+
"ref_words": 13806,
|
| 122 |
+
"word_edits": 10307
|
| 123 |
+
},
|
| 124 |
+
"full": {
|
| 125 |
+
"cer": 0.15495802502225584,
|
| 126 |
+
"mean_cer": 0.2095499274899328,
|
| 127 |
+
"wer": 0.6350861944082283,
|
| 128 |
+
"num_clips": 5194,
|
| 129 |
+
"ref_chars": 104467,
|
| 130 |
+
"char_edits": 16188,
|
| 131 |
+
"ref_words": 13806,
|
| 132 |
+
"word_edits": 8768
|
| 133 |
+
},
|
| 134 |
+
"chunk_minus_full_cer": 0.01378425722955573,
|
| 135 |
+
"chunk_vs_full_cer": 0.08310036060127224
|
| 136 |
+
}
|
| 137 |
+
},
|
| 138 |
+
"delta": {
|
| 139 |
+
"chunk_cer": -0.23362401523926216,
|
| 140 |
+
"full_cer": -0.02310777566121358,
|
| 141 |
+
"chunk_minus_full_cer": -0.21051623957804858,
|
| 142 |
+
"chunk_vs_full_cer": -0.24533922824341364
|
| 143 |
+
}
|
| 144 |
+
}
|
| 145 |
+
},
|
| 146 |
+
"clips": []
|
| 147 |
+
},
|
| 148 |
+
"reference_only": {
|
| 149 |
+
"note": "reference only, not a selection criterion: this finetune is Japanese-specialised and Chinese retention is not a maintained property",
|
| 150 |
+
"clips": [
|
| 151 |
+
{
|
| 152 |
+
"key": "zh_sample.wav",
|
| 153 |
+
"path": "/workspace/runtime/llama.cpp/tests/sample.wav",
|
| 154 |
+
"language": "auto",
|
| 155 |
+
"reference_source": "base model full-attention decode (no ground truth)",
|
| 156 |
+
"per_model": {
|
| 157 |
+
"base": {
|
| 158 |
+
"full": "<|zh|><|NEUTRAL|><|Speech|><|woitn|>我想问我在滨海新区有房",
|
| 159 |
+
"chunk": "我想想问我在滨海心新区有有房",
|
| 160 |
+
"chunk_last_partial": "我想想问我在滨海��新区有",
|
| 161 |
+
"chunk_vs_full_cer": 0.2727272727272727
|
| 162 |
+
},
|
| 163 |
+
"finetuned": {
|
| 164 |
+
"full": "<|ja|><|NEUTRAL|><|Speech|><|woitn|>…わしは…わざ海進駐をファ",
|
| 165 |
+
"chunk": "我シは…おざピ海進駐フ",
|
| 166 |
+
"chunk_last_partial": "我シは…おざピ海進駐",
|
| 167 |
+
"chunk_vs_full_cer": 0.5454545454545454
|
| 168 |
+
}
|
| 169 |
+
},
|
| 170 |
+
"drift_cer_vs_base_full": 1.0,
|
| 171 |
+
"gap_delta": 0.2727272727272727
|
| 172 |
+
}
|
| 173 |
+
]
|
| 174 |
+
},
|
| 175 |
+
"selection": {
|
| 176 |
+
"metric": "ja_val_chunk_cer",
|
| 177 |
+
"value": 0.16874228225181157,
|
| 178 |
+
"model": "finetuned",
|
| 179 |
+
"note": "corpus CER of the complete chunk-mode decode on the held-out Japanese val set; lower is better"
|
| 180 |
+
},
|
| 181 |
+
"examples": [
|
| 182 |
+
{
|
| 183 |
+
"key": "0verflow_School_Days_HQ__ちっちゃい子__04_kb_c03_0630",
|
| 184 |
+
"scope": "japanese",
|
| 185 |
+
"reference": "ねー。ままー。あっち、ちゅーしてる",
|
| 186 |
+
"base_full": "<|ja|><|EMO_UNKNOWN|><|Speech|><|woitn|>ねえママあちチューしてる",
|
| 187 |
+
"base_chunk": "ねえマママ八九しててる",
|
| 188 |
+
"base_chunk_last_partial": "ねえマママ八九しててる",
|
| 189 |
+
"finetuned_full": "<|ja|><|NEUTRAL|><|Speech|><|woitn|>ねえ、まま。あっち、ちゅーしてる",
|
| 190 |
+
"finetuned_chunk": "ね、まま。あっち、ちーしてる",
|
| 191 |
+
"finetuned_chunk_last_partial": "ね、まま。あっち、ちーしてる"
|
| 192 |
+
},
|
| 193 |
+
{
|
| 194 |
+
"key": "0verflow_School_Days_HQ__ちっちゃい子__04_kb_c03_0680",
|
| 195 |
+
"scope": "japanese",
|
| 196 |
+
"reference": "ちゅーだよ。ちゅー……あっ、ままー",
|
| 197 |
+
"base_full": "<|ja|><|EMO_UNKNOWN|><|Speech|><|woitn|>十だよじまあまあ",
|
| 198 |
+
"base_chunk": "十代だよじはマ奶",
|
| 199 |
+
"base_chunk_last_partial": "十代だよじはマ奶",
|
| 200 |
+
"finetuned_full": "<|ja|><|NEUTRAL|><|Speech|><|woitn|>ちゅーだよ!ちゅー!わ、まあまあ",
|
| 201 |
+
"finetuned_chunk": "ちだよ!1ゅ!あ、メーま!",
|
| 202 |
+
"finetuned_chunk_last_partial": "ちだよ!1ゅ!あ、メーま"
|
| 203 |
+
},
|
| 204 |
+
{
|
| 205 |
+
"key": "0verflow_School_Days_HQ__ちっちゃい子__04_kc_c03_0490",
|
| 206 |
+
"scope": "japanese",
|
| 207 |
+
"reference": "ねー。ままー。あっち、ちゅーしてる",
|
| 208 |
+
"base_full": "<|ja|><|EMO_UNKNOWN|><|Speech|><|woitn|>ねえママあちチューしてる",
|
| 209 |
+
"base_chunk": "ねえマママ八九しててる",
|
| 210 |
+
"base_chunk_last_partial": "ねえマママ八九しててる",
|
| 211 |
+
"finetuned_full": "<|ja|><|NEUTRAL|><|Speech|><|woitn|>ねえ、まま。あっち、ちゅーしてる",
|
| 212 |
+
"finetuned_chunk": "ね、まま。あっち、ちーしてる",
|
| 213 |
+
"finetuned_chunk_last_partial": "ね、まま。あっち、ちーしてる"
|
| 214 |
+
},
|
| 215 |
+
{
|
| 216 |
+
"key": "0verflow_School_Days_HQ__ちっちゃい子__04_kc_c03_0540",
|
| 217 |
+
"scope": "japanese",
|
| 218 |
+
"reference": "ちゅーだよ。ちゅー……あっ、ままー",
|
| 219 |
+
"base_full": "<|ja|><|EMO_UNKNOWN|><|Speech|><|woitn|>十だよじまあまあ",
|
| 220 |
+
"base_chunk": "十代だよじはマ奶",
|
| 221 |
+
"base_chunk_last_partial": "十代だよじはマ奶",
|
| 222 |
+
"finetuned_full": "<|ja|><|NEUTRAL|><|Speech|><|woitn|>ちゅーだよ!ちゅー!わ、まあまあ",
|
| 223 |
+
"finetuned_chunk": "ちだよ!1ゅ!あ、メーま!",
|
| 224 |
+
"finetuned_chunk_last_partial": "ちだよ!1ゅ!あ、メーま"
|
| 225 |
+
},
|
| 226 |
+
{
|
| 227 |
+
"key": "0verflow_School_Days_HQ__みなみ__02_2s_r08_0130",
|
| 228 |
+
"scope": "japanese",
|
| 229 |
+
"reference": "どうせ、大した用じゃないんでしょ",
|
| 230 |
+
"base_full": "<|ja|><|SURPRISED|><|Speech|><|woitn|>どうせ大したようじゃないんでしょう",
|
| 231 |
+
"base_chunk": "どうせせ大ししたようじゃないないんでしょ",
|
| 232 |
+
"base_chunk_last_partial": "どうせせ大ししたようじゃない",
|
| 233 |
+
"finetuned_full": "<|ja|><|NEUTRAL|><|Speech|><|woitn|>どうせ、大したようじゃないんでしょ?",
|
| 234 |
+
"finetuned_chunk": "どうせ、大したようじゃないんでしょ?",
|
| 235 |
+
"finetuned_chunk_last_partial": "どうせ、大したようじゃ"
|
| 236 |
+
}
|
| 237 |
+
],
|
| 238 |
+
"warnings": [
|
| 239 |
+
"bundled ja.mp3 not found under ~/.cache/huggingface/hub/models--FunAudioLLM--SenseVoiceSmall/snapshots/*/example/ja.mp3 - skipped; pull the HuggingFace snapshot or pass --ja-clip to include it"
|
| 240 |
+
]
|
| 241 |
+
}
|
model.pt
CHANGED
|
@@ -1,3 +1,3 @@
|
|
| 1 |
version https://git-lfs.github.com/spec/v1
|
| 2 |
-
oid sha256:
|
| 3 |
-
size
|
|
|
|
| 1 |
version https://git-lfs.github.com/spec/v1
|
| 2 |
+
oid sha256:f5982ee0d7eb5e179376e4656035c16cfdfc3c341c69f2747d200ad8289eb15a
|
| 3 |
+
size 936300660
|