CS336 学习笔记 04:模型评估与训练数据

本文最后更新于 2026年9月28日 晚上

CS336 入门辅助学习文档 - 数据与评估模块


写在前面:这三讲学什么?

这三讲属于课程的第四大模块——数据与评估。

为什么要学这个?因为做大模型,光会训模型还不够:

  • 怎么判断模型好不好? → 这就是评估(L12)
  • 训练数据从哪来?怎么处理? → 这就是数据(L13、L14)

很多人以为大模型的核心是架构和算法,但实际上,数据才是决定模型上限的关键。

同样的架构,用不同的数据训练,效果天差地别。

💡 为什么数据和评估这么重要?

  • 架构大家都差不多(都是 Transformer)
  • 系统优化也有成熟方案
  • 真正拉开差距的,是数据的质量和数量
  • 而评估,就是衡量模型好坏的"尺子"

没有好的评估,你就不知道模型好不好;没有好的数据,模型就不可能好。


第十二讲:评估 — 怎么判断模型好不好?

12.0 前置知识:为什么评估很难?

你可能会想:评估模型有什么难的?出几道题考考它不就行了?

没那么简单。

评估的核心挑战:我们想衡量的是一个抽象的概念(比如"智能"、"能力"),但我们只能测具体的指标(比如考试分数)。

这就像:

  • 你想知道一个人聪不聪明(抽象概念)
  • 但你只能给他做智商测试题(具体指标)
  • 智商测试分数高,一定代表聪明吗?不一定

模型评估也是一样:

  • 你想知道模型"好不好"
  • 但你只能测它在某些基准上的分数
  • 基准分数高,一定代表模型好吗?不一定

💡 生活类比: 评估就像考试:

  • 考试分数高 = 学习好?不一定,可能只是会考试
  • 基准分数高 = 模型好?不一定,可能只是会刷榜

但我们又不能没有考试——总得有个衡量标准。 所以评估是一门艺术,也是一门科学。

评估的维度:

一个模型"好不好",取决于你关心什么:

  • 能力:会不会做题、会不会写代码
  • 效率:快不快、贵不贵
  • 安全:会不会说坏话、会不会做坏事
  • 用户体验:人喜不喜欢用

不同的场景,关注的点不一样。


12.1 Perplexity:最古老的评估指标

最经典、最古老的评估指标叫 Perplexity(困惑度)。

12.1.1 什么是 Perplexity?

回忆一下,语言模型本质上是一个概率分布——给定前面的词,预测下一个词的概率。

Perplexity 衡量的是:模型对测试数据的"困惑"程度。

  • 模型越确定(概率高)→ 困惑度越低 → 越好
  • 模型越不确定(概率低)→ 困惑度越高 → 越差

公式是这样的:

1
Perplexity = (1 / p(D))^(1/|D|)

其中 p(D) 是模型给测试集 D 分配的概率,|D| 是测试集的 token 数。

💡 通俗理解: 想象模型在"猜"下一个词。

  • 如果模型每次都能猜对(概率接近 1)→ 困惑度接近 1 → 模型很"自信"
  • 如果模型每次都瞎猜(概率均匀分布)→ 困惑度等于词表大小 → 模型很"困惑"

困惑度越低,说明模型越"懂"这段文本。

12.1.2 Perplexity 的问题

Perplexity 用了很多年,但它有很多问题:

问题一:分布偏移

传统的做法是:在训练集上训练,在测试集上测困惑度。训练集和测试集是同一个分布的。

但 GPT-2 之后,大家开始做零样本评估——在完全不同的数据集上测困惑度。

这就有问题了:

  • 如果测试集和训练集分布差很多,困惑度高不一定代表模型差
  • 可能只是测试集的"风格"不一样

问题二:不区分重要和不重要

Perplexity 对所有 token 一视同仁。

比如这句话:"Stanford was founded in 1885"

  • "founded" 这个词预测对不对,其实不太重要
  • "1885" 这个年份预测对不对,很重要

但 Perplexity 给它们的权重是一样的。

问题三:和下游任务不一定相关

困惑度低,就代表模型在下游任务(比如问答、代码)上表现好吗?

不一定。有时候困惑度低的模型,下游任务反而不一定更好。

⚠️ 注意: Perplexity 是一个有用的指标,但不是全部。 它可以告诉你模型"语言建模"做得好不好,但不能告诉你模型"有用没用"。

所以我们还需要其他评估方式。

12.1.3 伪装成 Perplexity 的基准

有些基准看起来不是困惑度,但本质上就是:

  • Cloze 任务(完形填空):比如 LAMBADA,给一句话,挖掉最后一个词,让模型填
  • 多项选择句子补全:比如 HellaSwag,给一个开头,选哪个结尾最合理

这些本质上都是在测"模型给正确答案的概率有多高"——和困惑度是一回事。


12.2 考试基准:用题目考模型

除了困惑度,更直观的评估方式是:给模型出题,看它能做对多少。

就像考学生一样,给模型出一套题,看它考多少分。

这类基准叫考试基准(Exam Benchmarks)。

12.2.1 MMLU:最经典的多学科考试

MMLU(Massive Multitask Language Understanding) 是最经典的基准之一。

  • 57 个科目(数学、历史、法律、道德等等)
  • 都是选择题
  • 题目来自网上的各种考试资料

MMLU 本来是想测"语言理解"的,但实际上测的更多是知识——你知道多少东西。

💡 MMLU 像什么? 就像一个"百科知识竞赛"——什么都考一点,看你知识面广不广。

模型要在 MMLU 上取得好成绩,需要有大量的知识储备。

MMLU 曾经是最重要的基准之一,但现在有点"饱和"了——最好的模型已经能考 90 多分,区分度不够了。

12.2.2 MMLU-Pro:更难的版本

因为 MMLU 太简单了,大家又做了 MMLU-Pro:

  • 去掉了简单的题目
  • 从 4 个选项增加到 10 个选项
  • 用思维链(Chain of Thought)来评估,给模型更多思考空间

结果是:所有模型的分数都降了 16% 到 33%——区分度好多了。

