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日
许可协议