Instructions to use johnson/MiMo-9B-TCM-Andrology-LoRA with libraries, inference providers, notebooks, and local apps. Follow these links to get started.
- Libraries
- PEFT
How to use johnson/MiMo-9B-TCM-Andrology-LoRA with PEFT:
from peft import PeftModel from transformers import AutoModelForCausalLM base_model = AutoModelForCausalLM.from_pretrained("XiaomiMiMo/MiMo-V2.6-Distill-Qwen-9B") model = PeftModel.from_pretrained(base_model, "johnson/MiMo-9B-TCM-Andrology-LoRA") - Notebooks
- Google Colab
- Kaggle
08 · 模型卡(ModelScope / HuggingFace)
ModelScope 模型仓库自述。配套数据集:TCM-Andrology-EMR;代码与完整文档见 GitHub 仓库。
模型详情
| 项 | 值 |
|---|---|
| 基座模型 | XiaomiMiMo/MiMo-V2.6-Distill-Qwen-9B |
| 架构 | Qwen3_5ForConditionalGeneration(多模态 + 混合注意力) |
| 参数量 | 9.41B(可训练 LoRA 部分 43.3M = **0.458%**) |
| 微调方式 | bf16 LoRA(非 QLoRA) |
| LoRA 配置 | r=16, α=32, dropout=0.05, 12 个目标模块 |
| 训练数据 | 21,484 条中医男科门诊病历(含既往处方) |
| 训练硬件 | 单卡 NVIDIA H20 96GB |
| 训练时长 | 2 小时 50 分(2 epoch,2,686 步) |
| 精度 | bfloat16 |
| 许可 | 权重沿用基座许可;训练数据为 CC BY-NC 4.0,故本模型限非商用 |
目标模块(自动探测,重要)
down_proj gate_proj in_proj_a in_proj_b in_proj_qkv
in_proj_z k_proj o_proj out_proj q_proj up_proj v_proj
⚠️ 该基座是混合注意力架构:只有 8 层有
q_proj/k_proj/v_proj/o_proj, 另外 24 层用in_proj_qkv/in_proj_z/in_proj_b/in_proj_a/out_proj。 照抄 Qwen3 的名单会漏掉 24/32 层注意力且不报错。 已排除lm_head与视觉塔(qkv/proj/linear_fc1/2)。
用途
直接用途:根据患者四诊信息(性别、年龄、主诉、现病史、西医诊断, 复诊时附既往处方)生成中医诊断与中药处方草案,供执业中医师参考。
输入格式
【基本信息】男,33岁
【主诉】腰痛乏力复诊
【现病史】腰痛乏力,勃起不坚,晨勃(+),手心出汗,脚凉,心悸。
【西医诊断】男性性腺功能低下
【既往处方】第 1 次复诊,间隔 9 天,上次处方:炙甘草 北柴胡 麸炒枳壳 ...
System prompt:
你是中医男科专家。请根据患者四诊信息进行辨证论治:先给出中医诊断,每行一个诊断,
格式为「病名·证型·治法」;再给出中药处方,输出药味名称,不含剂量。
输出格式
【中医诊断】
腰痛·肾气不充证·补肾扶元
失眠·气血亏虚证·益气生脉
【中药处方】
白芍 炙甘草 桂枝 生姜 大枣 龙骨 牡蛎 茯苓 麸炒苍术 白附片 白薇 韭菜子
输出不含剂量。剂量须由外部药典量表填充并由医师核定(见配套 GitHub 仓库的
dose_filler.py)。
评测结果
测试集:2,764 条金标准样本,按患者分组切分(患者零重叠,无泄漏)。
| 口径 | 本模型 | 参照基线 | 结论 |
|---|---|---|---|
| 总体 Jaccard | 0.429 [0.416, 0.441] | 常量方 0.159 / Oracle 0.208 | ✅ 远超规则基线 |
| 初诊 Jaccard | 0.301 | 初诊 Oracle 0.254 | ✅ 超过检索上界 |
| 复诊 Jaccard | 0.501 | 照抄上次方 0.542 | ❌ 不如直接照抄 |
| 关键药 Recall(top100) | 0.609 | Gate 0.45 / Oracle 0.406 | ✅ |
| 证型 micro-F1 | 0.485 | Gate 0.55 | ❌ 未达(80% 因标签同义) |
| 非法药名率 | 0.02% | Gate ≤0.5% | ✅ |
| G5 时效漂移 | −10.5% | Gate ≤20% | ✅ |
Oracle 的定义:用真实中医诊断去做检索所能达到的上界(现实中拿不到真实诊断)。 模型在不知道真实诊断的情况下端到端超过它 —— 这是它在读自由文本的硬证据。
分口径的显著性(与另一个 epoch 配置的对比)
| 口径 | 差值 | 95% CI | p | 判定 |
|---|---|---|---|---|
| 总体 | −0.003 | [−0.009, +0.003] | 0.873 | 不可分 |
| 初诊 | −0.022 | [−0.034, −0.012] | 1.000 | 本模型(2 epoch)显著更好 |
| 复诊 | +0.008 | [+0.002, +0.014] | 0.004 | 3 epoch 版本显著更好 |
⚠️ 局限与不当使用
明确做不到的事
| 限制 | 说明 |
|---|---|
| 不能替代医师审方 | 配套校验器只做缺失检测,治法判别力实测仅 7.9% |
| 不能解释"为什么开这个方" | 训练数据无疗效反馈,模型只能模仿医生的处方,不能给出因果理由 |
| 不建议用于复诊 | 不如直接照抄上次处方(0.501 vs 0.542) |
| 剂量不可信 | 模型不生成剂量;任何剂量输出都应丢弃 |
| 缺舌脉 | 数据中舌象 0.53% / 脉象 0.74%,存在原理性输入缺口 |
禁止用途
- ❌ 不得用于临床诊断、处方决策或任何直接影响患者诊疗的用途
- ❌ 不得作为自动开方系统
- ❌ 不得商用(训练数据为 CC BY-NC 4.0)
- ❌ 不得用于生成对真实患者的医疗建议
已知偏差
- 医师个人风格未剥离:训练数据无医生 ID,实测 13/16 组文书风格检验显著。 模型会模仿训练医生的书写与用药偏好,不等于普适的中医共识。
- 机构单一:数据来自单一科室,可能不适用于其他地区/流派的诊疗习惯。
- 证型标签同义:参考标签中
肾虚证/肾虚、肝肾亏虚证/肝肾两虚证并存,模型输出的证型写法可能与期望不完全一致。 - 虚实混淆:
肾气不充证(虚)↔湿热下注证(实)是最大单项错误(213 次), 两者治法方向相反(补 vs 清),需重点人工复核。
使用方法
from transformers import AutoModelForImageTextToText, AutoTokenizer
from peft import PeftModel
import torch
BASE = "XiaomiMiMo/MiMo-V2.6-Distill-Qwen-9B"
ADAPTER = "<此仓库>"
tok = AutoTokenizer.from_pretrained(BASE, trust_remote_code=True)
tok.padding_side = "left" # ★ 必须:decoder-only 生成
model = AutoModelForImageTextToText.from_pretrained(
BASE, dtype=torch.bfloat16, device_map={"": 0}, trust_remote_code=True)
model = PeftModel.from_pretrained(model, ADAPTER)
model.eval()
msgs = [
{"role": "system", "content": "你是中医男科专家。请根据患者四诊信息进行辨证论治:"
"先给出中医诊断,每行一个诊断,格式为「病名·证型·治法」;"
"再给出中药处方,输出药味名称,不含剂量。"},
{"role": "user", "content": "【基本信息】男,33岁\n【主诉】腰痛乏力\n"
"【现病史】腰痛乏力,勃起不坚,脚凉,心悸。\n"
"【西医诊断】男性性腺功能低下\n【既往处方】无(初诊)"},
]
prompt = tok.apply_chat_template(msgs, tokenize=False, add_generation_prompt=True)
enc = tok([prompt], return_tensors="pt", padding=True).to(model.device)
with torch.no_grad():
out = model.generate(**enc, max_new_tokens=192, do_sample=False,
pad_token_id=tok.pad_token_id, eos_token_id=tok.eos_token_id)
print(tok.batch_decode(out[:, enc["input_ids"].shape[1]:], skip_special_tokens=True)[0])
输出可能带
<think></think>前缀(该基座支持思考模式),解析时应剥离。 配套 GitHub 仓库的predict.py已处理,并附药名归一化与处方校验。
训练细节
| 项 | 值 |
|---|---|
| 数据 | 21,484 条(T3+,含既往处方),val 2,675 |
| epoch | 2 |
| 学习率 | 1e-4,cosine,warmup_steps 80(3%) |
| 有效 batch | 16(bs 8 × ga 2) |
| max_length | 1024(实测 p99=360) |
| 优化器 | adamw_torch(bf16 LoRA 不需要 bitsandbytes) |
| 梯度检查点 | 关闭(96GB 显存充裕,吞吐提升 5.5×) |
| 模型选择 | val 集 eval_subset_jaccard(初诊/复诊未加权平均) |
训练框架注意:transformers>=5.12(qwen3_5 架构要求)、
trl 的 SFTConfig 在 transformers 5.x 中**已移除 warmup_ratio**,须用 warmup_steps。
引用
@misc{mimo9b_tcm_andrology_2026,
title = {MiMo-9B TCM Andrology LoRA: 中医男科辨证论治辅助模型},
year = {2026},
note = {基座 XiaomiMiMo/MiMo-V2.6-Distill-Qwen-9B;训练数据 CC BY-NC 4.0},
url = {https://modelscope.cn/models/your-account/MiMo-9B-TCM-Andrology-LoRA}
}
免责声明
本模型为研究与教学用途,不构成医疗建议。使用者须自行确保其使用场景 符合当地法规与伦理要求。模型输出必须经执业中医师审核后方可用于任何临床相关场景。
- Downloads last month
- 16
Model tree for johnson/MiMo-9B-TCM-Andrology-LoRA
Base model
Qwen/Qwen3.5-9B-BaseDataset used to train johnson/MiMo-9B-TCM-Andrology-LoRA
Evaluation results
- 处方 Jaccard(总体) on 中医男科病历(冻结测试集 2,764 条,患者分组切分)self-reported0.429
- 处方 Jaccard(初诊) on 中医男科病历(冻结测试集 2,764 条,患者分组切分)self-reported0.301
- 处方 Jaccard(复诊) on 中医男科病历(冻结测试集 2,764 条,患者分组切分)self-reported0.501
- 关键药 Recall(top100) on 中医男科病历(冻结测试集 2,764 条,患者分组切分)self-reported0.609