Dolma:3 万亿 token 语料库与它的清洗工具链
Data and tools for generating and inspecting OLMo pre-training data.
秒懂
- 它是什么?
- allenai/dolma 同时指一份 ODC-BY 授权的 3 万亿 token 预训练语料,以及一套用 Python 编写、带 Rust 布隆过滤器的数据策展工具。本文拆开这两层,说清它解决什么问题、流水线怎么搭、以及在什么情况下它并不合适。
- 适合谁用?
- 如果你要复现 OLMo 一类的开源预训练流程,或者需要一套带 Gopher、C4、OpenWebText 现成 tagger 的清洗管线,Dolma 是少数把数据与工具一起公开的项目,值得先跑通 pip install dolma 再决定是否接入自己的语料。如果你的语料只有几 GB、且不需要跨文档去重,引入这套工具链的收益有限,直接用 pandas 或单机脚本更省事。
- 能商用吗?
- 可以。Apache-2.0 是宽松许可证:你可以使用、修改并销售基于它的软件,只需保留版权和许可证声明。
- 还在维护吗?
- 在维护。仓库最近一次提交在 22 天前。
- 用什么语言写的?
- 主要是 Python(依据 GitHub 的语言统计)。
以上回答依据项目的 GitHub 数据(最近同步于 2026年9月15日)和我们的分析,不构成法律意见。
开源项目深度解析
两份东西共用一个名字:数据集与工具链
README 开门见山地把 Dolma 拆成两件事。第一是 Dolma Dataset,一份 3 万亿 token 的开放语料,来源覆盖网页内容、学术出版物、代码、书籍和百科类材料,最初是为 AI2 的语言模型 OLMo 准备训练语料而建。第二是 Dolma Toolkit,也就是这个仓库里的源码,用来策展面向语言建模的数据集。很多人第一次看到 allenai/dolma 会以为它只是一个数据集下载地址,实际上代码仓库对应的是后者,数据集本身托管在 HuggingFace Hub 的 allenai/dolma 下。这个区分在动手前很重要:你要的是语料,就去 HuggingFace;你要的是清洗和过滤能力,才需要装这个包。两者授权也不同,数据集采用 ODC-BY,仓库代码采用 Apache-2.0,README 里还专门链接了一篇博客解释为什么数据集切到 ODC-BY。
它想解决的是预训练数据的可复现问题
预训练语料的构建过程长期是不透明的。论文里往往只写一句「我们用了 Common Crawl 加若干过滤」,具体过滤规则、阈值、去重粒度都不公开,别人无法复现,也无法判断某个下游能力的差异究竟来自模型结构还是数据。Dolma 的做法是把语料和生成语料的那套工具一起放出来。README 列出的内置 tagger 包括 Gopher、C4 和 OpenWebText,这三者都是已发表论文里描述过的过滤规则集合。把它们做成开箱可用的组件,意味着你可以拿同一套规则去处理自己的数据,也可以反过来检查别人声称的过滤到底做了什么。目标读者是训练语言模型的研究者和工程团队,尤其是需要向外部解释数据来源的那类项目。
tagger 加去重:管线里的两个核心环节
从 README 给出的功能列表可以还原出大致的数据流。文档把 tagger 描述为「ready-to-use」的组件,对应 Gopher、C4、OpenWebText 这些公开规则,作用是给文档打标签,也就是按规则判定保留还是丢弃。去重环节则明确写了实现方式:使用 Rust 编写的 Bloom filter,README 用「Speedy document deduplication」来描述它。这里有个值得注意的设计取舍。布隆过滤器是概率性结构,判断「这个文档之前出现过吗」时可能存在假阳性,也就是把没重复的文档误判为重复。项目选择它显然是为了在十亿级文档规模下把内存和速度压下来,代价是去重结果不是精确的。如果你的场景要求去重判定完全可解释,这一点需要提前想清楚。并行方面,README 说工具内置并行能力,可以并发处理十亿级文档,并且能在单机、集群或云环境运行。具体用的是什么并行框架、切分粒度如何,README 没有展开,需要去看 docs 目录下的文档。
安装只有一行,但配置项要看文档
README 给出的安装方式就是一行:pip install dolma。仓库默认分支是 main,最近一次推送时间在 2026 年 8 月,最新发布版本是 v1.2.1,发布于 2025 年 7 月,此前还有 v1.2.0 和 v1.1.2。生产环境建议锁定版本号而不是直接跟 main。README 没有在正文里列出具体的命令行参数和配置文件键名,只是把读者指向 docs 目录,因此本文无法给出未经核实的配置示例。可以确认的是云支持部分:README 写明支持 AWS S3 兼容的存储位置,如果你的数据在别的对象存储上,需要先确认兼容性。文档目录是获取准确用法的地方,包括 tagger 的调用方式和阈值设定。
去重是概率性的,扩展 tagger 要自己写
README 把「Extensibility」列为特性之一,说明支持自定义 tagger,但没有给出编写自定义 tagger 的接口说明,这部分同样要落到文档里。真正的限制来自前面提到的布隆过滤器。它适合回答「这份语料里有没有近似重复」,不适合回答「这两篇文档是不是同一篇」。当你的语料本身规模不大,或者重复判定需要精确到可以写进数据说明文档时,这个组件就成了障碍而不是助力。另一个边界是规模。README 强调的是十亿级文档的并发处理能力,这套设计的复杂度是为大数据量服务的。如果手上只有几百万条文本,引入一套带集群调度和云存储适配的管线,运维成本会超过它带来的收益。
和 datatrove 的差别在规则来源与去重实现
同类的开源数据清洗工具里,HuggingFace 的 datatrove 是常被拿来对比的一个。两者都做文档级过滤和去重,差别在于规则的归属。Dolma 内置的是 Gopher、C4、OpenWebText 这几套已经写进论文的规则,并且这份语料本身就是 OLMo 的训练数据,所以用它处理数据时,你得到的结果和一份公开模型的实际训练输入是对得上的。datatrove 更偏向提供一套通用的处理原语,让使用者自己拼装过滤步骤。去重实现上,Dolma 明确用 Rust 布隆过滤器,走的是近似判定的路子。选择哪一个,取决于你是想对齐某个已发布模型的数据配方,还是想要一套更自由的框架。这不是功能多少的问题,是目标不同。
维护节奏与许可边界
从发布记录看,v1.1.2 到 v1.2.0 间隔约三个半月,v1.2.0 到 v1.2.1 约一个月,仓库在 2026 年 8 月仍有提交,属于持续维护状态,没有归档。升级成本主要体现在版本间的行为变化上,由于 README 没有提供变更日志摘要,跨小版本升级前应当查阅对应 release 的说明。许可方面需要分开看:仓库代码是 Apache-2.0,允许商用和修改;数据集是 ODC-BY,要求署名。这两者不能混为一谈,用工具处理自己的数据不涉及数据集许可,分发 Dolma 数据集本身才涉及 ODC-BY 的署名义务。具体合规判断请咨询法务。
编辑结论
如果你要复现 OLMo 一类的开源预训练流程,或者需要一套带 Gopher、C4、OpenWebText 现成 tagger 的清洗管线,Dolma 是少数把数据与工具一起公开的项目,值得先跑通 pip install dolma 再决定是否接入自己的语料。如果你的语料只有几 GB、且不需要跨文档去重,引入这套工具链的收益有限,直接用 pandas 或单机脚本更省事。动手前先确认三件事:你要用的 tagger 在文档里是否给出了对应的阈值说明、你的存储后端是否在 AWS S3 兼容范围内、以及你是否接受 ODC-BY 对数据集分发的署名要求。许可条款的最终解释请咨询法务,本文不构成法律意见。
社区笔记