跳转到主要内容

数据集和格式

您的模型的好坏取决于您的数据。以下是如何正确格式化它。

支持的文件格式

AITraining 支持多种数据源:
格式如何加载用例
JSONLpandas.read_json(lines=True)LLM 训练、对话
CSVpandas.read_csv()分类、表格数据
HF Dataset IDdatasets.load_dataset()来自 Hub 的远程数据集
Local HF Datasetload_from_disk()预处理的数据集
Parquet 文件通过暴露 Parquet 格式的 HuggingFace 数据集间接支持。

常见格式

CSV(最常见)

简单且通用。适用于分类、回归和基本任务。
text,label
"This product is amazing",positive
"Terrible experience",negative
"Average quality",neutral

JSON/JSONL

更适合复杂数据、对话和嵌套结构。
{"messages": [
  {"role": "user", "content": "What is Python?"},
  {"role": "assistant", "content": "Python is a programming language"}
]}

图像文件夹

按类别组织图像:
dataset/
  cats/
    cat1.jpg
    cat2.jpg
  dogs/
    dog1.jpg
    dog2.jpg

数据质量基础

平衡您的类别

不好:
  • 1000 个积极示例
  • 50 个消极示例
好:
  • 500 个积极示例
  • 500 个消极示例

清理您的数据

删除:
  • 重复项
  • 空值
  • 明显错误
  • 不一致的格式

大小指南

任务类型最少良好优秀
Text Classification1001,00010,000+
Image Classification2002,00020,000+
Language Generation505005,000+

按训练器要求的列

