Downloads · 30 days
15
7% of all-time downloads
fang04/medforge-qwen3.5-4b-dpo
medforge-qwen3.5-4b-dpo is a text generation model from fang04. Use it when you need the model to write or continue text. It is set up for transformers. The card lists the license as apache-2.0.
在 Qwen3.5-4B 上做医疗推理后训练的消融实验产物。训练信号全部来自模型自己的采样结果: 同题多次采样 → 经校准的验证器按标准答案判对错 → 对/错解配成偏好对 → DPO。 整个过程不引入任何外部模型写的推理示范。
Downloads · 30 days
15
7% of all-time downloads
All-time downloads
207
Public
Parameters
4.5B
9.1 GB on disk
Likes
0
Public
Click a slice to open those files.
.safetensors9.1 GB · 100%
From the Hugging Face model README
在 Qwen3.5-4B 上做医疗推理后训练的消融实验产物。训练信号全部来自模型自己的采样结果: 同题多次采样 → 经校准的验证器按标准答案判对错 → 对/错解配成偏好对 → DPO。 整个过程不引入任何外部模型写的推理示范。
⚠️ 研究与工程实践产物,不构成任何医疗建议;依据中国相关规定,AI 不得用于自动诊断与处方。
同一基座、同一套考卷、同一评测协议下,我们对比了三种后训练配方:
| 配方 | CMExam(n=2000) | CMB-val(n=280) | MedXpertQA(n=1000) |
|---|---|---|---|
| Qwen3.5-4B(原装基座) | 70.8% | 59.6% | 25.1% |
| + SFT · 2024 年 GPT-4o 蒸馏 CoT | 59.3%(−11.5) | 47.5%(−12.1) | 13.6%(−11.5) |
| + SFT · 2025 年 R1 蒸馏 CoT | 67.5%(−3.3) | 53.9%(−5.7) | 13.6%(−11.5) |
| + DPO · 自采样(本模型) | 70.7%(−0.1) | 56.1%(−3.5) | 24.4%(−0.7) |
核心发现:对 thinking-native 基座,蒸馏 SFT 会降智。 换更强的老师(GPT-4o → R1)能大幅止损 (主力卷 −11.5pp → −3.3pp),但困难卷两代教材同摔至 13.6% ——说明伤害不只来自教材质量, 而来自「模仿外部推理风格」这个动作本身:它覆盖了基座原生的长链思考。 自采样偏好学习是唯一不引入外部风格的路线,也是三种配方中唯一没有降智的——但本轮亦无显著增益: 三卷差值均落在基座的 95% 置信区间内。
值得记录的是逐题转移矩阵:CMExam 上 413/2000 题(20.7%)的答案发生翻转(修好 206、弄坏 207), 净收益为零。不是训练没生效,而是收益与损失相互抵消——问题定位在偏好信号的规模与匹配度 (约 1,000 对、单轮离线、英文开放题训练 vs 中文选择题评测),而非工程故障。 完整分析见实验报告。
Qwen/Qwen3.5-4B,LoRA 全层挂载(r=64, α=128, lr=5e-6, 1 epoch)FreedomIntelligence/medical-o1-verifiable-problem)
的自采样(temperature 1.0, k=6, max_tokens 8192)from transformers import AutoModelForCausalLM, AutoTokenizer
model_id = "fang04/medforge-qwen3.5-4b-dpo"
tok = AutoTokenizer.from_pretrained(model_id)
model = AutoModelForCausalLM.from_pretrained(model_id, torch_dtype="auto", device_map="auto")
msgs = [{"role": "user", "content": "患者男性 65 岁,突发胸骨后压榨性疼痛 3 小时,心电图 V1-V4 导联 ST 段抬高。最可能的诊断是什么?"}]
ids = tok.apply_chat_template(msgs, add_generation_prompt=True, return_tensors="pt").to(model.device)
out = model.generate(ids, max_new_tokens=8192)
print(tok.decode(out[0][ids.shape[-1]:], skip_special_tokens=True))
vLLM 部署:vllm serve fang04/medforge-qwen3.5-4b-dpo
完整代码、评测报告与全部负结果:https://github.com/yiongq/medforge