趋近智
虽然自行构建大规模网络爬虫或处理Common Crawl等原始档案能够提供最大程度的控制,但这需要大量的工程投入和基础设施。幸运的是,研究社群和各类组织已经整理并发布了许多大型文本数据集,这些数据集均采用开放许可,为获取预训练 (pre-training)数据提供了有用的捷径或补充。
使用这些现有数据集可以节省大量与抓取、初步清洗和格式化相关的时间和资源。它们通常附带详细说明其来源和预处理步骤的文档,不过仍需仔细核查。
在使用任何数据集之前,了解其许可条款非常重要。“开放”并非意味着“不受限制地免费用于任何用途”。许可规定了数据如何使用、修改和分发。常见例子包括:
务必仔细审查数据集及其各个组成部分所附带的特定许可。有些汇编数据混合了来自不同原始许可来源的数据。不遵守许可条款可能导致法律问题,尤其是在商业环境中。
几个大型文本语料库已成为LLM预训练 (pre-training)的标准资源。以下是一些著名例子:
The Pile: 由EleutherAI开发,The Pile是一个825 GiB的英文文本数据集,由22个不同的小型数据集汇编而成。其目的是创建一个广泛且多样的语料库,适用于通用语言模型。来源包含学术论文(PubMed Central、arXiv)、网络文本(Common Crawl子集)、书籍(Project Gutenberg、Books3)、代码(GitHub)、对话(Stack Exchange)等。虽然该汇编旨在采用宽松许可,但底层许可因来源而异,用户需要针对其具体用例检查合规性。
C4 (Colossal Cleaned Common Crawl): C4最初是为T5模型创建的,它来自Common Crawl网络档案。它经过了大量的筛选和清洗,包括删除样板文本、使用黑名单排除冒犯性语言、文档去重以及主要保留英文文本。生成的数据集约为750GB,并以ODC-By许可发布。它对清洗的侧重使其成为一个受欢迎的起点,尽管清洗过程本身可能会过滤掉某些有用的文本类型,或反映清洗启发式方法的偏见。
ROOTS (Responsible Open-science Open-collaboration Text Sources): 这个1.6TB的多语言语料库是为训练BLOOM模型而创建的。它汇集了来自59种语言的498个数据源。在文档化来源和许可方面投入了大量精力,以负责任的方式进行。它为训练多语言模型提供了宝贵的资源。
其他来源: 除了这些大型汇编,还有许多更小或更专业的开放数据集存在:
Hugging Face的datasets等库简化了访问和使用许多流行的开放数据集,包括The Pile、C4和ROOTS。该库处理下载、缓存、处理和流式传输,与PyTorch等深度学习 (deep learning)框架结合得很好。
以下是使用datasets加载和查看C4数据集一小部分的简单示例:
import torch
from datasets import load_dataset
# 以流式模式加载C4的“en”子集,以避免下载所有数据
# 注意:某些数据集可能需要通过Hugging Face Hub进行身份验证
try:
c4_dataset = load_dataset(
'allenai/c4',
'en',
split='train',
streaming=True
)
except Exception as e:
print(
f"加载数据集出错。您可能需要通过"
f"`huggingface-cli login`登录。错误:{e}"
)
# 适当处理错误,可能退出或使用备用方案
c4_dataset = None # 或某个占位符
if c4_dataset:
# 从流中获取一小部分样本
sample_size = 5
sampled_data = list(c4_dataset.take(sample_size))
print(f"从C4中抽取了{len(sampled_data)}个示例:")
for i, example in enumerate(sampled_data):
print(f"\n--- 示例 {i+1} ---")
print(f"URL: {example.get('url', 'N/A')}") # 使用.get以确保安全
# 打印文本的前300个字符
text_snippet = example.get('text', '')[:300]
print(f"文本片段: {text_snippet}...")
print(f"时间戳: {example.get('timestamp', 'N/A')}")
# 将小批量数据转换为PyTorch张量的示例(如果不是流式传输)
# 这需要下载数据,因此在大型数据集上使用时需谨慎
# 实际训练中,请使用流式传输或带torch转换的map函数
# try:
# c4_small_batch = load_dataset(
# 'allenai/c4',
# 'en',
# split='train[:10]'
# ) # 加载前10个示例
# c4_small_batch.set_format(
# type='torch',
# columns=['text_length']
# ) # 示例:格式化一列
# # 访问张量:tensors = c4_small_batch['text_length']
# except Exception as e:
# print(f"加载小批量出错: {e}")
对于多TB级别的数据集,强烈推荐使用streaming=True。它允许您迭代数据,而无需在本地下载和存储整个数据集,而是按需获取数据块。datasets库提供了强大的映射函数(.map()),可以在流式传输期间即时应用分词 (tokenization)和其他预处理步骤。
虽然方便,但使用现有数据集需要仔细考虑:
总而言之,开放许可数据集是LLM开发的重要资源。与从头开始相比,它们提供了大量文本数据,并可能降低工程开销。然而,负责任的使用需要仔细关注许可、数据质量、潜在偏见以及对预期应用的适用性。像Hugging Face的datasets这样的库使得访问和处理这些资源的实际操作变得更加容易。
这部分内容有帮助吗?
datasets库的完整指南和API参考,对于高效访问和处理用于LLM的开放数据集至关重要。© 2026 ApX Machine LearningAI伦理与透明度•