2024年,HuggingFace 发布了一个数据集,名字叫 FineWeb。它不是什么前所未有的东西——语料来源是公开的 CommonCrawl,清洗流程也谈不上黑科技。但它把一件事做到了极致:把“怎么处理原始网页文本”从暗箱操作变成了可复现的工程。你可能会问,一个数据集而已,值得这么大动静吗?答案取决于一个数字:15 万亿 token。这是 FineWeb 的规模,相当于几十个 GPT-3 的训练数据量。而它的价值不仅仅在于大,更在于它证明了一件事——对于语言模型来说,清洗数据的质量,比你喂多少数据更重要。

你可能用过 GPT-4 或者 LLaMA,觉得它们天然就懂人类语言。但如果你看过它们背后的预训练数据长什么样,你会感叹模型能从这种数据里学出能力,简直是奇迹。而 FineWeb 就是人类第一次系统性地把这种“垃圾堆”变成“精炼矿”的完整记录。
CommonCrawl 是个垃圾场吗?
CommonCrawl 从 2008 年开始每个月抓取全网,至今已经积累了上百 PB 的原始网页数据。它的存在,让所有训练大模型的团队“起跑线相同”——反正大家都能免费下载原始数据。但问题是,原始数据根本不是给模型吃的。CommonCrawl 的数据以 WARC 格式存储,每个抓取到的页面包含了完整的 HTTP 响应:一个普通网页有导航栏、广告、评论区、友情链接、乱码字符……这些都混在你真正关心的正文里。
如果你直接把整个 HTML 扔给模型,它学到的将是“如何在网页中迷失”。所以几乎所有预训练数据集都要经过清洗。但不同团队的清洗流程千差万别,而且大多不透明。FineWeb 的野心是做一个公开、可复现、每一步都有消融实验支撑的清洗流程。
五步从垃圾堆里淘金
FineWeb 团队的流程大致可以拆成五步。每一步看起来都平平无奇,但他们在论文里给出了详细的消融实验,告诉你每个环节到底值多少分。
- URL 过滤:用黑名单把那些明显是垃圾或成人内容、网站 SEO 垃圾的域名先筛掉。这一步成本极低,但能砍掉不少“一眼假”的页面。
- 文本提取:用 trafilatura 之类的工具从 HTML 中提取真正的正文,去掉导航、广告、脚本残留。
- 语言识别:用 fastText 分类器判断每篇文档的语言,只保留目标语言(比如英文)。这一步防止模型学到多语言混杂的噪声。
- 去重:先去掉完全相同的行,再做 MinHash 相似去重,把“标题稍有改动、正文几乎一样”的重复文章识别出来。
- 质量过滤:用语言模型计算每篇文档的困惑度(perplexity),丢弃那些让模型“意外”的异常文本——通常是机器生成的、语法混乱的、或者刻意堆砌的垃圾内容。
这五步中,我个人最感兴趣的是去重。你有没有想过,互联网上的重复文本比你想象的恐怖得多?一条新闻稿可能被几百个网站转载,每个标题改几个字,正文一字不差。如果不做相似去重,模型会在训练时一遍又一遍地“背诵”同一篇文章,浪费大量算力,还会导致过度拟合。MinHash 的巧妙之处在于,它用一些随机哈希函数把每篇文档变成一串“指纹”,然后通过比较指纹的相似度来判断文档是否重复。这种方法不需要两两全文比对,就能在高维空间里高效找出“长得像”的文档。这步操作让 FineWeb 直接从原始数据中删掉了一大块冗余,但模型在基准测试上的表现反而更好——因为有效信息密度提升了。
关于 MinHash 的更深入理解(点击展开)
MinHash 的神奇之处在于,它把“集合相似度”转化为“最小哈希值相等的概率”。你只需要对每个文档抽样若干个“最小哈希值”,然后对比这些指纹集合的重叠比例,就能近似估算 Jaccard 相似度。在互联网规模的语料上,这是少数能跑得动的相似去重方案。
质量过滤:让 AI 给 AI 当裁判
去重之后,剩下的数据依然是良莠不齐的。有些网页内容虽无重复,却毫无信息量:一堆 SEO 堆砌的套话、自动生成的天气描述、翻译腔。FineWeb 用了一个很直观的思路:用语言模型自己来判断哪些文本“像人写的”。
具体做法是,用一个小型的 5-gram 语言模型(KenLM)计算每个文档的困惑度。如果一段文本让模型非常“意外”——也就是困惑度很高——那它大概率是乱码或者低级机器生成。反之,困惑度适中甚至偏低的文本,往往是平滑、连贯的人类写作。他们划了一条阈值,把困惑度异常的文档丢弃。
但这里有个陷阱:困惑度过滤天然偏爱“平庸”的文本,因为平庸的文本最容易预测。为了弥补这一点,FineWeb 团队还加了一个基于 fastText 的质量分类器,用来保留那些可能被认为有信息量但困惑度稍高的内容。你看,数据清洗不是一刀切,而是多道筛网配合。
FineWeb-Edu:一个用 AI 打分的数据集
FineWeb 发布后,HuggingFace 又放出了一个大招:FineWeb-Edu。它不再满足于“过滤垃圾”,而是直接从 FineWeb 里挑出“有教育价值”的文档。
怎么判断一个网页有没有教育价值?他们微调了一个 Llama-3-8B 模型作为评分器,输入一个网页的文本,输出 0 到 5 之间的分数。训练数据来自哪里?他们请人类标注员给几万个页面打了分,再让这些分数去教这个 AI 评分器。然后用这个评分器给整个 FineWeb 的文档打分,只保留得分最高的 5% 左右,最终得到约 1.3 万亿 token 的 FineWeb-Edu。
结果很有意思:在很多学术基准上,用 1.3T token 的 FineWeb-Edu 训练出来的小模型,性能可以逼近甚至超过用 15T token 的 FineWeb 训练出来的模型。也就是说,在数据量上做减法,在智能上做加法。这个结果让很多人重新思考“数据质量”与“数据量”的关系。
FineWeb-Edu 的做法也启发了后来很多模型:比如一些开源模型在预训练后期会刻意混入高质量教育数据,就是为了提升推理、数学、代码等能力。
一张表看清 FineWeb 和它的“前浪”们
在 FineWeb 之前,业内常用的公开数据集有 C4、The Pile、RefinedWeb 等。它们各自有不同的“洗法”。我整理了一张表,方便你对比:
| 数据集 | 来源 | 规模 | 关键特点 |
|---|---|---|---|
| C4 | CommonCrawl 快照 | 约 750GB,数百B token | 启发式过滤,清洗较粗糙 |
| The Pile | 多源混合 | 约 800GB,数百B token | 多样性高,噪声不少 |
| RefinedWeb | CommonCrawl | 约 2.8T token | 严格去重和质量过滤 |
| FineWeb | CommonCrawl 多快照 | 15T token | 系统化清洗+消融实验,公开完整管线 |
| FineWeb-Edu | FineWeb 子集 | 1.3T token | AI 评分筛选教育内容 |
这张表里最显眼的区别是FineWeb 把清洗过程当成科研项目来做。别的团队可能只是告诉你“我们过滤了什么”,FineWeb 则告诉你“过滤前后模型分数变化了什么”“如果去掉这一步会怎样”。这种透明度,在 LLM 领域非常稀缺。
我踩过的坑:从“去重就是删重复”到“去重是删相似”
我最早接触数据清洗时,以为所谓去重就是把完全相同的样本删掉。后来我发现这远远不够。有一次我用一个没做相似去重的语料训一个小模型,结果它在生成时会把一句话反复说三遍——因为训练数据里到处都是“换了个标题但内容一致”的新闻转发。那时我才意识到,真正可怕的不是“一模一样的重复”,而是“似是而非的重复”。
直到我理解了 MinHash,才想明白为什么 FineWeb 要花那么大力气做相似去重。互联网上的内容复制粘贴是常态,但人类会下意识地改几个字。MinHash 能抓住这种“换汤不换药”的相似度,把它掐死在摇篮里。这件事教会我的道理是:数据工程中的很多“小事”,在超大规模下都会变成“大事”。
关于 FineWeb,你可能还在纠结这几个问题
FineWeb 可以直接商用吗?许可上有没有坑?
FineWeb 数据集在 HuggingFace 数据集页面上发布,采用 ODC-By 许可(Open Data Commons Attribution License),允许自由使用和衍生,只需标注来源。但请注意,数据集本身是从 CommonCrawl 过滤来的,而 CommonCrawl 的原始数据遵守各自的网站版权。所以如果要做商业化,最好还是咨询法律团队。
为什么 FineWeb 只有英文?
FineWeb 的默认版本确实只针对英文。HuggingFace 后来发布了 FineWeb-2,覆盖更多语言。英文语料在互联网上最丰富,清洗流程也相对成熟,所以 FineWeb 首先作为英文标杆推出,这很合理。
FineWeb 和“长上下文窗口”有关系吗?
关系不大。上下文窗口的长度主要取决于分词器、位置编码和注意力机制,而不是预训练语料。但数据清洗会直接影响模型学到的句法和知识,从而影响它在长上下文任务上的表现。至少,一个被重复文本污染的模型,在长文本生成时更容易陷入重复循环。
FineWeb 的边界在哪里?
FineWeb 已经是开源社区的一盏灯塔,但它并不是终点。它的清洗流程基于网页的静态文本,而互联网上大量高价值内容藏在登录墙、动态渲染、视频和 PDF 背后,CommonCrawl 根本抓不到。另外,困惑度和质量分类器都有各自的偏见:过度依赖困惑度会偏向大众化、平庸的文本;而 FineWeb-Edu 里的“教育价值”也是由人类定义的,可能忽略某些领域的高价值内容。
我认为未来数据工程的方向不是“从更多垃圾里淘金”,而是用生成式模型主动制造高质量数据。FineWeb 证明了“清洗”能带来多大收益,而接下来的问题可能是“如果原始数据本身就不够好,我们能否通过合成数据来补足?”。
到了那个时候,我们回头看 FineWeb,它就像是 GPT 时代早期的“洗矿厂”——笨拙,但第一次让人们意识到,预训练模型的上限,在数据被清洗之前就已经被决定了。
原创文章,作者:guanweilu,如若转载,请注明出处:https://guanweilu.cn/article/1949.html