Skip to content

9. 指令数据工程

「Garbage in, garbage out」在 SFT 阶段被放大到极致。模型的助手风格、对工具的使用习惯、安全行为,几乎完全由 SFT 数据塑造。本章讨论如何获取、生成、筛选高质量指令数据。

9.1 数据质量 ≫ 数量:LIMA 的启示

2023 年 5 月,Meta 发表 LIMA: Less Is More for Alignment(Zhou et al., 2023)。论文用仅 1,000 条精心筛选的指令数据微调 65B LLaMA,得到的模型在人工评测中:

  • 43% 的回答优于或等于 GPT-4。
  • 65% 优于 DaVinci-003。
  • 75% 优于 Bard。

这一结果震动了社区——此前主流认知是「SFT 需要数十万样本」。

9.1.1 LIMA 的 1,000 条数据从哪来

来源数量筛选方式
Stack Exchange200高赞回答 + 长度 + 风格
wikiHow200标题作为 instruction,正文作为 response
Reddit (Pushshift)150r/AskReddit 等
论文/书籍摘录200人工挑选
人工撰写250作者团队亲自写

关键约束:

  • 响应风格高度统一:友善、详细、结构化(用列表/标题)的「助手腔」。
  • 避免重复主题,最大化 instruction 多样性。
  • 响应长度集中在 200-2000 字之间。

9.1.2 Superficial Alignment Hypothesis 的实证

LIMA 论文做的关键消融:

训练数据MTBench (1-10)
50K Stack Exchange(多样但风格杂)4.8
2K Stack Exchange + 全质筛选(多样且风格统一)5.6
2K 仅 wikiHow(风格统一但单一来源)4.7
1K LIMA(多样且风格统一)5.9

结论清晰:

  1. 响应风格统一性比数据量更关键——把 50K 砍到 2K 但保持风格统一,分数反而上升。
  2. 数据多样性主要在 prompt 端——response 风格越统一越好,prompt 主题越多越好。
  3. 几乎所有知识在预训练中已经获取,SFT 的本质是「调取」(surface alignment)。

9.1.3 LIMA 的局限

  • 手工构造样本不易规模化(250 条人工花了多人月)。
  • 模型对采样温度、对抗 prompt 仍较脆弱。
  • 1K 样本无法覆盖工具调用、长上下文、复杂数学等专项能力。

LIMA 后续的发展方向:继承「质量 > 数量」的哲学,但用合成数据规模化。这就引出了 Self-Instruct 和 Evol-Instruct。

9.2 Self-Instruct:让 LLM 给自己生成数据

Self-Instruct(Wang et al., 2022)是用 LLM 自身生成指令数据的开山之作。其核心 insight:既然预训练 LLM 已经见过海量「指令-响应」对(QA 论坛、教程等),它本身就具备生成此类数据的能力。

9.2.1 Pipeline 四步

                              ┌──────────────────┐
       175 seed instructions  │  Task Pool        │
       (人工编写)              │  (动态增长)        │
                              └────┬─────────────┘
                                   │ 8-shot sample

                  ┌────────────────────────────┐
                  │  Step 1: Instruction Gen   │
                  │  (vanilla GPT-3 生成新指令) │
                  └────┬───────────────────────┘


                  ┌────────────────────────────┐
                  │  Step 2: Classify Task     │
                  │  (分类 vs 非分类,决定先生成 │
                  │   input 还是 output)        │
                  └────┬───────────────────────┘


                  ┌────────────────────────────┐
                  │  Step 3: Instance Gen      │
                  │  (生成 input + output)     │
                  └────┬───────────────────────┘


                  ┌────────────────────────────┐
                  │  Step 4: Filter            │
                  │  - ROUGE-L < 0.7           │
                  │  - 长度/格式启发式            │
                  │  - 去除「图片」「图表」类     │
                  └────┬───────────────────────┘

                       └──→ 加入 Task Pool, 循环

9.2.2 指令生成 prompt(节选)

Come up with a series of tasks:

Task 1: Write a poem about the seasons.
Task 2: Convert "12 km" to miles.
Task 3: Identify the protagonist of the story below.
Task 4: ...
Task 8: Translate "Hello, world!" to Spanish.
Task 9:

让 GPT-3 续写第 9 条。每次随机抽 8 条作为 few-shot,鼓励多样性。

