在 DeepSeek.club 社区,很多兄弟卡在了“数据入场”的第一步:手里有一堆硬核的技术文档、聊天记录或 Wiki 页面,但不知道如何高效地将其转化为训练框架(如 LLaMA-Factory)认可的 Alpaca 或 ShareGPT 格式。
大模型微调遵循“Garbage In, Garbage Out”铁律。如果你的原始文本转换质量极低,即便模型底座再强,也会产生严重的逻辑幻觉。今天分享一套利用 DeepSeek-R1 蒸馏版模型 自动将 Raw Text(原始文本)转化为标准化指令对的 Python 自动化方案。
一、 目标格式科普:选 Alpaca 还是 ShareGPT?
在动手写脚本前,必须明确你的训练目标:
-
Alpaca 格式: 结构简洁,包含
instruction(指令)、input(输入,可选)和output(输出)。它非常适合单轮指令对齐(SFT)任务。 -
ShareGPT 格式: 采用
conversations列表结构,支持多轮对话。如果你想让 DeepSeek 具备上下文理解能力,或学习特定的思维链(CoT)推理逻辑,这是首选。
二、 核心逻辑:基于 LLM 的“格式重塑器”
传统的正则提取无法处理非结构化文本的深层语义。我们利用 DeepSeek-R1-Distill-Qwen-32B 作为提取器,因为它具备极强的指令理解与格式化输出能力。
1. 核心 Prompt 设计
角色: 你是一个专业的数据工程专家。 任务: 将以下原始技术文档拆解并改写为高质量的训练指令对。 要求: > 1. 必须符合 JSONL 格式。 2. 模拟真实用户的提问方式。 3. Response 必须包含深度的推理链条(CoT)。
2. Python 自动化转换脚本 (精简版)
该脚本通过调用本地部署的 Ollama 或 API,将文本块批量转化为 Alpaca 格式。
Python
import json
import requests
# 配置本地 Ollama 终端
OLLAMA_URL = "http://localhost:11434/api/generate"
MODEL_NAME = "deepseek-r1:32b"
def raw_to_alpaca(text_chunk):
prompt = f"请将以下文本转化为 Alpaca 格式的训练数据,要求包含 thought 标签进行逻辑推演:\n\n{text_chunk}"
payload = {
"model": MODEL_NAME,
"prompt": prompt,
"format": "json", # 强制要求 JSON 输出
"stream": False
}
response = requests.post(OLLAMA_URL, json=payload)
return response.json().get("response")
# 示例:读取 raw.txt 并写入 train.jsonl
# (实际工程中建议加入数据清洗与 Token 长度检查)
三、 进阶策略:自动化清洗与校验
单纯的格式转换只是开始,要达到微调级别,还需经过以下“手术”:
-
分块(Chunking): 原始文本过长会超过 Context Window 限制,建议按 1000-2000 字符进行语义分块。
-
自我纠错(Self-Correction): 利用另一个 LLM 节点(如 DeepSeek-V3)对生成的 JSONL 进行逻辑审查,剔除事实性错误样本。
-
多格式混合: 在训练集里混入 5%-10% 的通用语料(ShareGPT 格式),防止微调后模型在通用任务上“变笨”。
四、 避坑指南
-
Token 截断: DeepSeek 分词器对中文有特殊优化,但在转换时务必确认 JSONL 的每一行不要超过 8K Tokens,否则训练显存会瞬间炸裂。
-
转义字符: 确保 Response 里的换行符正确转义为
\n,防止 JSON 解析失败。