本项目使用DeepSeek-R1-Distill-Qwen-7B作为基础模型,通过QLoRA方法进行中文医疗数据监督微调。完整流程如下:
原始中文混合数据
medical_o1_sft_mix_Chinese.json
↓
01_clean_medical_dataset.py
↓
清洗后的医疗数据
medical_o1_sft_mix_Chinese_cleaned.json
↓
02_split_cleaned_medical_dataset.py
↓
按问题去重、随机打乱、8:2切分
train.json + validation.json
↓
qwen.ipynb
↓
checkpoint + 最佳LoRA权重
↓
Notebook的save_pretrained_merged或独立merge.py
↓
完整16bit合并模型
↓
推理和对照验证
训练脚本保存在:
new_0811/train/
├── 01_clean_medical_dataset.py
├── 02_split_cleaned_medical_dataset.py
├── lora_train.py
└── merge.py
这些文件是项目根目录正式文件的归档副本,原文件没有被覆盖。脚本中的数据和模型相对路径仍按照项目根目录结构编写。
01_clean_medical_dataset.py
项目根目录原文件为:
clean_medical_dataset.py
medical_o1_sft_mix_Chinese.json
原始数据共25,358条,每条记录主要包括:
Question 问题
Complex_CoT 参考推理过程
Response 参考最终回答
清洗脚本主要排除与中文医疗微调目标明显无关的任务,例如:
清洗操作不会覆盖原始数据,并会单独记录被移除的数据和清洗统计。
medical_o1_sft_mix_Chinese_cleaned.json
medical_o1_sft_mix_Chinese_cleaned_removed.json
medical_o1_sft_mix_Chinese_cleaned_report.json
其中,清洗后主数据共有25,072条。
02_split_cleaned_medical_dataset.py
项目根目录原文件为:
split_cleaned_medical_dataset.py
medical_o1_sft_mix_Chinese_cleaned.json
脚本按照以下顺序处理:
读取清洗数据
↓
按完整记录及Question内容去重
↓
固定随机种子打乱
↓
按照8:2切分
↓
检查训练集和验证集问题交集
↓
保存train.json和validation.json
按问题内容去重非常重要。如果相同Question同时出现在训练集和验证集中,验证损失可能显得很好,但不能反映模型对新问题的泛化能力,这种情况称为数据泄漏。
medical_o1_sft_mix_Chinese_cleaned_dedup_split_80_20/
├── train.json
└── validation.json
数据数量为:
| 数据文件 | 用途 | 数量 |
|---|---|---|
train.json |
更新LoRA参数 | 17,660条 |
validation.json |
训练期间验证、早停、选择最佳checkpoint | 4,415条 |
| 合计 | 去重后的可用数据 | 22,075条 |
需要注意:validation.json参与了训练期间的模型选择,因此它是验证集,不是完全独立的最终测试集。