# 第三章 预训练数据构建
## 3.1 数据类别及来源
大语言模型的预训练数据主要包含以下类别:
数据类型 |
常用数据来源 |
特点 |
网页数据 |
CommonCrawl、C4 |
规模大、多样性高,需严格清洗 |
书籍数据 |
BookCorpus、Books1/Books2 |
高质量长文本,增强长程依赖能力(受版权限制,获取困难) |
百科数据 |
维基百科、百度百科 |
权威性强,语言规范,常分配更高训练权重 |
代码数据 |
The Stack、GitHub |
提升代码生成能力,含注释和文档 |
其他数据 |
学术论文、新闻、多语言、垂直领域 |
增强领域专业性或多语言能力 |
3.1.1 网页数据
核心来源
- CommonCrawl:每月抓取约20TB原始数据,含菜单/乱码,需二次清洗。
- 开源衍生数据集:
- C4:基于CommonCrawl筛选,305GB高质量英文数据。
- RefinedWeb:6,000亿Token开源数据,用于训练Falcon模型。
处理挑战
- 需去除低质量内容(广告、乱码),保留正文文本(可用WET格式或自定义解析工具)。
3.1.2 书籍数据
典型数据集
- BookCorpus:开源书籍语料库。
- CBooks-150K:复旦大学开源中文书籍数据集,涵盖多领域。
价值
- 长文本连贯性提升模型长程依赖能力,但版权限制导致数据稀缺。
3.1.3 代码数据
数据构成
开源数据集
- The Stack:6TB代码数据,覆盖300+语言。
- StarCoder训练集:882GB(含783GB代码数据+GitHub Issues/提交信息)。
3.2 数据预处理流程
3.2.1 正文提取
- 网页数据:使用WET格式或工具(如jusText)解析HTML。
- 书籍数据:转换EPUB/MOBI为TXT,PDF需段落识别和格式修正。
3.2.2 质量过滤
规则过滤
- 格式统一(标点半角化、去除空白符)。
- 删除低质量文档(如符号占比过高、句子数<5)。
模型过滤
3.2.3 去重
类型 |
方法 |
应用案例 |
文档内去重 |
( n-gram )/段落匹配 |
MassiveText定义重复片段阈值 |
文档间去重 |
SimHash/MinHashLSH算法 |
RefinedWeb使用MinHash全局去重 |
3.2.4 数据集净化
- 数据脱敏:正则表达式过滤隐私信息(邮件、电话)。
- 测试集分离:删除与训练集13-gram重叠的数据(如GPT-3策略)。
3.3 常用数据集构建
3.3.1 C4
- 来源:CommonCrawl快照。
- 处理:删除非英文文本、低质量行(如Lorem Ipsum占位符)。
- 规模:305GB。
3.3.2 RefinedWeb
- 特点:激进清洗(删除87%原始数据),仅保留高质量网页文本。
- 效果:纯网页数据训练的模型性能优于混合数据集。
3.3.3 ROOTS(BLOOM训练集)
- 构成:46种语言,1.6TB(含CommonCrawl、GitHub代码)。
- 处理:
- SimHash去重(21.67%冗余)。
- 正则过滤隐私信息。
- 开源数据处理代码。
3.4 难点与挑战
3.4.1 数据收集局限性
- 高质量数据耗尽:预计2026年书籍/新闻等公共数据将枯竭(Hoffmann et al., 2022)。
3.4.2 质量评估挑战
- 主观性:依赖启发式规则(如符号单词比)。
- 自动化瓶颈:模型过滤易受训练数据偏差影响。
3.4.3 自动生成数据风险
附录:实用资源
数据集:
C4
The Stack
工具:
正文提取:traflatura
、jusText
去重:SimHash
、MinHashLSH