GitHub_Trending/ll/llm-action:LLM微调数据准备指南
【免费下载链接】llm-action 本项目旨在分享大模型相关技术原理以及实战经验。 项目地址: https://gitcode.com/GitHub_Trending/ll/llm-action
大语言模型(LLM)微调是提升模型特定任务表现的关键步骤,而高质量的数据准备直接决定微调效果。本文将从数据来源、格式规范、处理工具三个维度,结合项目实战资源,提供一套完整的LLM微调数据准备方案。
数据来源:从原始语料到任务数据
预训练语料参考
业界主流大模型的训练数据规模与构成对微调数据准备具有重要参考价值:
- OPT-175B:使用180B token的混合数据,包括BookCorpus、CommonCrawl子集、Reddit数据等800GB内容,验证集按比例采样各数据源 llm-data-engineering/dataset/README.md
- Bloom-176B:处理41.5TB文本,覆盖46种自然语言和13种编程语言,最终提炼为350B token llm-data-engineering/dataset/README.md
微调数据获取
项目中提供了多语言和领域数据集参考:
- 中文语料:llm-data-engineering/dataset/chinese-corpus-all.md
- 英文语料:llm-data-engineering/dataset/english-corpus-all.md
- 模型专用数据:如百川2数据集 llm-data-engineering/dataset/baichuan2.md
数据格式规范:模型适配指南
不同模型架构要求特定的数据格式,以下是主流模型的格式规范及示例:
Alpaca格式(单轮对话)
适用于基础模型的指令微调,包含instruction、input、output三要素:
{
"instruction": "Give three tips for staying healthy.",
"input": "",
"output": "1. Eat a balanced diet..."
}
llm-data-engineering/sft-dataset/数据集格式.md
ChatGLM3格式(多轮对话+工具调用)
支持系统提示、多轮交互及工具调用能力,格式示例:
{
"conversations": [
{"role": "system", "content": "You are ChatGLM3..."},
{"role": "user", "content": "Hello"},
{"role": "assistant", "content": "Hello, I'm ChatGLM3..."}
]
}
工具调用扩展格式:
{
"tools": [...],
"conversations": [
{"role": "user", "content": "Extract info..."},
{"role": "assistant", "content": "<|startofthink|>...<|endofthink|>"}
]
}
llm-data-engineering/sft-dataset/数据集格式.md
Baichuan2格式(多轮对话)
使用conversations数组,通过from字段区分角色:
{
"id": "77771",
"conversations": [
{"from": "human", "value": "写一篇关于气候变化的文章"},
{"from": "gpt", "value": "好的,以下是你要求的文章..."}
]
}
llm-data-engineering/sft-dataset/数据集格式.md
Qwen1.5格式(ChatML标准)
采用标准化对话模板,支持系统提示和多轮交互:
{
"type": "chatml",
"messages": [
{"role": "system", "content": "You are a helpful assistant."},
{"role": "user", "content": "Tell me about LLMs"},
{"role": "assistant", "content": "Large language models are..."}
]
}
llm-data-engineering/sft-dataset/数据集格式.md
数据处理工具:从模板到代码实现
Jinja2模板引擎
项目提供Jinja2模板工具,用于批量转换数据格式:
- 通用模板:llm-data-engineering/sft-dataset/jinja-llm.py
- 演示代码:llm-data-engineering/sft-dataset/jinja-demo.py
模板渲染示例:
from jinja2 import Template
chat_template = """{% for m in messages %}
<|im_start|>{{m.role}}
{{m.content}}<|im_end|>
{% endfor %}"""
template = Template(chat_template)
rendered = template.render(messages=chat_history)
llm-data-engineering/sft-dataset/jinja-llm.py
模型专用处理脚本
针对特定模型的数据预处理代码:
- 百川2测试脚本:llm-data-engineering/sft-dataset/baichuan2_test.py
- 模板生成器:llm-data-engineering/sft-dataset/jinja-llm-baichuan2.py
预处理核心逻辑示例(Baichuan2):
def preprocessing(example):
input_ids = []
labels = []
for message in example["conversations"]:
if message["from"] == "human":
input_ids += user_tokens + value_ids
labels += [eos_token_id] + [ignore_index] * len(value_ids)
else:
input_ids += assistant_tokens + value_ids
labels += [ignore_index] + value_ids
return {"input_ids": input_ids, "labels": labels}
llm-data-engineering/sft-dataset/数据集格式.md
质量控制:数据清洗与优化建议
- 去重处理:使用哈希算法去除重复样本,推荐保留最新版本
- 长度过滤:单轮对话控制在512-2048 token,避免上下文溢出
- 格式校验:使用项目中的验证脚本检查JSON结构和字段完整性
- 领域适配:针对垂直领域,参考llm-data-engineering/sft-dataset/数据格式设计.md进行定制化设计
总结与工具链参考
微调数据准备流程:
- 确定模型架构 → 2. 选择对应格式 → 3. 采集/生成数据 → 4. 应用模板转换 → 5. 质量校验
项目中相关资源汇总:
- 数据集参考:llm-data-engineering/dataset/
- 格式规范:llm-data-engineering/sft-dataset/数据集格式.md
- 处理工具:llm-data-engineering/sft-dataset/
通过本文档提供的规范和工具,可高效完成从原始数据到模型可用微调数据的全流程处理,为后续模型训练奠定基础。
【免费下载链接】llm-action 本项目旨在分享大模型相关技术原理以及实战经验。 项目地址: https://gitcode.com/GitHub_Trending/ll/llm-action
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考