9.2.3 过滤准则

  • ROUGE-L 重叠 > 0.7:与已生成指令过于相似,丢弃。
  • 指令含「image」「graph」「figure」等:模型无法处理多模态,丢弃。
  • 过短(< 5 词)或过长(> 150 词):丢弃。
  • 首词限制:要求以动词开头(write/translate/list/...)。

9.2.4 成果

最终用 vanilla GPT-3(text-davinci-001 之前的版本)生成 52K 指令对。在 SuperNI、用户研究等评测上,GPT-3 + Self-Instruct 距离 InstructGPT-001 仅落后 5%——而后者使用了人工标注 + RLHF。

9.2.5 Stanford Alpaca:Self-Instruct 的简化与流行化

Alpaca(Taori et al., 2023)做了三个改动:

  1. text-davinci-003(更强模型)替代 vanilla GPT-3:生成质量更高,但 Self-Instruct 作者明确指出这与他们的「纯 vanilla LM」初衷不同——本质上是「从 instruction-tuned 模型蒸馏」。
  2. 简化 pipeline:去掉「分类 vs 非分类」分支,直接 input + output 一并生成。
  3. 开源 LLaMA-7B 上训练:52K 指令成本 < $500,7B LLaMA 微调约 3 小时(8×A100 80GB)。

Alpaca 的实质是 GPT-3.5 → LLaMA 蒸馏,但因为开源 LLaMA 刚发布,Alpaca 成为 SFT 的「Hello World」,把指令微调推广到了大众。

9.3 Evol-Instruct:让指令自我演化

WizardLM(Xu et al., 2023, Microsoft + 北大)观察到 Alpaca 的指令偏简单,难以训出能处理复杂请求的模型。其方案:Evol-Instruct——让 LLM 把简单指令逐步演化成复杂指令。

9.3.1 In-Depth Evolving(深度演化)

把指令变得更复杂、更难。5 种 prompt 策略:

(1) Add Constraints(增加约束)

原指令:写一个判断闰年的 Python 函数。
演化后:写一个判断闰年的 Python 函数,要求:
        1. 不允许使用 if 语句;
        2. 函数体不超过 3 行;
        3. 输入需要类型注解。

(2) Deepening(深入化)

把宽泛问题变得具体深入。

原指令:介绍一下机器学习。
演化后:介绍机器学习中「偏差-方差权衡」的数学定义,并解释为什么深度神经网络能在
        高方差区域仍然泛化良好(结合 double descent 现象)。

(3) Concretizing(具体化)

用具体场景替换抽象概念。

原指令:解释什么是数据库索引。
演化后:假设你管理一个有 1 亿条用户记录的 MySQL 数据库,user_id 是主键、created_at
        没有索引。当你执行 SELECT * FROM users WHERE created_at > '2024-01-01'
        ORDER BY created_at LIMIT 100 时,发生了什么?为什么慢?应该建什么索引?

(4) Increase Reasoning Steps(增加推理步数)

原指令:3 + 5 = ?
演化后:A 比 B 大 3 岁,B 是 C 年龄的两倍,C 在 5 年后将达到 A 现在的年龄。求 A 现在的年龄。

(5) Complicate Input(复杂化输入)

把简单输入复杂化(加表格、代码片段、多模态描述等)。

In-Depth 演化 prompt 的核心 instruction:

"Your objective is to rewrite a given prompt into a more complex version to make those famous AI systems (e.g., ChatGPT and GPT-4) a bit harder to handle. But the rewritten prompt must be reasonable, understood, and responded to by humans."

9.3.2 In-Breadth Evolving(广度演化)

基于已有指令生成「同领域、不同主题的全新指令」,扩大数据多样性。例如从「介绍 React Hooks」演化出「介绍 Vue 3 Composition API」、「介绍 Svelte 的响应式系统」等。

9.3.3 Elimination Evolving(淘汰演化)

过滤失败的演化:

  • 演化后与原指令信息熵相同(没有真实变化)。
  • 模型回复中出现 "sorry"、"I cannot"、"as an AI"。
  • 输出包含纯标点或乱码。
  • 输出长度异常(< 10 字 或 > 5000 字)。

9.3.4 演化与训练

  • 起始 52K Alpaca 指令,经 4 轮演化生成约 250K 复杂指令。
  • WizardLM-7B/13B/70B 在高难度评测(如 MT-Bench Hard)甚至超过 ChatGPT 的偏好度。
  • 衍生品:WizardCoder(代码)、WizardMath(数学)。

