LLMSurgeon — 从模型回答反推训练数据配方
待复核LLMSurgeon 是一套只看大模型生成的文字,反推它预训练数据大概由哪些领域组成的方法。日常类比:你没有进厨房,也拿不到菜谱,只能尝几口汤,然后判断这锅汤里大概有多少番茄、牛肉、洋葱和香料。
这里的”番茄、牛肉、洋葱”换成训练数据领域:网页、书籍、代码、论文、维基百科、论坛问答等。传统审计常问”这篇具体文章有没有被模型见过”,LLMSurgeon 问的是更宏观的问题:这个模型的知识来源比例像不像它声称的训练配方。
论文把这个任务叫 Data Mixture Surgery(DMS)。目标不是偷出训练数据,而是在一个预先给好的领域分类表里,估计模型真正表现出来的领域分布。
不理解 LLMSurgeon,下面这些事都很难解释:
- 为什么同样是大模型,有的特别会写代码,有的特别会写百科式解释——训练数据配方会塑造模型习惯
- 为什么”有没有见过某个样本”不等于”训练集整体是什么结构”——单粒沙子和整片海滩不是一个尺度
- 为什么闭源模型的数据透明度会成为治理问题——外部审计者通常拿不到训练集,只能看模型行为
- 为什么简单数分类器输出会偏——分类器会把相似领域混淆,必须先校准它的错法
LLMSurgeon 可以拆成 三步:
-
先学会认领域:准备一个已标注的参考数据集,训练外部领域分类器。类比:先训练品酒师分辨酸味、甜味、木桶味。
-
再记录品酒师会怎么错:在参考集上算出 soft confusion matrix,知道分类器把 C 和 C++、网页和过滤网页混在一起的概率。类比:不是假装品酒师完美,而是先写下他总把哪两种味道搞混。
-
最后反向校正:让目标模型用中性提示生成很多文本,分类器给出一个带偏的观测分布,再用混淆矩阵解一个约束反问题。类比:看到模糊照片后,先知道镜头怎么糊,再把图像尽量还原。
这三步背后的关键假设叫 label shift:领域比例会变,但每个领域内部的语言特征大致不变。也就是说,模型写出的代码样文本,统计上仍然像代码样文本。
案例 1:把问题写成”配方估计”
Section titled “案例 1:把问题写成”配方估计””domains = ["web", "code", "paper", "wiki"]true_mix = {"web": 0.55, "code": 0.20, "paper": 0.15, "wiki": 0.10}generated_texts = sample_model_outputs(prompt="Continue naturally", n=5000)逐部分解释:
domains是预先约定的分类表,LLMSurgeon 不能发现表外的新领域true_mix是我们想估计但真实世界里通常看不见的训练配方generated_texts是唯一黑盒入口:不给权重、不给训练集,只拿模型回答
案例 2:为什么不能直接数分类器结果
Section titled “案例 2:为什么不能直接数分类器结果”raw_counts = {"web": 0.45, "code": 0.30, "paper": 0.15, "wiki": 0.10}confusion = { "web": {"web": 0.80, "wiki": 0.20}, "code": {"code": 0.70, "paper": 0.30},}逐部分解释:
raw_counts看起来像答案,但它混进了分类器自己的偏差confusion记录”真实是 web 时有 20% 被认成 wiki”这类系统性错误- 如果不校正,代码领域可能被高估,论文领域可能只是代码文本被误认出来
案例 3:反向求一个合法分布
Section titled “案例 3:反向求一个合法分布”import numpy as npfrom scipy.optimize import minimize
C = np.array([[0.80, 0.20], [0.10, 0.90]])observed = np.array([0.62, 0.38])
def loss(pi): return np.linalg.norm(C.T @ pi - observed) ** 2
result = minimize(loss, x0=[0.5, 0.5], bounds=[(0, 1), (0, 1)], constraints={"type": "eq", "fun": lambda p: p.sum() - 1})print(result.x)逐部分解释:
C.T @ pi表示”真实配方经过分类器偏差后,会被我们观察成什么样”loss衡量预测观测和真实观测之间差多少bounds和sum() - 1保证答案仍是概率分布:不能负数,总和必须是 1
-
把 DMS 当成 membership inference:MIA 关心单个样本有没有出现,DMS 关心整体比例,尺度不同会让误差累积。
-
把分类器输出当真相:领域分类器再准也会有稳定偏差,不校正混淆矩阵就会把偏差写进最终配方。
-
把分类表切得过细:C 和 C++、C4 和 Common Crawl 这类来源太像,分类器分不开时反问题会变得不稳定。
-
忽略提示词影响:强风格提示会把生成文本推向某个领域,导致观测分布不再像预训练分布。
适用 vs 不适用场景
Section titled “适用 vs 不适用场景”适用:
- 想审计开源或闭源模型的大致训练领域比例
- 已经有明确 taxonomy,比如网页、代码、书籍、论文、百科
- 能拿到可靠参考数据,用来训练领域分类器并估计混淆矩阵
- 需要先做低成本安全 triage,再决定哪些模型值得更贵的人工红队
不适用:
- 想证明某篇具体文章被训练过——那是 MIA 或数据使用推断问题
- 想发现完全未知的新领域——LLMSurgeon 只能在给定分类表里分配概率
- 目标模型经过强 RLHF 或指令调优,生成分布可能偏离预训练底座
- 领域边界天然重叠,比如过滤网页 vs 原始网页、相邻编程语言
历史小故事(可跳过)
Section titled “历史小故事(可跳过)”- 2017 年前后:membership inference 成为模型隐私审计的标准问题,核心是判断单条样本是否进过训练集。
- 2020-2024 年:The Pile、LLaMA、Pythia、OLMo、StarCoder 等模型公开或半公开训练配方,给”配方级审计”提供了参照物。
- 2024-2025 年:研究者发现很多 MIA 在 LLM 上并不稳定,单样本检测难直接扩展成整体数据组成。
- 2026 年:LLMSurgeon 把问题换成 DMS:不追逐每个样本,而是估计领域分布这张宏观地图。
- 黑盒审计可以从”单样本”上升到”分布”——看不见训练集,也可以对训练配方做概率估计。
- 校准比分类本身更关键——LLMSurgeon 的增益主要来自知道分类器怎么错,再把错法反解掉。
- 好 taxonomy 是半个方法——领域必须语义上可分,分得过细会让矩阵病态。
- 生成文本不是训练集镜子——中性提示、后训练影响、领域触发方式都会改变观测结果。
- 论文 PDF:LLMSurgeon: Diagnosing Data Mixture of Large Language Models
- 相关基准:Pythia: A Suite for Analyzing Large Language Models Across Training and Scaling
- 相关数据:The Pile: An 800GB Dataset of Diverse Text for Language Modeling
- llama —— 训练数据不完全公开时,外部审计为什么重要
- abadi-dpsgd-2016 —— 隐私审计的另一条路线:不反推配方,而是限制泄露
- llama —— LLMSurgeon 在 LLaMA 公开配方上验证粗粒度数据比例恢复
- starcoder-2023 —— 细粒度代码语言分类最容易暴露”领域太像”的问题
- chinchilla —— 讨论训练数据数量,LLMSurgeon 讨论训练数据组成
- scaling-laws —— scaling law 管总量与算力,DMS 管不同数据桶的比例
- gpt-3 —— 早期闭源大模型让训练数据透明度问题变得突出
- attention —— 这些审计对象大多是 Transformer 系大语言模型
(暂无反向链接)