{ "model_type": "dubbing_bridge", "version": "4.0.0-fulldir-2b", "created": "2026-09-27", "task": "zh/en speech -> en/es/ja/zh dubbing (6 directions: zh->en/es/ja + en->zh/es/ja, voice-preserved, hidden2cv)", "pipeline": "ST LM (2B EXP-53, frozen) -> Hidden2CVMapper (25M, lang-conditioned, rft_fd2b53_sw_lam20/mapper_best) -> CosyVoice3 (0.5B, frozen)", "directions": ["zh2en", "zh2es", "zh2ja", "en2zh", "en2es", "en2ja"], "langs": ["en", "es", "ja", "zh"], "src_lang_detect": "自动判定: ST LM 转写原文含 CJK => zh 源, 否则 en 源", "components": { "stlm_llm": "stlm_llm", "stlm_ckpt": "stlm_ckpt", "stlm_omni": "stlm_omni", "cosyvoice3": "cosyvoice3", "mapper": "bridge/mapper.safetensors", "mapper_config": "bridge/mapper_config.json", "mapper_pt": "bridge/mapper_best.pt", "wetext_en_tn": "wetext_en_tn", "wetext_repo": "wetext_repo", "ja_ext": "code/ja_ext", "code": "code" }, "dims": { "d_st": 2048, "d_tts": 896, "d_spk": 192 }, "sample_rate": 24000, "default_mode": "h2cv", "modes": { "h2cv": "hidden2cv af 口径: ST hidden 经 mapper (lang 条件) 直注 CV3 LLM 文本 embedding 位, flow 端用源音频原生 campplus (本包唯一模式)" }, "mapper_lang2idx": { "note": "首现映射 (训练 ckpt langs=['en','es','ja','zh','ja','es'] 含重复标签, 尾部重复槽位训练中空置; 与 train_hidden2cv_ml.py 一致), pipeline 加载时 assert 钉死", "en": 0, "es": 1, "ja": 2, "zh": 3 }, "instruction": { "en": "把这段语音翻译成英文,先输出原文,换行输出英文译文。", "es": "把这段语音翻译成西班牙语,先输出原文,换行输出西班牙语译文。", "ja": "把这段语音翻译成日语,先输出原文,换行输出日语译文。", "zh": "把这段语音翻译成中文,先输出原文,换行输出中文译文。" }, "text_norm": { "en": "wetext-0.0.4-en-tn-v1 (normalize_en)", "es": "cv.frontend.text_normalize(split=False) wetext (同 scripts/build_d1_ml.py 与 fulldir/precompute_norm_e2x.py d1 口径)", "zh": "cv.frontend.text_normalize(split=False) wetext (同 precompute_norm_e2x.py)", "ja": "ja2kata (pyopenjtalk 词级映射, code/ja_ext) -> kata 串入 CV3, 对齐 kata_align", "st_side": "zh 源: en/es 译文段用归一化文本, ja 用混写原文; en 源: 一律译文原文 (build_d1_e2x 口径)" }, "runtime": { "python": "单进程: transformers==5.6.0 + torch==2.11.0 + librosa==1.0.0 + onnxruntime==1.30.0 + wetext==0.0.4 + kaldifst==1.8.0 + x-transformers==2.11.24 (参考 venv_unify); ja 前端 pyopenjtalk 0.4.1 + pykakasi 2.3.0 随包 vendored (code/ja_ext)", "notes": "CosyVoice3 在 transformers 5.6 下由 code/tts/pipeline.py 自动打 2 个补丁 (fp32 统一 + 全量 mask); 无子进程。单进程单卡 bf16 ~8G (2B ST LM ~4G + CV3 ~3G)" }, "stlm_source": "EXP-53-2B: $AT/models/mix_v6s10mix_tsfix_mlen_ml500_e2z_ext6ml_e2ext6_111_nb6499342_cpt_iter12613_hf + $AT/runs/mix_v6s10mix_tsfix_mlen_ml500_e2z_ext6ml_e2ext6_111_nb6499342_cpt_20260923_182209/checkpoints/iter_0012613", "mapper_ckpt_source": "runs/rft_fd2b53_sw_lam20/mapper_best.pt (D 线 2B 最优臂: 6 方向 RFT sweep lam2.0, zh->x+en->zh 终评综合最优)", "eval_metrics": { "zh2en": {"wer": 0.0709, "spk_cos": 0.743, "set": "eval36 n=100"}, "zh2es": {"wer": 0.0704, "spk_cos": 0.743, "set": "eval36 n=200 剔>0.3"}, "zh2ja": {"content_kata_cer": 0.0493, "spk_cos": 0.780, "set": "eval36 n=200 剔>0.3"}, "en2zh": {"cer": 0.0372, "spk_cos": 0.623, "set": "e2x eval200 剔>0.3"}, "en2es": {"wer": 0.0702, "spk_cos": 0.735, "set": "e2x eval200 剔>0.3, n_kept=146/196"}, "en2ja": {"content_kata_cer": 0.0345, "spk_cos": 0.698, "set": "e2x eval200 剔>0.3, n_kept=179/198"}, "note": "zh->x 为 eval36 真实译文口径, en->x 为 e2x manifest eval200 留出集口径, 两句集不同不可横比; 逐句产物 data/eval36/hyp2b53fd_final_table.json 与 hyp2b53fd_summary_fd_sw_lam20_e2{es,ja}.json" } }