WeClone数据目录组织:res_csv分区管理PT和SFT数据
痛点:大语言模型微调数据管理的复杂性
在大语言模型(LLM)微调过程中,数据管理往往是最容易被忽视但至关重要的环节。传统的数据组织方式常常导致:
- 数据混淆:PT(Pre-training)和SFT(Supervised Fine-tuning)数据混杂,难以区分
- 配置混乱:不同训练阶段需要不同的数据格式和字段映射
- 维护困难:随着数据量增长,缺乏清晰的结构会增加维护成本
- 复用性差:一次性数据处理难以支持多轮实验和迭代优化
WeClone项目通过res_csv目录的精巧设计,完美解决了这些痛点,为LLM微调提供了专业级的数据管理方案。
res_csv目录结构解析
WeClone的数据目录采用清晰的分层结构,专门针对PT和SFT两个关键训练阶段进行优化:
PT(预训练)数据分区
PT阶段专注于语言模型的通用语言理解能力训练,数据格式相对简单:
文件结构:
data/res_csv/pt/
├── dataset_info.json # 数据配置元数据
└── pt-my.json # PT训练数据集
dataset_info.json配置详解:
{
"wechat-pt": {
"file_name": "./pt-my.json",
"columns": {
"prompt": "c"
}
}
}
| 配置项 | 说明 | 技术含义 |
|---|---|---|
wechat-pt | 数据集标识符 | 在训练配置中引用的唯一名称 |
file_name | 数据文件路径 | 相对于dataset_dir的相对路径 |
columns.prompt | 字段映射 | 将数据中的'c'字段映射为'prompt' |
SFT(监督微调)数据分区
SFT阶段专注于对话能力和指令遵循训练,支持多种数据格式:
文件结构:
data/res_csv/sft/
├── dataset_info.json # 基础SFT配置
├── dataset_info-with-his.json # 带历史记录的配置
└── sft-my.json # SFT训练数据集
基础SFT配置(dataset_info.json):
{
"wechat-sft": {
"file_name": "./sft-my.json",
"columns": {
"prompt": "instruction",
"response": "output"
}
}
}
带历史记录的SFT配置(dataset_info-with-his.json):
{
"wechat-sft": {
"file_name": "./sft-my.json",
"columns": {
"prompt": "instruction",
"response": "output",
"history": "history"
}
}
}
配置参数与数据目录的关联
在settings.json中,训练配置与数据目录紧密关联:
{
"train_pt_args": {
"stage": "pt",
"dataset": "wechat-pt",
"dataset_dir": "./data/res_csv/pt"
},
"train_sft_args": {
"stage": "sft",
"dataset": "wechat-sft",
"dataset_dir": "./data/res_csv/sft"
}
}
训练阶段与数据目录对应关系
| 训练阶段 | 数据集标识 | 数据目录 | 主要用途 |
|---|---|---|---|
| PT | wechat-pt | ./data/res_csv/pt | 语言模型预训练 |
| SFT | wechat-sft | ./data/res_csv/sft | 指令微调训练 |
数据格式规范与最佳实践
PT数据格式要求
PT数据采用单文本字段格式,专注于语言建模:
{
"c": "这是一段PT训练的文本内容,用于语言模型预训练..."
}
SFT数据格式要求
SFT数据支持多种格式,适应不同训练需求:
基础格式(指令-回复对):
{
"instruction": "你好,请问今天天气怎么样?",
"output": "今天天气晴朗,气温25度,适合外出活动。"
}
带历史记录的格式:
{
"instruction": "继续刚才的话题",
"output": "好的,我们刚才在讨论周末计划",
"history": [
["你周末有什么计划?", "我打算去爬山"],
["爬山是个好主意,去哪里呢?", "去附近的香山"]
]
}
实战:自定义数据目录配置
1. 创建新的数据分区
如果需要添加新的数据集,可以按照以下步骤:
# 创建新的数据目录
mkdir -p data/res_csv/custom_dataset
# 创建配置文件
cat > data/res_csv/custom_dataset/dataset_info.json << 'EOF'
{
"custom-dataset": {
"file_name": "./custom-data.json",
"columns": {
"prompt": "question",
"response": "answer",
"history": "context"
}
}
}
EOF
2. 修改训练配置
在settings.json中更新配置:
{
"train_sft_args": {
"dataset": "custom-dataset",
"dataset_dir": "./data/res_csv/custom_dataset"
}
}
数据管理的最佳实践
版本控制策略
质量监控指标
| 指标类型 | PT数据 | SFT数据 | 监控频率 |
|---|---|---|---|
| 数据量 | ≥10K条 | ≥5K条 | 每次更新 |
| 平均长度 | 50-500字符 | 20-200字符 | 每周 |
| 质量评分 | ≥0.8 | ≥0.9 | 每月 |
| 重复率 | ≤5% | ≤3% | 每次更新 |
常见问题与解决方案
Q1: 如何切换不同的数据集配置?
A: 只需修改settings.json中的dataset和dataset_dir参数,系统会自动加载对应的数据配置。
Q2: 支持多数据集混合训练吗?
A: 当前版本支持单数据集训练,但可以通过创建合并的数据目录来实现多数据集训练。
Q3: 数据格式验证失败怎么办?
A: 检查dataset_info.json中的字段映射是否正确,确保数据文件中的字段名称与配置一致。
总结与展望
WeClone的res_csv数据目录设计体现了几大核心优势:
- 清晰的职责分离:PT和SFT数据严格分区,避免混淆
- 灵活的配置管理:通过
dataset_info.json实现数据格式的抽象和映射 - 易于扩展:支持自定义数据集和配置,适应不同训练需求
- 版本友好:目录结构便于数据版本管理和实验追踪
这种数据管理方案不仅适用于微调,同样可以推广到其他领域的LLM微调项目中,为大规模语言模型训练提供可靠的数据基础设施支撑。
通过合理的数据目录组织和配置管理,WeClone让LLM微调的数据准备工作变得简单、规范且高效,大大降低了模型训练的技术门槛和维护成本。
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考