9.3.5 实战代码片段

python
EVOL_PROMPT = """I want you act as a Prompt Rewriter.
Your objective is to rewrite a given prompt into a more complex version
to make those famous AI systems (e.g., ChatGPT and GPT-4) a bit harder to handle.
But the rewritten prompt must be reasonable and understood by humans.
You SHOULD complicate the given prompt using the following method: {method}

The rewritten prompt must NOT exceed the original by 10 to 20 words.
#The Given Prompt#: {seed}
#The Rewritten Prompt#:"""

METHODS = {
    "constraints": "Please add one more constraints/requirements into #The Given Prompt#.",
    "deepening": "If #The Given Prompt# contains inquiries about certain issues, the depth and breadth of the inquiry can be increased.",
    "concretizing": "Please replace general concepts with more specific concepts.",
    "reasoning": "If #The Given Prompt# can be solved with just a few simple thinking processes, you can rewrite it to explicitly request multiple-step reasoning.",
}

def evolve(seed_prompt, llm, method="constraints"):
    prompt = EVOL_PROMPT.format(method=METHODS[method], seed=seed_prompt)
    return llm(prompt, max_tokens=512)

9.4 合成数据生态:从蒸馏到自生成

InstructGPT、Alpaca 之后,用强模型(GPT-4 / Claude)合成训练数据成为主流。这一思路一直发展到 2025 年,演化出多种范式。

9.4.1 Vicuna:直接复用真实 ChatGPT 对话

Vicuna(LMSYS, 2023)从 ShareGPT.com 抓取 70K 用户分享的真实 ChatGPT 多轮对话,过滤后直接 SFT。优点:

  • 真实分布:与 InstructGPT 用户数据接近。
  • 多轮天然:不需要合成多轮逻辑。

缺点:

  • 法律灰区:未经 OpenAI 授权使用其输出。
  • 存在 ChatGPT 风格污染:「As an AI language model, I cannot...」等套话被学进去。

9.4.2 UltraChat:合成多轮对话

UltraChat(Ding et al., 2023):自迭代式合成 1.5M 高质量多轮对话。pipeline:

  1. 主题分级:30 大类(关于世界 / 写作辅助 / 推理…),每类 100+ 子主题。
  2. 指令生成:让 GPT-3.5 围绕子主题生成 user 指令。
  3. 多轮模拟:两个 GPT-3.5 实例模拟 user 和 assistant 的对话。
  4. 质量过滤:长度、重复率、关键词。

UltraChat-200K 是 HuggingFaceH4 整理的过滤版本,是 SFT 训练的常用基础。

9.4.3 OpenHermes / Tulu:聚合数据集

  • OpenHermes 2.5(Teknium):聚合 Self-Instruct、ShareGPT、CodeAlpaca、Glaive 等多种合成数据集,约 1M 样本。
  • Tulu 系列(AI2):开源 SFT 数据混合 + DPO,配方完全透明,是开源社区的「标准答案」之一。Tulu V2 Mix 后续被很多项目复用。

9.4.4 OpenOrca / SlimOrca:FLAN + GPT-4

Microsoft 的 Orca 论文提出「Explanation Tuning」:用 GPT-4 重新回答 FLAN 的题目,并要求 GPT-4 给出逐步推理过程。OpenOrca、SlimOrca 是社区复刻版本,非常适合提升模型的推理能力(CoT)。

9.5 Magpie:「无中生有」的合成范式

Magpie(Xu et al., 2024,华盛顿大学 + AI2,ICLR 2025)是 2024 年最具创意的指令数据合成方法。

9.5.1 核心 Trick

利用对齐 LLM 的自回归特性——只输入左侧模板,让模型自己生成 user query

<|begin_of_text|><|start_header_id|>user<|end_header_id|>

← 在这里截断输入,喂给 Llama-3-Instruct

模型作为 decoder-only LM,会从这个截断位置开始续写。因为它在 SFT/RLHF 时见过大量 <|start_header_id|>user<|end_header_id|>\n\n 之后跟着真实 user 问题的样本,它会自然地生成 user 的问题:

What are the key differences between supervised and unsupervised learning?<|eot_id|>

然后再用同一个模型生成 assistant 响应:

<|begin_of_text|><|start_header_id|>user<|end_header_id|>

