CS336 学习笔记 04:模型评估与训练数据
本文最后更新于 2026年9月28日 晚上
CS336 入门辅助学习文档 - 数据与评估模块
写在前面:这三讲学什么?
这三讲属于课程的第四大模块——数据与评估。
为什么要学这个?因为做大模型,光会训模型还不够: - 怎么判断模型好不好? → 这就是评估(L12) - 训练数据从哪来?怎么处理? → 这就是数据(L13、L14)
很多人以为大模型的核心是架构和算法,但实际上,数据才是决定模型上限的关键。
同样的架构,用不同的数据训练,效果天差地别。
💡 为什么数据和评估这么重要? - 架构大家都差不多(都是 Transformer) - 系统优化也有成熟方案 - 真正拉开差距的,是数据的质量和数量 - 而评估,就是衡量模型好坏的"尺子"
没有好的评估,你就不知道模型好不好;没有好的数据,模型就不可能好。
第十二讲:评估 — 怎么判断模型好不好?
12.0 前置知识:为什么评估很难?
你可能会想:评估模型有什么难的?出几道题考考它不就行了?
没那么简单。
评估的核心挑战:我们想衡量的是一个抽象的概念(比如"智能"、"能力"),但我们只能测具体的指标(比如考试分数)。
这就像: - 你想知道一个人聪不聪明(抽象概念) - 但你只能给他做智商测试题(具体指标) - 智商测试分数高,一定代表聪明吗?不一定
模型评估也是一样: - 你想知道模型"好不好" - 但你只能测它在某些基准上的分数 - 基准分数高,一定代表模型好吗?不一定
💡 生活类比: 评估就像考试: - 考试分数高 = 学习好?不一定,可能只是会考试 - 基准分数高 = 模型好?不一定,可能只是会刷榜
但我们又不能没有考试——总得有个衡量标准。 所以评估是一门艺术,也是一门科学。
评估的维度:
一个模型"好不好",取决于你关心什么: - 能力:会不会做题、会不会写代码 - 效率:快不快、贵不贵 - 安全:会不会说坏话、会不会做坏事 - 用户体验:人喜不喜欢用
不同的场景,关注的点不一样。
12.1 Perplexity:最古老的评估指标
最经典、最古老的评估指标叫 Perplexity(困惑度)。
12.1.1 什么是 Perplexity?
回忆一下,语言模型本质上是一个概率分布——给定前面的词,预测下一个词的概率。
Perplexity 衡量的是:模型对测试数据的"困惑"程度。
- 模型越确定(概率高)→ 困惑度越低 → 越好
- 模型越不确定(概率低)→ 困惑度越高 → 越差
公式是这样的:
1 | |
其中 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. 生成模型(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),我们会学习怎么让模型更听话、更安全,以及多模态模型——这些是大模型应用的关键。