RedPajama-Data
开源大模型预训练数据处理管道,支持30T Token规模的多语言语料清洗与去重
加载项目详情…
本应用为开源项目,仅供学习研究,请遵守其开源协议。
开源大模型预训练数据处理管道,支持30T Token规模的多语言语料清洗与去重
加载项目详情…
本应用为开源项目,仅供学习研究,请遵守其开源协议。
想象这样一个场景:你需要训练一个能够理解 5 种语言的大语言模型,而摆在面前的是互联网上 84 个年份的网页抓取数据——这些数据混杂着广告、垃圾内容、重复文本,质量参差不齐。传统方法是招募大量外包人员进行人工清洗,而 RedPajama-Data 项目则用代码给出了完全不同的答案:让机器自动判断每一条数据是否值得被喂给大模型。
2023 年,Together AI 与 Meta(前 Facebook)先后开源了 RedPajama-1T 数据集,这是当时最大的开源大模型预训练数据集之一,共包含 1.2 万亿 token 的英文数据。这一数据集直接催生了大量开源大模型的训练,包括 Falcon、LLaMA(部分)等重量级模型。
然而,RedPajama-1T 仅覆盖英文内容,且数据质量控制手段相对简单。随着开源社区对多语言模型的强烈需求,Together AI 在 2023 年底推出了 RedPajama-V2,将数据规模扩展至 30 万亿 token,覆盖英语、德语、法语、西班牙语和意大利语五种语言。RedPajama-Data 仓库正是 V2 版本的数据处理管道代码——它不仅是一组脚本,更是一套经过大规模生产验证的数据工程框架。
RedPajama-Data 的数据处理流程被精心地分为三个阶段,每一阶段都有明确的目标和技术实现。
制品准备阶段是整个流水线的"地基",它决定了后续质量评估的准确性。该阶段的核心任务是构建两类制品:
质量分类器(Quality Classifiers):项目使用 FastText 轻量级分类器来识别高质量内容。分类器的训练数据来自 Wikipedia、StackExchange 等权威来源的正样本,以及已知低质量网站(如广告页面、钓鱼网站)的负样本。项目针对不同语言分别训练分类器,以适应各语言的内容特征。FastText 因其训练速度快、模型体积小而被选中,在处理数十亿文档时能保持可接受的计算开销。
去重哈希结构(Bloom Filter + MinHash):在大规模语料上去重是极具挑战性的问题。项目采用双重策略——内存友好的 Bloom Filter 用于精确匹配已知重复文档,而 MinHash LSH(局部敏感哈希)则用于近似重复检测,能够识别出仅存在少量编辑的近似重复内容。
制品准备阶段还包含多种数据下载器:WikipediaDownloader(通过 MediaWiki API 抓取词条)、OpenWebTextDownloader(复现 GPT-2 WebText 数据集构建过程)、BooksDownloader(从开放电子书库获取书籍内容)和 CCNetDownloader(从 CommonCrawl 索引中下载网页内容)。这些下载器都经过了异常处理和网络重试机制,能够在不稳定的网络环境下尽可能多地保留有效数据。
这是整个流水线中最具技术含量的部分。项目定义了 8 种质量信号(Quality Signals),从不同维度评估每个文档的质量:
每种质量信号都有对应的 Python 实现,位于 app/src/core/quality_signals/ 目录下。这些信号被设计为可独立计算、可并行执行,非常适合分布式处理场景。
去重阶段采用 MinHash LSH 算法,这是大规模近似重复检测的业界标准方案。相比精确哈希(如 SHA-1),MinHash 能够在 O(n) 时间复杂度内检测集合间的 Jaccard 相似度,且内存开销可控。
项目的 MinHash 实现参考了 datasketch 库,但为了减少外部依赖做了自行实现。核心实现位于 app/src/dedupe/minhash.py,关键参数包括:
去重还使用了 pybloomfiltermmap3 实现内存映射 Bloom Filter,用于快速排除精确重复的文档。结合 MinHash LSH 的近似重复检测,整个去重流程能够处理数十亿文档级别的数据量,同时保持合理的内存占用。
项目采用清晰的模块化架构:
app/src/artifacts/:数据制品生成(分类器训练、哈希结构构建)app/src/core/:核心数据处理逻辑(质量信号、去重)app/src/utilities/:I/O、日志、文本处理等基础设施app/src/dedupe/:去重专用模块每个质量信号作为独立的类实现,继承自 base.py 中的 BaseSignal 抽象基类。这种设计使得添加新的质量信号只需实现标准接口,无需修改其他代码。
数据处理天然适合并行化。项目使用 Python 的 ProcessPoolExecutor 实现多进程并行,充分利用多核 CPU。配置文件中的 INPUTS_PER_PROCESS=20 参数控制每个进程一次处理的文件数量,避免进程间通信开销过大。
app/src/pipeline.py 中的 monitor_progress() 函数实现了一个独立进程来实时汇总各 worker 的处理进度,并以结构化日志形式输出。这种"生产者-监控者"模式能够有效避免日志输出竞争,同时提供实时吞吐量数据。
项目依赖覆盖了数据处理的各个环节:
polars(极快的 DataFrame 库)、pyarrow(列式存储格式)、numpytransformers(Hugging Face)、fasttext(语言分类与质量分类)、datasets(Hugging Face datasets)s3fs + boto3(S3 访问)、pybloomfiltermmap3(Bloom Filter)nltk(自然语言工具包)、scrubadub(个人信息脱敏)、textstat(文本可读性分析)、mwparserfromhell(Wikipedia 文本解析)networkit(大规模图算法,用于 URL 去重)值得注意的是,项目刻意避免使用重型深度学习框架(PyTorch、TensorFlow),而选择轻量级工具来保证处理速度。这对于处理 PB 级数据的场景至关重要。
项目集成了 scrubadub 库进行个人信息脱敏,能够自动识别并移除文档中的:
这对于构建公开可用的训练数据集至关重要——大模型在训练时不应该记忆和复现个人信息,GDPR 等隐私法规也要求数据处理必须包含脱敏步骤。
RedPajama-V2 的数据来源包括:
项目配置文件中包含 DOMAIN_BLACKLIST_CATEGORIES,自动过滤成人内容、赌博、钓鱼等高风险类别。
尽管项目本身是开源数据处理工具,但仍存在潜在风险:
scrubadub 脱敏不保证 100% 准确,敏感个人信息仍有可能混入训练数据RedPajama-Data 更适合以下用户:
对于普通 AI 爱好者,直接使用 HuggingFace 上的 RedPajama-V2 数据集(togethercomputer/RedPajama-Data-V2)比运行本项目更加实际——无需关心数据处理细节,直接下载清洗后的数据即可用于模型训练。
项目提供了 Dockerfile,但数据处理管道的实际运行需要:
这些硬件要求对于个人开发者来说并不友好,但对于企业级数据工程团队而言是可以接受的。
RedPajama-Data 的意义远不止于提供一个数据集。它代表了一种趋势:开源社区正在从"模型开源"向"数据基础设施开源"演进。
在大模型时代,模型权重可以被轻易复制,但高质量数据的构建需要大量工程投入和领域知识积累。Together AI 选择开源整个数据处理管道,相当于把大模型训练中最核心的"秘密武器"公之于众。
从数据工程的角度看,RedPajama-Data 展示了一套可扩展的、经过生产验证的数据处理架构设计:模块化质量信号、分布式并行处理、多层级去重。这些设计决策对于构建任何大规模 NLP 数据管道都有重要参考价值。
如果用一句话总结:RedPajama-Data 是大模型时代数据工程的教科书级案例,适合作为构建高质量训练数据集的工程参考和起点。