What are the key differences between supervised and unsupervised learning?<|eot_id|>
<|start_header_id|>assistant<|end_header_id|>

← 模型续写出响应

9.5.2 优势

  • 零 prompt engineering:不需要 seed task、不需要演化策略。
  • 零人工 seed:完全靠模型自己。
  • 直接「萃取」对齐模型内化的知识分布:相当于把 RLHF 后模型脑中的「user-assistant 联合分布」直接采样出来。
  • 极快:用 Llama-3-70B-Instruct 生成 4M 条仅需数千 GPU 小时。

9.5.3 后处理

原始 4M 数据需要过滤:

  • 用 reward model 打分,保留 Top-N。
  • 去重(embedding similarity)。
  • 长度、重复模式检查。

最终 Magpie-Pro 300K 是公开数据集。论文还做了一个惊人对照:

仅用 Magpie 数据做 SFT,就能超过用 UltraFeedback 数据做 SFT + DPO 的效果

这暗示对齐模型的「自蒸馏」可能比 RLHF 更高效——后续 RL 章节会进一步讨论。

9.5.4 实战代码

python
import torch
from transformers import AutoModelForCausalLM, AutoTokenizer

tokenizer = AutoTokenizer.from_pretrained("meta-llama/Meta-Llama-3-8B-Instruct")
model = AutoModelForCausalLM.from_pretrained(
    "meta-llama/Meta-Llama-3-8B-Instruct",
    torch_dtype=torch.bfloat16, device_map="auto",
)

# Step 1: 从空 user 模板生成 user query
left = "<|begin_of_text|><|start_header_id|>user<|end_header_id|>\n\n"
left_ids = tokenizer(left, add_special_tokens=False, return_tensors="pt").input_ids.cuda()

with torch.no_grad():
    user_out = model.generate(
        left_ids, max_new_tokens=200,
        do_sample=True, temperature=1.0, top_p=0.95,
        eos_token_id=tokenizer.convert_tokens_to_ids("<|eot_id|>"),
    )
user_query = tokenizer.decode(user_out[0][left_ids.shape[1]:], skip_special_tokens=True)

# Step 2: 用 user query 生成 assistant response
messages = [{"role": "user", "content": user_query.strip()}]
prompt = tokenizer.apply_chat_template(messages, tokenize=False, add_generation_prompt=True)
ids = tokenizer(prompt, add_special_tokens=False, return_tensors="pt").input_ids.cuda()

with torch.no_grad():
    out = model.generate(
        ids, max_new_tokens=1024,
        do_sample=True, temperature=0.7, top_p=0.95,
        eos_token_id=tokenizer.convert_tokens_to_ids("<|eot_id|>"),
    )
assistant = tokenizer.decode(out[0][ids.shape[1]:], skip_special_tokens=True)

print({"instruction": user_query, "output": assistant})

9.6 数据去污(Decontamination)

9.6.1 问题:训练集泄漏到评测基准

如果训练数据包含评测基准(MMLU、GSM8K、HumanEval 等)的题目,会导致虚高分数("train on test")。这是 LLM 排行榜信任危机的主要源头。

典型「污染」来自:

  • 直接 leak:网页抓取时把基准题集合(如 GitHub 上的 MMLU 副本)抓进了训练数据。
  • 间接 leak:合成数据(如 Self-Instruct)的 seed 包含了基准题。
  • rephrased leak:原题被某个网友改写后发到了训练语料里。

9.6.2 N-gram 重叠检测

最常用方法:以字符或 token 为单位,n=8~13,若基准样本与训练数据 n-gram 重叠率 > 阈值则视为污染。

python
import re
from collections import defaultdict

def normalize(text: str) -> str:
    text = re.sub(r"\s+", " ", text.lower().strip())
    text = re.sub(r"[^\w\s]", "", text)
    return text

def extract_ngrams(text: str, n: int = 13):
    text = normalize(text)
    if len(text) < n:
        return set()
    return {text[i : i + n] for i in range(len(text) - n + 1)}

def contamination_score(bench_text: str, train_corpus: list[str], n: int = 13) -> float:
    bench_ng = extract_ngrams(bench_text, n)
    train_ng: set[str] = set()
    for d in train_corpus:
        train_ng |= extract_ngrams(d, n)
    if not bench_ng:
        return 0.0
    return len(bench_ng & train_ng) / len(bench_ng)

