2026 上海开源软件应用创新大赛 · 开源 AI 工具赛道 · 重点方向 ①「数据处理、微调与模型评测」
微调一个模型之前,最难的问题不是"怎么调",而是"这份数据到底能不能用"。 DataForge 把这件事变成可量化、可复现、可执行的三步:体检 → 清洗 → 出方案。
做过微调的团队都清楚:整理一份干净的数据集、设计一套能说明问题的评测指标, 工作量不比训练模型小。真实痛点有三类:
- 不知道数据有多脏 —— 缺失、重复、标注冲突、格式错误混在一起,肉眼看不出来
- 知道脏但不知道从哪下手 —— 删哪些?留哪些?删多少会伤到数据分布?
- 微调完不知道有没有真的变好 —— 只看准确率,不看置信区间和显著性,容易被噪声骗
DataForge 对应给出三个可解释的答案。
| 维度 | 权重 | 检查内容 |
|---|---|---|
| 完整性 | 18% | 缺失值分布、字段级缺失率排序 |
| 唯一性 | 14% | 完全重复(MD5 签名)+ 近似重复(字符 5-gram Jaccard) |
| 合法性 | 16% | 数值/URL/日期格式校验 |
| 一致性 | 12% | 同一输入是否对应多个标签(标注冲突) |
| 标签质量 | 16% | 空标签、稀有类(样本数 < max(2, n×1%)) |
| 文本质量 | 10% | 过短文本、乱码字符、模板化检测(首 12 字重复度) |
| 类别平衡 | 8% | 标签分布熵比 |
| 噪声控制 | 6% | 数值字段 MAD 离群点(阈值 3.5) |
每条问题都给出:问题码 + 级别(error/warn/info)+ 命中条数 + 样本行号 + 可执行修复建议。
按优先级执行六个动作,全部有日志:
去空标签 → 去完全重复 → 去近似重复 → 格式修复 → 去缺失字段行 →(可选)去离群点
验证结果:在注入 6 类缺陷的 441 条样例上,总分 75.7 → 100.0,保留 392 条有效数据; 清洗具幂等性(重复执行不再删数据)。
核心是有效样本量折算——这是本工具区别于"查表给参数"的地方:
有效样本量 = (原始样本 − 重复样本×0.5 − 冲突样本) × 质量系数
质量系数 = clamp((总分 − 40) / 55, 0, 1) # 40分→0,95分→1
再据有效样本量给出:LoRA 秩 r、alpha、dropout、目标模块(按任务类型)、 学习率、批大小、梯度累积、epochs、总步数、显存估算、预期收益区间(百分点),以及风险清单。
不止算准确率,还回答"这个提升是真的吗":
- 宏/微 F1、逐类 P/R/F1、混淆矩阵主要误判
- 自助法 95% 置信区间(2000 次重采样)
- 配对符号检验对比基线,输出 p 值与"显著优于/劣于/无显著差异"结论
- 生成质量:CV、P10/P50/P90、稳定性判定
- 综合评测健康度评分(样本量、最弱类别、波动、显著性)
# 纯 Python 标准库,无需安装任何依赖(Web UI 需要 fastapi + uvicorn)
# 1) 核心引擎自测(生成样例 → 体检 → 清洗 → 出方案 → 评测)
python dataforge.py
# 2) 自动化评测(43 项断言)
python eval.py
# 3) Web UI
python webui.py # → http://127.0.0.1:8766依赖:核心引擎零依赖(Python 3.8+);Web UI 需 fastapi、uvicorn、pydantic。
四个标签页对应四个能力,数据在页面间流转:
- ① 数据体检 —— 粘贴 JSON / 上传 .json/.csv → 体检报告(总分 + 8 维雷达 + 问题清单 + 标签分布)
- ② 自动清洗 —— 调节近似重复阈值 → 清洗前后对比 + 动作统计(结果自动回写到输入框)
- ③ 微调方案 —— 选底座模型与任务类型 → 完整超参 + 风险提示
- ④ 模型评测 —— 输入真值/预测/基线 → 指标 + 置信区间 + 显著性 + 逐类明细
字段名任意,工具自动识别语义类型(text / label / id / number / url / date)。
from dataforge import dataset_health, clean_dataset, tune_plan, evaluate_model
rep = dataset_health(rows, label_field="label") # → HealthReport
print(rep.score, rep.verdict, [i.code for i in rep.issues])
cleaned, actions = clean_dataset(rows) # → (List[dict], Dict[str,int])
plan = tune_plan(rep, base_model_params=7.0, target_task="instruction")
print(plan["lora"]["r"], plan["expected_gain_points"])
ev = evaluate_model(y_true, y_pred, baseline_pred=y_base, per_sample_scores=scores)
print(ev["accuracy_ci95"], ev["baseline"]["p_value"], ev["eval_score"])python eval.py → 43/43 通过
覆盖:6 类注入缺陷全部检出 · 清洗提升与幂等性 · 微调方案随规模/质量变化 · 指标边界(完美/全错预测)· 显著性判定正确性 · 确定性与边界情况。
- 可解释 —— 每个分数都有计算依据,不做黑盒判断;折算系数与阈值都写在代码里
- 可复现 —— 同输入必得同输出;样例数据由固定 seed 生成
- 可执行 —— 每条问题都给出"接下来做什么",而不是只报告"有问题"
- 零门槛 —— 核心引擎不依赖任何第三方库,不需要 GPU,不调用外部 API
07-DataForge/
├── dataforge.py 核心引擎(体检 / 清洗 / 微调 / 评测)+ 自测
├── webui.py Web UI(FastAPI 单文件应用)
├── eval.py 自动化评测(43 项断言)
├── README.md 本文件
└── LICENSE 开源协议
- v0.2 —— 支持 HuggingFace datasets 直接加载;导出清洗报告为 PDF
- v0.3 —— 接入真实 LoRA 训练(peft + transformers),把"预期收益"换成实测曲线
- v0.4 —— 增加数据去偏与合成增强建议;支持多语言(英文数据集质量规则)
- v1.0 —— 评测榜单服务:同一任务的多模型结果统一对比与排名
详见 开发路线图。
MIT License,详见 LICENSE。