不同的训练器需要特定的列:
训练器必需列可选
sft / defaulttext(或 messages-
dpoprompt, chosen, rejected-
orpoprompt, chosen, rejected-
rewardtext (chosen), rejected-
如果缺少必需的列,您将收到一个清晰的验证错误,列出缺少和可用的列。

特殊格式

DPO/ORPO(偏好数据)

{
  "prompt": "Explain gravity",
  "chosen": "Gravity is a force that attracts objects...",
  "rejected": "gravity is thing that make stuff fall"
}

Token Classification

John    B-PERSON
Smith   I-PERSON
visited O
Paris   B-LOCATION

对话格式

对话期望 {role, content} 对象列表:
{"messages": [
  {"role": "user", "content": "Hello"},
  {"role": "assistant", "content": "Hi there!"}
]}
或 ShareGPT 格式(自动检测和转换):
{"conversations": [
  {"from": "human", "value": "Hello"},
  {"from": "assistant", "value": "Hi there!"}
]}

Tool 角色支持

AITraining 支持 tool 角色用于函数调用训练数据:
{"messages": [
  {"role": "user", "content": "2+2等于多少?"},
  {"role": "assistant", "content": "让我计算一下。"},
  {"role": "tool", "content": "4"},
  {"role": "assistant", "content": "答案是4。"}
]}
自动兼容性:对于不原生支持 tool 角色的模型(如 Gemma),AITraining 会自动将 tool 消息转换为带有 [Tool Result] 前缀的 user 消息。具有原生 tool 支持的模型(Llama 3.1+、Qwen 等)使用其原生格式。
旧版格式支持:旧版 OpenAI function 角色(在引入 tool 之前使用)也受支持,处理方式与 tool 角色相同。

Tool Calls(函数调用)

AITraining 还支持 tool_calls 字段用于训练模型进行函数调用:
{"messages": [
  {"role": "user", "content": "巴黎的天气怎么样?"},
  {
    "role": "assistant",
    "content": "让我查一下。",
    "tool_calls": [{"function": {"name": "get_weather", "arguments": "{\"city\": \"Paris\"}"}}]
  },
  {"role": "tool", "content": "晴天,20度"},
  {"role": "assistant", "content": "巴黎是晴天,20度。"}
]}
智能格式检测:AITraining 会检测您的模型是否原生支持 tool_calls
  • Qwen、Llama 3.1+:使用原生 <tool_call> 格式
  • Gemma、旧模型:将工具调用序列化为内容中的 OpenAI 格式 JSON
在推理时,从助手输出中解析 JSON 以提取工具调用。

Tool Call 格式转换

对于没有原生工具支持的模型,AITraining 将工具调用序列化为 OpenAI 格式 JSON 并附加到助手内容中: 输入(带有 tool_calls 字段的消息):
{
  "role": "assistant",
  "content": "让我搜索一下。",
  "tool_calls": [{"id": "call_123", "type": "function", "function": {"name": "search", "arguments": "{\"query\": \"weather\"}"}}]
}
输出(序列化在内容中):
让我搜索一下。
{"content": "让我搜索一下。", "tool_calls": [{"id": "call_123", "type": "function", "function": {"name": "search", "arguments": "{\"query\": \"weather\"}"}}]}
序列化格式保留了完整的 OpenAI 结构,包括 idtypefunction 字段。这与系统提示中描述的格式一致,有助于模型更好地学习。

消息交替处理

某些模型(Gemma、Mistral)要求严格的 user/assistant 交替。AITraining 会自动修复常见问题: 连续相同角色的消息会被合并:
// 之前(在 Gemma 上会失败)
[
  {"role": "assistant", "content": "你好!"},
  {"role": "assistant", "content": "有什么可以帮你的?"}
]

// 之后(自动修复)
[
  {"role": "assistant", "content": "你好!\n有什么可以帮你的?"}
]
assistant 前缺少 user 会添加占位符:
// 之前(system → assistant,没有 user)
[
  {"role": "system", "content": "你是一个有用的助手"},
  {"role": "assistant", "content": "你好!"}
]

// 之后(自动修复)
[
  {"role": "system", "content": "你是一个有用的助手"},
  {"role": "user", "content": "[Continued]"},
  {"role": "assistant", "content": "你好!"}
]
这些修复仅在 tokenizer 拒绝原始格式时应用。接受灵活消息顺序的模型会保持原始结构。

自动数据集转换

AITraining 可以自动检测和转换常见的数据集格式。无需手动预处理。

支持的格式

格式检测示例列
Alpaca自动instruction, input, output
ShareGPT自动conversationsfrom/value
Messages自动messagesrole/content
Q&A自动question/answer, query/response
User/Assistant自动user, assistant
DPO自动prompt, chosen, rejected
Plain Text自动text
列映射是可选的 - 使用它将不同的列名转换为预期格式。

使用自动转换

aitraining llm --train \
  --model google/gemma-3-270m \
  --data-path tatsu-lab/alpaca \
  --auto-convert-dataset \
  --chat-template gemma3 \
  --trainer sft

Chat Templates

Chat templates 将您的数据格式化为模型预期的对话结构。
选项描述
tokenizer使用模型的内置 chat template(SFT/DPO/ORPO 的默认值)
chatml标准 ChatML 格式
zephyrZephyr/Mistral 格式
none无模板(纯文本)
模板根据您的训练器自动选择,或手动指定:
--chat-template tokenizer  # 使用模型的模板(推荐)
--chat-template chatml     # 强制 ChatML
--chat-template none       # 禁用纯文本
统一渲染器一致地应用模板。为了向后兼容,仍支持旧版模板路径。

对话扩展

将单轮示例合并为多轮对话:
aitraining llm --train \
  --model google/gemma-3-270m \
  --data-path ./qa_pairs.jsonl \
  --auto-convert-dataset \
  --conversation-extension 3 \
  --trainer sft

处理后数据集输出

处理后,您的数据集将包含:
描述
text应用聊天模板后的格式化训练数据
_original_messages原始消息列(保留用于检查)
_original_*其他原始列重命名为带前缀
原始列被重命名为 _original_*,以防止其他工具自动检测并错误使用未处理的数据。

保存处理后的数据

使用 --save-processed-data 控制处理后数据的保存位置:
选项行为
auto本地保存;如果源自 Hub 则也推送到 Hub
local仅保存到 {project}/data_processed/
hub仅作为私有数据集推送到 Hub
both本地保存并推送到 Hub
none不保存处理后的数据

快速提示

  1. 从小开始 - 在扩展之前先用 100 个示例测试
  2. 尽早验证 - 在收集数千个示例之前检查您的格式是否有效
  3. 保持一致 - 在整个数据集中使用相同的格式
  4. 记录一切 - 注意任何预处理或特殊规则
  5. 使用自动转换 - 让 AITraining 自动检测和转换格式

下一步