阈值经验:

  • 字符 n=13 + score > 0.5:高度可疑。
  • token n=8 + score > 0.3:也可疑(token 表示更稀疏)。

9.6.3 Embedding + LLM Judge:抓「rephrased contamination」

n-gram 无法捕捉改写后的污染(如改变措辞但语义相同)。LLM Decontaminator(Yang et al., 2023, LMSYS):

  1. 用 sentence embedding 召回 Top-K 相似训练样本。
  2. 用 GPT-4 判断每对是否「实质等价」。
Prompt:
You are given a benchmark question and a candidate training sample.
Decide whether the candidate is a paraphrase of the benchmark question
(answers identical, requires same knowledge).

Benchmark: {bench_q}
Candidate: {train_q}

Answer with YES or NO.

LMSYS 团队用此方法在 RedPajama、Stack Exchange 等公开语料中发现了大量针对 MMLU、HumanEval 的隐性污染。

9.6.4 ConTAM 研究的建议

ConTAM(2024)系统比较多种污染检测方法,建议:

  • n < 8 的较小 n-gram 检测更敏感,避免漏报。
  • 同时使用 token-match、ngram-match、token-extend 多种指标。
  • 每个新评测周期都重做一次(数据污染会随时间累积)。

9.7 数据混合:领域配比

实战中 SFT 数据通常按比例混合多种领域:

领域代表数据集比例参考
通用对话UltraChat, ShareGPT, Magpie, OpenHermes30-50%
代码CodeAlpaca, Magicoder, OpenCodeInterpreter, Code-Feedback15-25%
数学MetaMathQA, OpenMathInstruct, MMIQC10-20%
推理 / CoTOpenOrca, FLAN-CoT, Tulu-Reasoning10-20%
工具调用Glaive-Function-Calling, ToolBench5-10%
多语言Aya, BELLE, COIG视目标
安全 / 拒答Anthropic HH, BeaverTails1-5%

Tulu V2 Mix 是一个被广泛参考的开源混合配方(约 320K 样本):

  • ShareGPT (~110K)
  • WizardLM-Evol (~70K)
  • FLAN V2 (~50K)
  • CoT (~50K)
  • Code-Alpaca (~20K)
  • 其他 (~20K)

混合策略要点:

  • 按 token 而非样本数比例配比:长样本(如代码)token 更多,按样本比会被低估。

  • 温度采样:从大数据集少采、小数据集全采,用温度参数 τ 控制:

    pi|Di|1/τ,τ[1,2]

    τ=1 是按比例采,τ= 是各 dataset 等概率采。

9.8 质量过滤

9.8.1 长度过滤

  • 过短(< 10 词):通常是 trivial 样本或截断错误。
  • 过长(> max_seq_length):训练时会截断,response 不完整反而有害。
  • 建议保留长度在 P10 ~ P95 之间。

9.8.2 困惑度过滤

用一个小模型(如 Llama-3-8B-base)计算 response 的 PPL,过滤异常高(噪声)和异常低(模板化重复)的样本。

python
import torch
from transformers import AutoModelForCausalLM, AutoTokenizer

scorer = AutoModelForCausalLM.from_pretrained("meta-llama/Meta-Llama-3-8B").cuda().eval()
tok = AutoTokenizer.from_pretrained("meta-llama/Meta-Llama-3-8B")

@torch.no_grad()
def ppl(text: str) -> float:
    ids = tok(text, return_tensors="pt").input_ids.cuda()
    out = scorer(ids, labels=ids)
    return torch.exp(out.loss).item()

9.8.3 Reward Model 评分

用 reward model(如 ArmoRM, Skywork-Reward)打分,保留 Top-K:

python
from transformers import AutoModelForSequenceClassification, AutoTokenizer

rm = AutoModelForSequenceClassification.from_pretrained("Skywork/Skywork-Reward-V2-Llama-3.1-8B")
rm_tok = AutoTokenizer.from_pretrained("Skywork/Skywork-Reward-V2-Llama-3.1-8B")

@torch.no_grad()
def score(messages):
    ids = rm_tok.apply_chat_template(messages, return_tensors="pt").cuda()
    return rm(ids).logits[0, 0].item()

实战经验:用 RM 打分 + 取 Top-30% 作为最终 SFT 数据,效果常优于全量训练。

9.8.4 多样性筛选

避免主题集中:

python
from sentence_transformers import SentenceTransformer
from sklearn.cluster import KMeans