💡 为什么增加选项难度会增加? 4 选 1 的话,瞎蒙也有 25% 的正确率。 10 选 1 的话,瞎蒙只有 10% 的正确率。 选项越多,越难靠蒙混过关。

12.2.3 GPQA:博士生级别的难题

GPQA(Graduate-Level Google-Proof Q&A) 更难:

  • 题目是 61 个 PhD 写的
  • 都是研究生级别的难题
  • 专家也只能考 65 分
  • 普通人用 Google 搜 30 分钟也只能考 34 分
  • GPT-4 也只能考 39 分

这个基准的目的是测模型的极限能力——看它能不能达到甚至超过专家水平。

12.2.4 HLE:人类最后的考试

HLE(Humanity's Last Exam) 是更新的基准:

  • 2500 道题
  • 多模态、多科目
  • 有选择题也有简答题
  • 悬赏 50 万美元征集好题目
  • 经过多轮筛选,确保前沿模型也做不出来

为什么叫"人类最后的考试"?因为它想做一个人类专家也很难考高分的基准,这样模型进步了也不会很快饱和。

💡 基准饱和问题: 基准有个通病——用着用着就"饱和"了。

  • 一开始,模型都考不及格
  • 慢慢的,模型考 60 分、80 分、90 分...
  • 最后,所有模型都考 95 分以上,区分不开了

所以大家一直在做更难的基准——MMLU → MMLU-Pro → GPQA → HLE... 就像军备竞赛一样,模型进步,基准也得进步。


12.3 其他类型的基准

考试基准只是其中一类,还有很多其他类型的基准。

12.3.1 聊天基准

聊天基准测的是:模型作为聊天机器人,表现好不好?

怎么测?有几种方式:

  • 人工评估:让人给模型的回复打分
  • 模型评估:用一个大模型(比如 GPT-4)给模型的回复打分
  • 对战评估:两个模型对战,让人选哪个更好

最有名的是 Chatbot Arena(现在叫 Arena AI):

  • 用户和两个匿名模型聊天
  • 投票选哪个更好
  • 用 Elo 评分排名

这种方式更接近真实的用户体验,但也更主观、更贵。

12.3.2 Agent 基准

Agent 基准测的是:模型作为智能体,能不能完成复杂任务?

比如:

  • 给模型一个目标,看它能不能规划并执行
  • 让模型用工具(浏览器、计算器、代码解释器)
  • 让模型完成多步骤的任务

Agent 基准更难,也更接近真实应用。

12.3.3 纯推理基准

纯推理基准测的是:模型的逻辑推理能力强不强?

比如:

  • 数学题
  • 逻辑题
  • 编程题

这些基准的特点是:答案是确定的,对就是对,错就是错。

代表基准:

  • GSM8K:小学数学题
  • MATH:更难的数学题
  • HumanEval:编程题

12.3.4 安全基准

安全基准测的是:模型会不会说坏话、做坏事?

比如:

  • 会不会教你做炸弹
  • 会不会有偏见
  • 会不会被 jailbreak(越狱)

安全评估很重要,但也很难——因为"安全"的定义本身就有争议。


12.4 评估的挑战和注意事项

评估看起来简单,但实际上有很多坑。

12.4.1 现实性(Realism)

第一个问题:基准任务和真实场景像不像?

比如:

  • 基准上都是选择题,但真实应用中模型要生成回答
  • 基准上都是英文,但真实应用中可能有各种语言
  • 基准上都是干净的文本,但真实应用中可能有各种奇怪的输入

如果基准和真实场景差太多,那基准分数就没什么意义。

12.4.2 有效性(Validity)

第二个问题:基准测的真是你想测的吗?

比如:

  • 你想测"推理能力",但模型可能只是背了答案
  • 你想测"知识",但模型可能只是猜对了
  • 你想测"安全性",但模型可能只是会说漂亮话

这就是有效性问题——你的评估工具真的能衡量你想衡量的东西吗?

💡 生活类比: 有效性就像"体重秤准不准":

  • 你想测体重,结果秤测的是身高 → 无效
  • 你想测智商,结果测试测的是记忆力 → 部分有效

好的评估,需要确保你测的真是你想测的。

12.4.3 数据污染

还有一个大问题:数据污染(Data Contamination)。

什么是数据污染?就是基准的题目不小心出现在了训练数据里。

如果模型训练的时候已经见过题目了,那考高分就不稀奇了——它只是背下来了,不是真的会。

数据污染是评估中非常头疼的问题:

  • 训练数据太大了,很难完全避免污染
  • 你不知道模型是真的会,还是只是记住了
  • 越有名的基准,越容易被污染

⚠️ 注意: 看到基准分数的时候,要想想:

  • 这个基准有没有可能被污染?
  • 模型是不是只是背了答案?
  • 分数高一定代表能力强吗?

不要迷信基准分数。

12.4.4 方法 vs 模型 vs Agent

还有一个容易混淆的点:你测的到底是什么?

  • 模型本身:模型的基础能力
  • 方法:提示词工程、思维链、工具使用等
  • Agent:整个系统(模型 + 工具 + 规划)

比如,一个模型用了思维链之后分数提高了,这是模型变好了,还是方法变好了?

比较的时候,一定要说清楚你比的是什么——不然就是"苹果和橘子比"。


12.5 怎么正确看待评估?

最后,我们来谈谈应该怎么看待评估。

12.5.1 没有唯一的"最好"

首先要记住:没有哪个模型是"最好"的。

  • 如果你关心能力 → 看考试基准
  • 如果你关心效率 → 看速度和成本
  • 如果你关心用户体验 → 看人工评估
  • 如果你关心安全 → 看安全基准

不同的维度,排名可能完全不一样。

12.5.2 评估是工具,不是真理

评估分数只是一个参考,不是真理。

  • 分数高不一定代表模型好
  • 分数低不一定代表模型差
  • 要看具体的任务和场景

不要迷信排行榜,也不要只看一个指标。

12.5.3 最好的评估:实际用

最后,最好的评估方式,就是实际用。

把模型放到真实场景中,让真实用户去用,看用户反馈。

基准分数再高,用户不爱用也没用。 基准分数不那么高,但用户觉得好用,那就是好模型。

💡 一句话总结: 评估就像温度计——它能告诉你温度,但它不是温度本身。

不要把温度计当成现实,也不要只看一个温度计。 多摸几个,多感受一下,才能知道真实的温度。


12.6 本讲小结

这一讲我们学了模型评估:

评估的挑战

  • 抽象概念 → 具体指标,很难完全对应
  • 没有唯一的"好",取决于你关心什么

Perplexity

  • 最经典的指标,衡量模型对文本的困惑程度
  • 有局限性:分布偏移、不区分重要性、和下游任务不一定相关

考试基准

  • MMLU:经典多学科考试
  • MMLU-Pro:更难的版本
  • GPQA:博士生级别难题
  • HLE:人类最后的考试
  • 趋势:基准越来越难,因为模型进步太快

其他基准

  • 聊天基准:人工评估、对战评估
  • Agent 基准:测智能体能力
  • 纯推理基准:数学、逻辑、编程
  • 安全基准:测安全性

评估的挑战

  • 现实性:基准和真实场景像不像
  • 有效性:测的真是你想测的吗
  • 数据污染:训练数据里有没有题目
  • 方法 vs 模型 vs Agent:要分清比的是什么

正确看待评估

  • 没有唯一的"最好"
  • 评估是工具,不是真理
  • 最好的评估是实际用

12.7 小白常见问题 Q&A

Q1:为什么有这么多基准?一个不够吗?

A:因为模型的能力是多维度的,一个基准测不全。

就像学生考试——语文、数学、英语、物理...不能只考一门就说学生好不好。

模型也是一样——知识、推理、代码、安全、聊天...每个维度都需要不同的基准来测。

Q2:为什么基准一直在更新?

A:因为模型进步太快了,基准很快就"饱和"了。

一开始模型考不及格,慢慢的都考 90 多分,就区分不开了。所以必须不断做更难的基准。

这就像军备竞赛——模型进步,基准也得进步。

Q3:怎么判断一个基准好不好?

A:几个标准:

  1. 有效性:真的能测你想测的东西
  2. 现实性:和真实场景接近
  3. 难度:有区分度,不是大家都满分
  4. 干净:没有数据污染
  5. 可复现:别人能重复你的结果

满足这些的基准,就是好基准。

Q4:为什么很多公司不公布训练数据?

A:两个主要原因:

  1. 竞争优势:数据是核心竞争力,公布了别人就抄走了
  2. 法律风险:数据可能有版权问题,公布了可能被起诉

所以数据是大公司最保密的东西——比架构和算法保密得多。


12.8 学习路线图

必须掌握:

  • 评估的核心挑战(抽象 → 具体)
  • Perplexity 的概念和局限性
  • 几种主要的基准类型
  • 数据污染问题
  • 正确看待评估的态度

了解即可:

  • 各个基准的具体细节
  • 各种评估方法的实现
  • 安全评估的细节

配合作业:

  • 作业 4(Data)和这一讲相关,可以结合看
  • 下一讲(L13)会讲数据从哪来,可以接着看

第十三讲:数据 I — 训练数据从哪来?

13.0 前置知识:为什么数据最重要?

前面的课讲了架构、系统、缩放——都是关于"模型"和"训练"的。

但有一个问题一直没回答:训练数据从哪来?

很多人以为大模型的核心是架构和算法,但实际上,数据才是决定模型上限的关键。

为什么?因为:

  • 架构大家都差不多(都是 Transformer)
  • 系统优化也有成熟方案
  • 真正拉开差距的,是数据的质量和数量

💡 生活类比: 模型就像学生,数据就像教材。

  • 同样的学生(架构),用好教材(好数据)教出来的,就是比用烂教材教出来的强
  • 学生再聪明(模型再大),没有好教材(好数据)也学不到东西

所以数据才是根本——没有好数据,再大的模型也没用。

数据有多保密?

你去看各个开源模型的论文:

  • 架构:详细得不能再详细
  • 训练方法:也说得很清楚
  • 数据:基本一笔带过,甚至完全不说

为什么?因为数据是核心竞争力——公布了数据,别人就可以抄你的作业了。

还有一个原因:法律风险。数据可能有版权问题,公布了可能被起诉。

所以数据是大模型最保密的部分——比架构和算法保密得多。


13.1 训练的三个阶段

在讲数据之前,先了解一下大模型训练的三个阶段。

很多人以为大模型训练就是"拿一堆数据训一遍",其实不是。

大模型训练通常分三个阶段:

1. 预训练(Pre-training)

  • 用大量的、低质量的、多样化的数据
  • 目标:让模型学会基本的语言能力和世界知识
  • 特点:数据量大,质量一般

2. 中期训练(Mid-training)

  • 用更多高质量的数据继续训练
  • 目标:增强模型的特定能力(比如推理、代码、数学)
  • 特点:数据量中等,质量高

3. 后训练(Post-training)

  • 用对话数据、指令数据做微调(SFT),再加 RLHF/GRPO 等
  • 目标:让模型更会聊天、更听话、更安全
  • 特点:数据量小,但质量非常高

💡 趋势: 从预训练到后训练:

  • 数据量:大 → 中 → 小
  • 数据质量:低 → 中 → 高

就像学习一样:

  • 一开始广泛阅读,什么都看(预训练)
  • 然后看专业书,深入学习(中期训练)
  • 最后跟老师学,练习表达和应用(后训练)

对应的模型:

  • 基础模型(Base Model):预训练 + 中期训练之后的模型
  • 指令/聊天模型(Instruct/Chat Model):后训练之后的模型

现在越来越多的模型只发布聊天版本,不发布基础版本了——因为基础模型对普通用户没用。


13.2 数据从哪来?—— 原始数据源

大模型的训练数据从哪来?

你可能听说过"大模型是用整个互联网训练的"——不完全对,但也差不多。

具体来说,数据主要来自这些地方:

13.2.1 Common Crawl:最大的数据源

Common Crawl 是最大的数据源,没有之一。

什么是 Common Crawl?

  • 一个非营利组织
  • 定期爬取整个互联网
  • 把爬下来的网页数据公开,免费使用
  • 数据量巨大——PB 级别

大多数大模型的训练数据里,Common Crawl 占比最大(通常 60%-80%)。

但 Common Crawl 有个问题:质量参差不齐。

  • 有好的内容(博客、新闻、百科)
  • 也有很多垃圾(广告、垃圾邮件、低质量网站)

所以 Common Crawl 的数据不能直接用,需要大量的过滤和清洗。

💡 Common Crawl 像什么? 就像一个巨大的图书馆——什么书都有。

  • 有经典名著,也有垃圾小说
  • 有学术论文,也有八卦杂志

你不能把所有书都给学生看,得挑一挑。 数据过滤就是干这个的——从海量数据里挑出好的。

13.2.2 Wikipedia:高质量的百科

Wikipedia(维基百科) 是另一个重要的数据源。

特点:

  • 质量高:经过人工编辑和审核
  • 结构化好:有标题、章节、引用
  • 多语言:几乎所有语言都有

Wikipedia 数据量不大,但质量高,所以几乎所有模型都会用。

13.2.3 GitHub:代码数据

GitHub 是代码数据的主要来源。

特点:

  • 大量的开源代码
  • 各种编程语言都有
  • 质量参差不齐(有好的开源项目,也有新手练手的)

代码数据对模型的推理能力很有帮助——会写代码的模型,通常逻辑推理能力也强。

所以现在的大模型,基本都会在训练数据里加代码。

13.2.4 ArXiv:学术论文

ArXiv 是学术论文的预印本平台。

特点:

  • 大量的学术论文
  • 质量高(都是科研人员写的)
  • 专业术语多,难度大

学术论文数据可以增强模型的学术能力和推理能力。

13.2.5 其他来源

还有很多其他来源:

  • 书籍:Project Gutenberg 等
  • 论坛:Reddit、StackExchange 等
  • 新闻:各种新闻网站
  • 视频字幕:YouTube 等
  • ...

数据来源越多越杂,模型的知识面越广,但也越难清洗。


13.3 数据处理流水线:从原始数据到训练数据

原始数据不能直接用来训练,需要经过一个处理流水线。

大致是这样的:

1
原始数据 → 转换 → 过滤 → 去重 → 混合 → 训练数据

我们一个个来看。

13.3.1 转换(Transformation)

第一步是转换——把各种格式的数据转换成纯文本。

因为原始数据不是纯文本:

  • 网页是 HTML 格式
  • 论文是 PDF 格式
  • 代码是各种编程语言的文件
  • ...

需要把它们转换成纯文本,模型才能用。

HTML 转文本:

  • 去掉 HTML 标签
  • 去掉导航栏、广告、页脚等"样板"内容
  • 提取正文

常用工具:trafilatura、resiliparse、jusText 等。

PDF 转文本:

  • 从 PDF 里提取文字
  • 有的 PDF 是扫描件,还需要 OCR(光学字符识别)
  • 表格、公式等特殊内容处理起来很麻烦

转换看起来简单,但其实很重要——转换质量直接影响数据质量。

⚠️ 注意: 转换是有损的——HTML 里的图片、表格、格式信息都会丢失。 转换质量不好的话,模型学到的就是"垃圾"。

所以数据处理的每一步都很重要,不能马虎。

13.3.2 过滤(Filtering)

第二步是过滤——把不好的数据去掉。

为什么要过滤?因为原始数据里有太多垃圾了:

  • 低质量的网页
  • 重复的内容
  • 有毒的内容(脏话、仇恨言论)
  • 非目标语言的内容
  • ...

过滤的方法有很多种:

1. 基于规则的过滤

  • 去掉太短的文档
  • 去掉太长的文档
  • 去掉特殊字符太多的文档
  • 去掉"垃圾词"太多的文档

简单粗暴,但有效。

2. 基于分类器的过滤

  • 训练一个分类器,判断文档质量高不高
  • 训练一个语言识别器,判断是不是目标语言
  • 训练一个毒性分类器,判断有没有毒

更智能,但需要训练分类器。

3. 基于困惑度的过滤

  • 用一个好的语言模型给文档算困惑度
  • 困惑度低的 = 模型觉得"正常"的 → 保留
  • 困惑度高的 = 模型觉得"奇怪"的 → 去掉

这个方法很巧妙——用模型来选数据。

💡 过滤像什么? 就像选秀:

  • 海选(规则过滤):先把明显不行的去掉
  • 初选(分类器过滤):再用更智能的方法挑一遍
  • 决赛(人工审核):最后人工看一遍

层层筛选,最后留下的才是好数据。

13.3.3 去重(Deduplication)

第三步是去重——去掉重复的数据。

为什么要去重?

  • 重复的数据会让模型过拟合
  • 重复的数据浪费算力
  • 重复的数据可能导致数据污染(测试集出现在训练集里)

去重有两种:

  • 精确去重:完全一样的文档去掉
  • 模糊去重:差不多一样的文档也去掉

模糊去重更难,但更重要——因为很多内容是"洗稿"的,不是完全一样,但差不多。

常用的模糊去重方法:MinHash + LSH。

  • 给每个文档算一个"指纹"
  • 指纹相似的文档,内容大概率相似
  • 用局部敏感哈希(LSH)快速找相似的

💡 去重有多重要? 非常重要! 研究发现,去重可以显著提高模型质量,甚至比增加数据量还有用。

为什么?因为重复的数据是"无效"的——模型学不到新东西,还可能过拟合。

所以宁可数据少一点,也要保证不重复。

13.3.4 混合(Mixing)

第四步是混合——把不同来源的数据按比例混在一起。

为什么要混合?因为不同来源的数据有不同的特点:

  • Common Crawl:量大但质量一般
  • Wikipedia:量小但质量高
  • 代码:量小但对推理有帮助
  • ...

不同的比例,训出来的模型不一样。

怎么找最优的混合比例?

  • 小模型实验:在小模型上试不同的比例,看哪个效果好
  • 缩放定律:用缩放定律预测大模型的最优比例
  • 经验:根据前人的经验来调

混合比例是数据工程里很重要的一环——比例调好了,模型效果能提升不少。


13.4 历史上的数据集

让我们快速回顾一下历史上重要的数据集,看看数据是怎么演变的。

13.4.1 早期:BERT、GPT-2 时代

BERT(2019):

  • 数据:Wikipedia + BookCorpus(书籍)
  • 大小:约 16GB
  • 特点:相对小,质量高

GPT-2(2019):

  • 数据:WebText(Reddit 上被点赞的网页)
  • 大小:约 40GB
  • 特点:用 Reddit 点赞来筛选质量

13.4.2 中期:GPT-3、The Pile 时代

GPT-3(2020):

  • 数据:CommonCrawl + Wikipedia + 书籍 + ...
  • 大小:约 500B tokens
  • 特点:开始用 Common Crawl,数据量暴增

The Pile(2020):

  • 数据:22 个不同来源的混合
  • 大小:约 800GB
  • 特点:开源、多样化、成为很多模型的标配

The Pile 是一个里程碑——第一个大规模、多样化、开源的数据集。

13.4.3 近期:LLaMA、Dolma、DCLM 时代

LLaMA(2023):

  • 数据:CommonCrawl + CCNet + StackExchange + Wikipedia + ...
  • 大小:约 1T tokens
  • 特点:更仔细的过滤和去重

Dolma(2024):

  • AI2 做的开放数据集
  • 大小:约 3T tokens
  • 特点:完全开放,包括处理代码

DCLM(2024):

  • DataComp 团队做的
  • 特点:用高质量分类器过滤,数据质量很高

趋势很明显:

  • 数据量越来越大
  • 数据质量越来越高
  • 过滤和清洗越来越仔细

💡 数据的军备竞赛: 模型越来越大,数据也越来越大。

  • GPT-1:约 1B tokens
  • GPT-2:约 10B tokens
  • GPT-3:约 500B tokens
  • GPT-4:估计几万亿 tokens

数据量的增长速度,比模型大小的增长速度还快。


13.5 法律和伦理问题

最后,我们来谈谈数据的法律和伦理问题——这是个很重要但经常被忽略的话题。

13.5.1 版权问题

最大的问题:用网上爬的数据训练模型,合法吗?

这是个有争议的问题:

  • 模型公司认为:这是"合理使用"(fair use),就像人读书学习一样
  • 版权方认为:这是侵犯版权,因为模型"复制"了他们的内容

目前还没有定论,不同国家的法律也不一样。

但可以肯定的是:

  • 版权问题是悬在大模型头上的一把剑
  • 已经有很多相关的诉讼了
  • 未来可能会有更明确的法律规定

⚠️ 注意: 这也是为什么很多公司不公布训练数据的原因之一——怕被起诉。 公布了数据,就等于给了对方证据。

13.5.2 隐私问题

另一个问题:隐私。

训练数据里可能包含个人信息:

  • 姓名、电话、地址
  • 私人对话
  • 医疗记录
  • ...

模型可能会"记住"这些信息,然后在生成的时候泄露出来。

这也是个大问题——尤其是在医疗、金融等敏感领域。

13.5.3 偏见问题

还有一个问题:偏见。

训练数据里有什么样的偏见,模型就会学到什么样的偏见:

  • 性别偏见
  • 种族偏见
  • 文化偏见
  • ...

模型不是"中立"的——它反映了训练数据的偏见。

这也是数据工程里需要考虑的问题:怎么减少数据里的偏见?

💡 数据不是中立的: 很多人以为数据是"客观"的,其实不是。 数据是人产生的,人的偏见都会反映在数据里。

模型只是数据的镜子——你给它什么数据,它就变成什么样。 所以数据的选择和处理,本身就是一种价值判断。


13.6 本讲小结

这一讲我们学了数据的来源和基本处理:

数据的重要性

  • 数据是决定模型上限的关键
  • 数据是大公司最保密的部分
  • 训练分三个阶段:预训练、中期训练、后训练

数据来源

  • Common Crawl:最大的数据源,质量参差不齐
  • Wikipedia:高质量百科
  • GitHub:代码数据
  • ArXiv:学术论文
  • 还有很多其他来源

数据处理流水线

  • 转换:把各种格式转成纯文本
  • 过滤:去掉低质量、有毒的内容
  • 去重:去掉重复的内容
  • 混合:按比例混合不同来源的数据

历史数据集

  • 早期:BERT、GPT-2
  • 中期:GPT-3、The Pile
  • 近期:LLaMA、Dolma、DCLM
  • 趋势:数据量越来越大,质量越来越高

法律和伦理

  • 版权问题:还没有定论
  • 隐私问题:可能泄露个人信息
  • 偏见问题:数据的偏见会被模型学到

13.7 小白常见问题 Q&A

Q1:训练一个大模型需要多少数据?

A:取决于模型大小和目标。

一般来说:

  • 小模型(1B 以下):几十亿到几百亿 tokens
  • 中等模型(1B-10B):几千亿 tokens
  • 大模型(10B 以上):几万亿 tokens

而且趋势是越来越多——现在的模型普遍比 Chinchilla 最优配比用更多的数据。

Q2:为什么不直接用更多数据,还要做过滤和去重?

A:因为不是所有数据都有价值。

  • 低质量数据不仅没用,还可能有害(让模型学到垃圾)
  • 重复数据是浪费,还可能导致过拟合
  • 有毒数据会让模型变坏

所以数据质量比数量更重要——100B 高质量数据,可能比 1T 低质量数据效果还好。

Q3:数据过滤会不会把有用的信息也过滤掉了?

A:会的,这是个权衡。

过滤太松 → 垃圾数据多 过滤太紧 → 有用信息少

最优的平衡点在哪里?很难说,需要实验来找。

这也是数据工程的艺术所在——不是越严越好,也不是越松越好。

Q4:合成数据是什么?有用吗?

A:合成数据就是模型自己生成的数据。

有用,但也有局限:

  • 优点:可以生成大量高质量数据,可以控制内容
  • 缺点:可能有"模型坍缩"的问题(模型学自己的输出,越来越差)

现在合成数据用得越来越多,尤其是在后训练阶段。但预训练阶段,真实数据还是主流。


13.8 学习路线图

必须掌握:

  • 数据为什么重要
  • 训练的三个阶段
  • 主要的数据来源
  • 数据处理的四个步骤(转换、过滤、去重、混合)
  • 版权和伦理问题

了解即可:

  • 各个历史数据集的细节
  • MinHash 等去重算法的细节
  • 各种过滤方法的具体实现
  • 法律问题的细节

配合作业:

  • 作业 4(Data)就是做数据处理,可以结合这一讲
  • 下一讲(L14)会讲数据处理的更多细节,可以接着看

第十四讲:数据 II — 数据处理的细节

14.0 前置知识:数据工程不简单

上一讲学了数据的来源和基本处理流程。

这一讲我们深入一点,看看数据处理的细节——过滤、去重、混合这些步骤具体是怎么做的。

很多人以为数据工程就是"爬爬数据、洗洗干净",没什么技术含量。

其实不是——数据工程是非常有技术含量的,而且对模型效果影响巨大。

💡 数据工程的重要性: 同样的模型架构,同样的算力:

  • 数据做得好 → 模型效果好
  • 数据做得差 → 模型效果差

很多时候,模型之间的差距不是架构的差距,而是数据的差距。 这也是为什么大公司把数据看得这么紧——这是真正的核心竞争力。


14.1 过滤的细节:怎么从垃圾里淘金?

上一讲提到了过滤,这一讲我们深入看看。

过滤的核心问题:给定一堆原始数据,怎么挑出"好"的数据?

这就像从沙子里淘金——大部分是沙子,只有一点点金子。

14.1.1 过滤的一般框架

过滤的一般框架是这样的:

  1. 定义"好数据"是什么样的:找一些你认为是"好"的数据作为目标
  2. 训练一个评分函数:给每个文档打分,分数越高越像"好数据"
  3. 根据分数筛选:保留分数高的,去掉分数低的

听起来简单,但做起来有很多门道。

评分函数有哪些类型?

1. 生成模型(KenLM)

  • 用目标数据训练一个语言模型(比如 n-gram 模型)
  • 给每个文档算困惑度
  • 困惑度低 = 像目标数据 → 保留

优点:简单、快 缺点:不够精确

2. 分类器(fastText)

  • 把目标数据当正例,原始数据当负例
  • 训练一个二分类器
  • 分类器认为是"正例"的 → 保留

优点:更精确 缺点:需要训练分类器

💡 两种方法的区别:

  • 生成模型:学"好数据长什么样",然后找像的
  • 分类器:学"好数据和坏数据的区别",然后区分

分类器通常更准,因为它直接学的是"区别"。

14.1.2 语言识别:找对语言

最简单也最常用的过滤:语言识别——找出特定语言的文本。

比如你要训练英文模型,那就只保留英文的网页。

怎么做?

  • 用 fastText 的语言识别模型
  • 支持 176 种语言
  • 速度非常快

比如 Dolma 数据集的做法:保留英文概率 >= 0.5 的页面。

⚠️ 注意:语言识别不是 100% 准确的。 有些混合语言的文本可能识别错。 但对于大规模数据处理来说,准确率已经足够了。

14.1.3 质量过滤:找高质量文本

更难的是质量过滤——找出高质量的文本。

什么是"高质量"?这就很主观了。

  • 是语法正确?
  • 是内容有价值?
  • 是排版整齐?
  • 是没有广告?

不同的人有不同的定义。

常见的质量过滤方法:

1. 基于规则的

  • 去掉太短的文档
  • 去掉太长的文档
  • 去掉特殊字符太多的
  • 去掉"垃圾词"太多的
  • 去掉重复行太多的

简单粗暴,但有效。很多数据集都用。

2. 基于分类器的

  • 用 Wikipedia 等高质量数据当正例
  • 用 Common Crawl 的随机样本当负例
  • 训练一个分类器
  • 用分类器给文档打分,保留高分的

比如 DCLM 数据集就是用这种方法,效果很好。

3. 基于困惑度的

  • 用一个好的语言模型给文档算困惑度
  • 困惑度低的 = "正常"的文本 → 保留
  • 困惑度高的 = "奇怪"的文本 → 去掉

比如 OpenMathText 数据集就是用 KenLM 来过滤数学文本的。

💡 质量过滤的权衡: 过滤太松 → 垃圾数据多 过滤太紧 → 有用信息少

最优的平衡点在哪里?很难说,需要实验来找。

这也是数据工程的艺术所在——不是越严越好。

14.1.4 毒性过滤:去掉坏内容

还有一种过滤:毒性过滤——去掉有毒、有害的内容。

什么是"有毒"?

  • 脏话
  • 仇恨言论
  • 色情内容
  • 暴力内容
  • ...

怎么做?

  • 训练一个毒性分类器
  • 给每个文档打分
  • 毒性太高的去掉

毒性过滤很重要——如果训练数据里有毒,模型也会有毒。

⚠️ 注意:毒性过滤也有争议。

  • 什么是"有毒"?定义本身就有争议
  • 会不会过度审查?把正常的内容也去掉了
  • 会不会引入偏见?

这不是一个纯技术问题,也是一个社会问题。


14.2 去重的细节:怎么找出"差不多"的文档?

去重也是数据处理的重要一步。

精确去重很简单——算个哈希,相同的去掉就行。

但更重要的是模糊去重——找出"差不多一样"的文档。

为什么?因为很多内容是"洗稿"的:

  • 改几个词
  • 改个顺序
  • 改个格式
  • 但内容本质上是一样的

这些重复的内容对模型没有帮助,还可能导致过拟合。

14.2.1 MinHash:给文档算"指纹"

最常用的模糊去重方法是 MinHash。

MinHash 是什么?简单说:

  • 给每个文档算一个"指纹"(签名)
  • 两个文档的指纹越像,内容就越像
  • 可以快速找出相似的文档

MinHash 的核心思想:

想象你有很多集合,你想快速知道两个集合有多像(Jaccard 相似度)。

MinHash 可以用很小的"签名"来近似集合的相似度。

怎么做到的?大致是这样:

  1. 选很多个随机哈希函数
  2. 对每个哈希函数,取集合中最小的哈希值
  3. 这些最小值组成的向量就是"签名"
  4. 两个签名相等的比例 ≈ Jaccard 相似度

💡 通俗理解: 想象你要比较两本书像不像。 你不用逐字对比,而是:

  • 随机选 100 个"位置"
  • 看每本书在这些位置上的词是什么
  • 如果两本书在很多位置上的词都一样 → 书很可能很像

MinHash 就是这个思路——用少量的"采样"来估计整体的相似度。

14.2.2 LSH:快速找相似的文档

有了 MinHash 签名,怎么快速找出相似的文档?

如果文档很多(比如几十亿),两两对比是不可能的——O(n²) 太慢了。

这时候需要 LSH(Locality-Sensitive Hashing,局部敏感哈希)。

LSH 的思想:

  • 把签名分成几段
  • 每一段相同的文档,放到同一个"桶"里
  • 只对比同一个桶里的文档

这样就不用两两对比了,只需要对比"可能相似"的文档。

💡 LSH 像什么? 就像图书馆的分类:

  • 所有书按主题分类
  • 你想找相似的书,只需要在同一个分类里找
  • 不用把所有书都看一遍

LSH 也是一样——把相似的文档"分到一组",只在组内对比。

14.2.3 去重的粒度

去重还有个问题:在什么粒度上去重?

  • 文档级:整个文档重复才去掉
  • 段落级:段落重复就去掉
  • 句子级:句子重复就去掉

粒度越细,去重越彻底,但也越容易把有用的内容去掉。

一般来说,文档级去重是标配,段落级和句子级看情况。

⚠️ 注意:去重也不能太狠。 有些内容重复是正常的——比如常见的短语、公式、代码片段。 如果把这些都去掉了,模型可能学不到基本的语言模式。

所以去重的程度也要权衡——不是越彻底越好。


14.3 数据混合:怎么搭配才最好?

数据处理的最后一步是混合——把不同来源的数据按比例混在一起。

为什么要混合?因为不同来源的数据有不同的"营养":

  • Common Crawl:量大,知识面广,但质量一般
  • Wikipedia:量小,质量高,知识准确
  • 代码:量小,但能增强推理能力
  • 书籍:量小,但内容深入

就像吃饭——不能只吃一种食物,要营养均衡。

14.3.1 混合比例怎么定?

问题来了:混合比例怎么定?多少 Common Crawl,多少 Wikipedia,多少代码?

这是个很重要的问题——比例调好了,模型效果能提升不少。

怎么找最优比例?

方法一:经验和直觉

  • 看看别人的模型是怎么混的
  • 跟着抄作业

简单,但不一定最优。

方法二:小模型实验

  • 在小模型上试不同的比例
  • 看哪个比例效果最好
  • 用到大模型上

更科学,但需要做实验。

方法三:缩放定律

  • 用缩放定律来预测最优比例
  • 不同数据源有不同的缩放指数
  • 根据缩放指数来算最优比例

最"高级",但也最复杂。

💡 数据混合的艺术: 数据混合就像做菜:

  • 主料(Common Crawl)要多
  • 配料(Wikipedia、代码)要适量
  • 调料(高质量数据)要少但精

比例不对,菜就不好吃。

但什么比例是"对"的?没有标准答案,要根据你的目标来调。

14.3.2 课程学习:数据的顺序

除了混合比例,还有一个问题:数据的顺序。

是所有数据混在一起训,还是先训一种,再训另一种?

这就是课程学习(Curriculum Learning)的问题——由易到难,循序渐进。

比如:

  • 先训简单的、通用的数据
  • 再训难的、专业的数据

就像学生学习——先学基础,再学专业。

课程学习有没有用?研究结果不太一致——有时候有用,有时候没用。

但在实践中,很多模型确实是分阶段训练的:

  • 预训练:大量通用数据
  • 中期训练:更多高质量数据
  • 后训练:指令和对话数据

这其实就是一种课程学习——从通用到专业,从简单到复杂。


14.4 后训练数据:合成数据的兴起

前面讲的都是预训练数据。后训练(SFT、RLHF)的数据呢?

后训练数据有个特点:量小,但质量要求高。

因为后训练是"精调"——数据不好,模型就会被带偏。

14.4.1 后训练数据从哪来?

后训练数据的来源:

1. 人工标注

  • 找人写指令和回答
  • 质量高,但贵
  • 比如 InstructGPT 就是人工标注的

2. 真实用户数据

  • 从真实用户的对话中收集
  • 量大,质量参差不齐
  • 需要过滤和清洗

3. 合成数据

  • 用大模型自己生成
  • 量大,成本低
  • 质量取决于生成模型

现在合成数据用得越来越多了——因为人工标注太贵了。

14.4.2 合成数据有用吗?

合成数据有用吗?这是个热门话题。

优点:

  • 成本低,可以生成大量数据
  • 可以控制内容和风格
  • 可以生成各种场景的数据

缺点:

  • 质量不如人工标注的
  • 可能有"模型坍缩"的问题——模型学自己的输出,越来越差
  • 可能有偏见和错误

目前的共识是:合成数据有用,但不能全用合成数据——要和真实数据搭配着用。

💡 合成数据像什么? 就像教辅材料:

  • 真实数据 = 课本(权威但有限)
  • 合成数据 = 教辅(量大但质量参差不齐)

只看课本不够,只看教辅也不行。 要搭配着来——课本打基础,教辅做练习。

14.4.3 合成数据的技巧

怎么让合成数据更有用?有一些技巧:

1. 多样性

  • 生成多样化的数据,不要都一个样
  • 多样性越高,效果越好

2. 过滤

  • 生成之后过滤一遍,把不好的去掉
  • 用另一个模型来打分、筛选

3. 迭代

  • 用模型生成数据 → 训练新模型 → 再生成数据
  • 但要小心"模型坍缩"

4. 混合

  • 合成数据和真实数据混合着用
  • 不要全用合成数据

合成数据是个很有前景的方向——如果能解决质量问题,那数据就不是瓶颈了。


14.5 数据工程的经验总结

最后,我们来总结一下数据工程的一些经验。

14.5.1 数据 > 架构 > 算力

很多人以为大模型的核心是架构和算力。

但实际上,数据的影响最大:

  • 数据做好了,普通架构也能出好效果
  • 数据做不好,再好的架构也没用
  • 算力只是基础,不是决定因素

所以做模型的时候,要把最多的精力放在数据上。

14.5.2 质量 > 数量

数据是越多越好吗?不一定。

质量比数量更重要:

  • 100B 高质量数据 > 1T 低质量数据
  • 去重、过滤之后,数据量少了,但效果可能更好

所以不要一味追求数据量,先把质量提上去。

14.5.3 数据是迭代的

数据工程不是一次性的——是不断迭代的。

  • 第一版数据 → 训模型 → 发现问题
  • 改进数据 → 再训 → 再发现问题
  • 不断循环

好的数据都是"打磨"出来的,不是一蹴而就的。

14.5.4 多看数据

最后一个经验:多看数据。

不要只看指标,要亲自去看数据长什么样。

  • 好的数据长什么样?
  • 坏的数据长什么样?
  • 过滤掉的都是什么?
  • 保留的都是什么?

只有亲自看了数据,你才能真正理解模型的行为。

💡 数据工程的"手感": 数据工程是个"手艺活"——需要经验,需要"手感"。

什么是"手感"?就是看到数据,就知道好不好、有没有用、问题在哪。

这种手感只能靠多看、多做、多试来培养。 没有捷径。


14.6 本讲小结

这一讲我们深入学习了数据处理的细节:

过滤的细节

  • 一般框架:定义好数据 → 训练评分函数 → 筛选
  • 语言识别:找对语言
  • 质量过滤:找高质量文本
  • 毒性过滤:去掉坏内容

去重的细节

  • MinHash:给文档算"指纹"
  • LSH:快速找相似的文档
  • 去重的粒度:文档级、段落级、句子级

数据混合

  • 混合比例怎么定:经验、小模型实验、缩放定律
  • 课程学习:数据的顺序,由易到难

后训练数据

  • 来源:人工标注、真实用户数据、合成数据
  • 合成数据:有用但有局限,要和真实数据搭配

数据工程经验

  • 数据 > 架构 > 算力
  • 质量 > 数量
  • 数据是迭代的
  • 多看数据,培养"手感"

14.7 小白常见问题 Q&A

Q1:数据处理需要写很多代码吗?

A:是的,数据工程是个工程活,需要写很多代码。

但也有很多开源工具可以用:

  • 语言识别:fastText
  • HTML 转文本:trafilatura、resiliparse
  • 去重:datasketch(MinHash + LSH)
  • 数据处理:Hugging Face Datasets、Spark 等

不用从零开始写,但还是需要很多定制化的工作。

Q2:做数据处理需要什么技能?

A:几个方面:

  1. 编程:Python、SQL 等
  2. 数据处理:大数据处理框架(Spark 等)
  3. 机器学习:分类器、语言模型等
  4. 领域知识:知道什么数据好、什么数据坏
  5. 耐心和细心:数据处理很繁琐,需要耐心

Q3:数据工程的职业发展怎么样?

A:非常好!

现在大模型公司最缺的就是数据工程师——因为数据太重要了,而且好的数据工程师很少。

如果你对数据感兴趣,这是个很好的方向。

Q4:我想自己做一个小模型,数据从哪来?

A:几个选择:

  1. 直接用开源数据集:比如 The Pile、Dolma、FineWeb 等
  2. 自己爬:爬一些特定网站的数据
  3. 合成数据:用大模型生成

对于初学者,建议先用开源数据集——简单、质量有保证。


14.8 学习路线图

必须掌握:

  • 过滤的一般框架和主要类型
  • MinHash 和 LSH 的基本思想
  • 数据混合的重要性
  • 合成数据的优缺点
  • 数据工程的核心经验

了解即可:

  • MinHash 的数学细节
  • 各种过滤算法的具体实现
  • 各种数据处理工具的使用
  • 合成数据的各种技巧

配合作业:

  • 作业 4(Data)就是做数据处理,可以动手实践
  • 下一模块是对齐与多模态,可以接着看

模块小结:数据与评估(L12-L14)

这三讲我们学了大模型的"数据与评估"——怎么衡量模型,怎么准备数据。

评估(L12)

  • 评估的核心挑战:抽象概念 → 具体指标
  • Perplexity:最经典的指标,但有局限
  • 考试基准:MMLU、MMLU-Pro、GPQA、HLE
  • 其他基准:聊天、Agent、推理、安全
  • 评估的坑:现实性、有效性、数据污染
  • 正确态度:评估是工具,不是真理

数据 I(L13)

  • 数据是决定模型上限的关键
  • 训练三阶段:预训练、中期训练、后训练
  • 数据来源:Common Crawl、Wikipedia、GitHub、ArXiv
  • 数据处理流水线:转换、过滤、去重、混合
  • 历史数据集:从 BERT 到 Dolma、DCLM
  • 法律和伦理:版权、隐私、偏见

数据 II(L14)

  • 过滤的细节:语言识别、质量过滤、毒性过滤
  • 去重的细节:MinHash、LSH
  • 数据混合:比例、课程学习
  • 后训练数据:合成数据的兴起
  • 数据工程经验:数据 > 架构 > 算力,质量 > 数量

核心思想

  • 数据是核心竞争力,比架构更重要
  • 评估是尺子,但尺子本身也有误差
  • 质量比数量重要
  • 数据工程是手艺活,需要经验和手感

整个数据与评估模块到这里就结束了。

下一模块是对齐与多模态(L15-L17),我们会学习怎么让模型更听话、更安全,以及多模态模型——这些是大模型应用的关键。



CS336 学习笔记 04:模型评估与训练数据
https://cdro.tech/notes/CS/cs336-04-l12-l14-model-evaluation-training-data/
作者
k9Q6CK42
发布于
2026年9月28日
更新于
2026年9月28日
许可协议