预训练:让模型读完整个互联网的那一步,数据从哪来、怎么洗?

有一个问题,我每次用ChatGPT都会想:它到底读过什么?是读完了整个互联网吗?如果是,那互联网上的垃圾它又是怎么过滤掉的?后来我读了一些论文,才明白预训练阶段“让模型读完整个互联网”远不是想象的那么简单——数据从哪里来、怎么洗,直接决定了模型能有多聪明。

AI technology illustration

互联网的“脏”数据,比你想象的更脏

很多人以为,大模型预训练就是开个爬虫,把所有网页的文本抓下来塞给模型。事实是,如果你真这么干,训练出来的模型大概率只会说胡话、重复广告词,甚至生成一长串乱码。Common Crawl,这个每月爬取数十亿网页的公开数据集,是多数大模型的“主菜”,但它未经处理时,文本质量极低:大量HTML标签残留、重复内容、机器翻译文本、色情广告、个人隐私信息……

数据来源 典型代表 优点 缺点 清洗要点
Common Crawl C4, RefinedWeb, OSCAR 规模大、覆盖广 噪声极高、重复多 去重、语言过滤、质量过滤
维基百科 Wikipedia dumps 高质量、结构化 覆盖面窄、知识截止 少量去重、格式清洗
书籍 Books3, Gutenberg 长文本、文学性 版权争议、内容偏旧 去重、版权过滤
代码 GitHub 存档 提升代码能力 许可证问题、质量参差 过滤低质量仓库、去重
新闻、论坛 Reddit, 新闻语料 时效性强、对话感 偏见、噪声 清理短文本、去重

这些数据来源的比例,不同模型有不同配方。比如 LLaMA 论文LLaMA 论文 里,CommonCrawl 占 67%,GitHub 4.5%,Wikipedia 4.5%,Books 约 4.5%,其他来源如 ArXiv、StackExchange 等。而 GPT-3 主要用 Common Crawl(过滤后约 410B tokens),加上 WebText2、Books、Wikipedia 等。

从“垃圾堆”到“黄金语料”的清洗流水线

数据清洗不是一步到位,而是一套组合拳。我最早以为只要去掉HTML标签就行,后来发现远远不够。下面是典型的清洗步骤,我用一个真实场景来串:假如你从 Common Crawl 拿到 100TB 原始 WARC 文件,你要怎么做?

  1. HTML 提取与文本剥离:用工具如 trafilaturaScrapy 抽取出正文,去掉导航栏、广告、页脚。这一步就有坑:很多网页正文被切成小块,需要用启发式算法拼接。
  2. 语言过滤:用 fastText 等语言分类器识别主要语言,去掉非目标语言(比如你只想要英文,就扔掉其他)。但分类器会误判,比如把韩文机器翻译的英文当成英文,需要额外规则。
  3. 去重:不仅精确去重(相同字符串),还有模糊去重。用 MinHash 算法可以快速找出相似度高的文档对,比如一篇新闻被转载了 1000 次,只保留一份。谷歌的 Deduplicate-text-datasets 实现了这个。我踩过最大的坑就是去重不彻底,模型训练时反复看到同一段话,导致它偏见地认为这段话很重要。
  4. 质量过滤:这是最核心但最主观的一步。常用的方法有:
    • 困惑度过滤:用一个小语言模型(如 GPT-2)计算每段文本的困惑度,困惑度太高(像随机噪声)或太低(像模板)的文本都扔掉。
    • 分类器过滤:训练一个分类器来区分高质量文本(如 Wikipedia)和低质量文本(如广告),对 Common Crawl 每一页打分,然后设定阈值。GPT-3 论文GPT-3 就训练了一个二分类器,特征包括词频、句子长度等,与 Wikipedia 等高质量语料对比。
    • 启发式规则:比如扔掉包含大量“lorem ipsum”、javascript 代码、或因爬虫被封导致的重复文本。
  5. 个人信息脱敏:去除邮箱、电话号码、身份证号等。很多工具可以实现,但无法做到 100% 彻底。
  6. 最终审核与去毒:有些团队还会人工抽查,或者用毒性分类器过滤仇恨言论等。