emb_model = SentenceTransformer("BAAI/bge-large-en-v1.5")
embs = emb_model.encode([s["instruction"] for s in data])

km = KMeans(n_clusters=200, random_state=42).fit(embs)
# 从每个簇取 Top-K(按 RM score)作为多样化采样

9.9 关键开源数据集速查

数据集规模类型来源特点
Alpaca52K单轮指令text-davinci-003 蒸馏历史经典,质量一般
ShareGPT~90K多轮对话用户分享的 ChatGPT真实分布,有合规风险
OpenAssistant (oasst1/2)84K/130K多轮人工全球志愿者完全人工,多语言
Dolly-15K15K单轮人工Databricks 员工商用许可
UltraChat1.5M多轮合成GPT 自迭代主题覆盖广
WizardLM Evol250K单轮演化Evol-Instruct难度梯度
LIMA1K单轮精选人工 + Stack Exchange极高质量
Magpie-Pro300K单/多轮合成Llama-3-70B-Instruct自生成
WildChat652K多轮真实GPT-3.5/4 真实使用真实分布
OpenHermes 2.5~1M混合聚合开源 SFT 基准
Tulu-3-SFT-Mixture939K混合AI2配方透明
OpenOrca4.2M推理增强GPT-4 重写 FLAN提升 CoT
Glaive-Function-Calling113K工具调用合成函数调用专项
MetaMathQA395K数学GSM8K/MATH 增广数学 SFT
Magicoder-OSS75K代码OSS 启发合成代码 SFT
Aya513M (multi-lang)多语言119 语言志愿者多语言对齐

9.10 一个端到端的数据 pipeline

把上面所有要素串起来,一个工业级 SFT 数据 pipeline 大致是:

┌─────────────────┐
│ 1. 原始来源采集  │  Magpie / UltraChat / 真实日志 / 人工标注
└────────┬────────┘

┌─────────────────┐
│ 2. 格式标准化    │  统一为 OpenAI Chat 格式
└────────┬────────┘

┌─────────────────┐
│ 3. 去重           │  MinHash / SimHash 在指令端去重
└────────┬────────┘

┌─────────────────┐
│ 4. 去污           │  与 MMLU/GSM8K/HumanEval 等做 13-gram 检测
└────────┬────────┘

┌─────────────────┐
│ 5. 质量打分       │  RM / PPL / 长度
└────────┬────────┘

┌─────────────────┐
│ 6. 多样性筛选    │  embedding 聚类 + 每簇 Top-K
└────────┬────────┘

┌─────────────────┐
│ 7. 领域混合      │  通用 / 代码 / 数学 / 工具 比例配比
└────────┬────────┘

┌─────────────────┐
│ 8. 模板化 + 切分 │  apply_chat_template, train/eval split
└────────┬────────┘

        SFT

9.11 本章小结

  • 质量 ≫ 数量:LIMA 的 1K 数据 > 杂乱 50K 数据。响应风格统一、prompt 多样化是黄金组合。
  • Self-Instruct → Alpaca → Evol-Instruct → Magpie:合成数据范式一路演化,从「seed + few-shot」到「演化算子」到「无中生有」。
  • 去污是底线:现代 LLM 排行榜可信度的核心依赖于训练数据未泄漏评测基准。
  • 混合配比按 token 不按样本:通用对话 30-50%,代码/数学/推理各 10-25%,工具调用与安全数据点缀。
  • 质量过滤工具:长度 + PPL + RM score + 多样性聚类,逐层筛选。

思考题

  1. 如果你只有 100 万美元预算,要从零构建一个高质量 SFT 数据集,你会如何分配预算? 比较「全人工标注 1 万条」「GPT-4 蒸馏 100 万条」「Magpie 自生成 + RM 筛选」「混合策略」四种路线,估算成本、质量、可复现性。

  2. Magpie 让 RLHF 后的模型「自吐」数据,理论上是模型自身知识分布的 IID 采样。这是否意味着用 Magpie 做 SFT 会让模型陷入「自我循环」、能力不再提升? 设计一个实验来验证或证伪。

  3. 在数据去污中,n-gram 检测可能漏掉「翻译后的污染」(英文 MMLU 题被翻译成中文混入训练集)。如何检测这类跨语言污染? 提出一个可行的 pipeline,并讨论计算开销。

基于 MIT 协议发布