示例1:
[
{
"instruction": "解决数学应用题",
"input": "小明买了3支铅笔,每支2元;又买了5本笔记本,每本比铅笔贵4元。总花费多少?",
"chain_of_thought": [
"铅笔单价:2元/支 → 3支总价:3×2=6元",
"笔记本单价:2+4=6元/本 → 5本总价:5×6=30元",
"合计花费:6+30=36元"
],
"output": "总花费为36元"
}
]
示例2
[
{
"instruction": "分析医学问题",
"input": "一名61岁的女性长期在咳嗽或打喷嚏等活动中不自觉地漏尿,但夜间没有漏尿,她接受了妇科检查和Q-tip测试。根据这些发现,膀胱测压最有可能揭示她的残余量和逼尿肌收缩情况?",
"chain_of_thought": [
"患者症状提示可能存在压力性尿失禁",
"Q-tip测试用于评估尿道括约肌功能",
"膀胱测压可以评估膀胱残余量和逼尿肌收缩力",
"结合症状和检查结果,最可能的膀胱测压结果是残余量增加,逼尿肌收缩力减弱"
],
"output": "膀胱测压最可能显示残余量增加,逼尿肌收缩力减弱"
}
]
解析 JSON格式
instruction 指令 争对问题的信息
input 描述问题
chain_of_thought 思考列表,按照列表信息 一步 为一个值
output 输出结果
你可以通过在你的环境中使用 ollama 或任何其他部署框架部署 deepseek-r1 来生成自定义域相关数据集。但是,对于本教程,我们将使用 Magpie-Reasoning-V2 数据集,其中包含 DeepSeek-R1 生成的 250K 思路链 (CoT) 推理样本,这些示例涵盖了数学推理、编码和一般问题解决等各种任务。
http://www.hubwiz.com/blog/distill-deepseek-r1-into-your-model/
原文 http://www.hubwiz.com/blog/distill-deepseek-r1-into-your-model/
蒸馏数据集
蒸馏类型
有几种方法可以模拟蒸馏,每种方法都有自己的优点:
- 数据蒸馏
- 在数据蒸馏中,教师模型生成合成数据或伪标签,然后用于训练学生模型。
- 这种方法可以应用于广泛的任务,甚至是那些逻辑信息较少的任务(例如,开放式推理任务)。
- Logits蒸馏
- Logits 是应用 softmax 函数之前神经网络的原始输出分数。
- 在logits 蒸馏中,学生模型被训练成匹配老师的logits,而不仅仅是最终的预测。
- 这种方法保留了更多关于教师信心水平和决策过程的信息。
- 特征蒸馏
- 特征蒸馏涉及到将知识从教师模型的中间层传递给学生。
- 通过对齐两个模型的隐表征,学生可以学习到更丰富、更抽象的特征。
{
"instruction": "Solve for x: 2x + 5 = 15",
"response": "<think>First, subtract 5 from both sides: 2x = 10. Then, divide by 2: x = 5.</think>"
}
from datasets import load_dataset
# Load the dataset
dataset = load_dataset("Magpie-Align/Magpie-Reasoning-V2-250K-CoT-Deepseek-R1-Llama-70B", token="YOUR_HF_TOKEN")
dataset = dataset["train"]
# Format the dataset
def format_instruction(example):
return {
"text": (
"<|user|>\n"
f"{example['instruction']}\n"
"<|end|>\n"
"<|assistant|>\n"
f"{example['response']}\n"
"<|end|>"
)
}
formatted_dataset = dataset.map(format_instruction, batched=False, remove_columns=subset_dataset.column_names)
formatted_dataset = formatted_dataset.train_test_split(test_size=0.1) # 90-10 train-test split