训练脚本数据模型完整说明.md 3.3 KB

DeepSeek-R1医疗大模型训练:数据说明

1. 项目训练流程总览

本项目使用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合并模型
        ↓
推理和对照验证

2. 当前归档的训练脚本

训练脚本保存在:

new_0811/train/
├── 01_clean_medical_dataset.py
├── 02_split_cleaned_medical_dataset.py
├── lora_train.py
└── merge.py

这些文件是项目根目录正式文件的归档副本,原文件没有被覆盖。脚本中的数据和模型相对路径仍按照项目根目录结构编写。

3. 数据清洗脚本

3.1 文件

01_clean_medical_dataset.py

项目根目录原文件为:

clean_medical_dataset.py

3.2 输入

medical_o1_sft_mix_Chinese.json

原始数据共25,358条,每条记录主要包括:

Question       问题
Complex_CoT    参考推理过程
Response       参考最终回答

3.3 主要功能

清洗脚本主要排除与中文医疗微调目标明显无关的任务,例如:

  • 纯数学概率题;
  • 纯统计计算题;
  • 几何题;
  • 时间推理题;
  • 明显非医疗内容;
  • 含严重乱码、异常控制字符或破坏文本结构的内容。

清洗操作不会覆盖原始数据,并会单独记录被移除的数据和清洗统计。

3.4 输出

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条。

4. 数据去重和切分脚本

4.1 文件

02_split_cleaned_medical_dataset.py

项目根目录原文件为:

split_cleaned_medical_dataset.py

4.2 输入

medical_o1_sft_mix_Chinese_cleaned.json

4.3 主要功能

脚本按照以下顺序处理:

读取清洗数据
    ↓
按完整记录及Question内容去重
    ↓
固定随机种子打乱
    ↓
按照8:2切分
    ↓
检查训练集和验证集问题交集
    ↓
保存train.json和validation.json

按问题内容去重非常重要。如果相同Question同时出现在训练集和验证集中,验证损失可能显得很好,但不能反映模型对新问题的泛化能力,这种情况称为数据泄漏。

4.4 输出

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参与了训练期间的模型选择,因此它是验证集,不是完全独立的最终测试集。