每一步都会过滤掉大量数据。比如一开始的 Common Crawl 可能 100TB,经过清洗后只剩 10TB 可用。但换来的是模型质量的飞跃。

我踩过的坑:为什么语言过滤总会漏掉一些妖怪

有一次我用 Common Crawl 的中文数据训练一个 7B 模型,发现输出里经常出现 “www.xxx.com 点击领取优惠” 这样的广告语。我以为是去重没做好,后来排查发现,这些文本是 JavaScript 生成的内容,被 HTML 提取器当作正文抓了出来。解决办法是加了一层规则:过滤掉包含大量非中文字符或 URL 的段落。

另一个坑是多语言混杂。很多网页是双语对照,比如中文和英文混排,语言分类器可能判定为“en”,扔掉,但如果判定为“zh”保留,结果模型学到的中文里夹杂英文。这需要更精细的分句过滤,或者用多语言分类器给出概率,保留大概率的中文句子。

你可能会问的几个问题

数据越多越好吗?

不是。研究Scaling Data-Constrained Language Models 表明,在固定计算预算下,数据质量比数量更重要。重复的低质量数据会让模型过拟合,甚至降低性能。与其抓 10 倍垃圾数据,不如把已有数据洗得更干净。

为什么不用 ChatGPT 的对话数据来预训练?

预训练是无监督学习,目标是从海量无标注文本中学习语言模式。ChatGPT 的对话数据是“指令-回答”对,更适合用于微调(SFT)和 RLHF。直接混入预训练,模型会以对话格式生成,但不利于泛化。不过,现在有些模型如 LLaMA 3 已经开始在预训练中加入少量高质量对话数据。

数据清洗可以用 AI 自己做吗?

可以,而且已经这么做了。比如用 GPT-4 来评估文本质量,或者用嵌入模型聚类去重。但成本高,一般只用于最终筛选少量的高质量数据。

个人能复现这种清洗流程吗?

可以,但需要大量计算资源。你可以用 Hugging Face 的 datasets 库加载 C4 或 OSCAR 等现成数据集,它们已经清洗过了。如果你想自己从头清洗 Common Crawl,可以参考 cc_net 等开源工具。

不同模型的清洗哲学

各模型团队的数据清洗策略其实反映了他们对“什么是好数据”的理解。

模型 主要数据来源 清洗特色
GPT-3 Common Crawl (filtered), WebText2, Books, Wikipedia 训练分类器过滤,保留与高质量语料分布相似的文本;强去重
LLaMA CommonCrawl (CCNet 处理), C4, GitHub, Wikipedia, Books, ArXiv, StackExchange 使用 CCNet 的困惑度过滤,并配合 fastText 语言识别;对 GitHub 代码进行去重和许可证过滤
Falcon RefinedWeb (来自 Common Crawl) 强调大规模去重和严格的质量过滤,用大量启发式规则,宣称 RefinedWeb 是“最好的纯网页数据集”
The Pile 混合 22 个高质量子集 从学术来源精心挑选,每个子集都经过人工审查,去重使用 MinHash

你会发现,没有统一的“标准答案”。清洗流程是每个团队的核心竞争力之一,也是他们不愿公开太多细节的原因。

最终判断:数据清洗的边界在哪里?

当前数据清洗能做到的,是去除明显的噪声和重复,但无法完全消除数据中的偏见和错误。模型还是会学到互联网上的刻板印象、虚假信息。而且,清洗过程本身也会引入偏见——比如你如何定义“高质量文本”?这种定义本身就带有文化假设。

未来的趋势可能是:从“过滤”转向“合成”。用更强大的模型生成高质量数据,或者用动态数据选择策略如 DoReMi 来调整训练数据的混合比例。但无论如何,预训练阶段的数据源头和清洗,都不会是“随便抓一把”那么轻松。

理解了这些,你下次再看到“模型读了整个互联网”的说法,就能微微一笑:不是读,是精挑细选地读,像淘金一样从泥沙里筛出那一点点黄金。

原创文章,作者:guanweilu,如若转载,请注明出处:https://guanweilu.cn/article/37.html

(0)
上一篇 2026年8月13日 下午11:58
下一篇 2026年8月14日 上午12:12

相关推荐