ARTICLE · INTELLIGENCE

战地情报 · 详情页

来自尧图项目组的一线实战观察与深度解析

Crawl4LLM 数据导出教程:fetch_docs 批量获取文档原文

Crawl4LLM 数据导出教程:fetch_docs 批量获取文档原文 Crawl4LLM 数据导出教程fetch_docs 批量获取文档原文【免费下载链接】Crawl4LLMOfficial repository for Craw4LLM: Efficient Web Crawling for LLM Pretraining项目地址: https://gitcode.com/gh_mirrors/cr/Crawl4LLMCrawl4LLM 是专为 LLM 预训练设计的高效网页爬取工具而fetch_docs 数据导出正是爬取流程的最后一公里——它能把爬虫挑选出的海量文档 ID 一键转换为可直接用于预训练的文档原文。本文是面向初学者的Crawl4LLM 数据导出教程手把手带你用 fetch_docs 批量获取文档原文从环境准备到多进程加速一次讲透。Crawl4LLM 是什么为什么要做数据导出Crawl4LLM对应论文Crawl4LLM: Efficient Web Crawling for LLM Pretraining的核心思路是与其盲目爬取整个互联网不如用一套智能评分机制从 ClueWeb22 大型网页语料库中高效筛选出对 LLM 预训练最有价值的文档。整个流程分两步爬取阶段运行 crawl.py 配合配置文件模拟真实爬虫输出一批被选中的文档 ID 文件.txt每行一个 ID。导出阶段用 fetch_docs.py 把这些 ID 从 ClueWeb22 语料库中还原成干净的正文文本.jsonl供 DCLM 等框架做预训练。简单说爬虫负责选文档fetch_docs 负责取文档。没有这步导出你手里就只是一堆看不懂的 ID 编号。前置准备三样东西缺一不可 ✅开始之前请确保你准备好了准备项说明ClueWeb22 数据集需先在官网申请获取并解压到本地建议放在SSD上读取更快Python 环境Python ≥ 3.10安装numpy、tqdm、fasttext、pyyaml、wandb等依赖爬虫输出运行爬虫后生成的文档 ID 目录每目录下有多个.txt文件如果你还没有仓库代码可以这样获取git clone https://gitcode.com/gh_mirrors/cr/Crawl4LLMfetch_docs 核心原理一文看懂工作流程 先别急着敲命令花 1 分钟理解它的工作方式排错时你会感谢自己。核心逻辑都在 fetch_docs.py 的fetch函数里遍历输入目录下的所有.txt文件见 fetch_docs.py每个文件逐行读取文档 ID例如clueweb22-en0041-36-03476调用 corpus_interface.py 中的ClueWeb22Api.get_clean_text()根据 ID 自动定位语料库文件、解压并取出干净的正文文本把同一文件的所有文档正文逐行写入同名.jsonl文件文件内每行一个 JSON 文本。底层的数据定位逻辑在 corpus_interface.py文档 ID 的每一段都藏着路径线索语言、分段、目录配合.offset偏移文件可以精确跳转读取非常高效。快速配置方法4 个参数一次讲清 ⚙️fetch_docs.py的命令行参数非常少新手也能 5 分钟上手参数是否必填作用--cw22_root_path✅ 必填ClueWeb22 数据集的根目录路径--input_dir✅ 必填存放文档 ID 的目录爬虫输出--output_dir❌ 可选输出目录不填则默认为{input_dir}_docs--num_workers❌ 可选并行进程数默认 1机器好就调大有两个小细节值得注意输出目录已存在时会直接报错退出fetch_docs.py这是防止误覆盖的安全设计换个目录名即可默认输出目录会自动在输入目录名后面加_docs后缀fetch_docs.py例如输入doc_ids则输出doc_ids_docs。一键操作步骤三步批量导出文档原文 第 1 步确认输入目录格式进入爬虫输出目录确认里面是多个.txt文件且每行一个文档 ID格式类似clueweb22-en0041-36-03476。项目自带的 seed.txt 就是标准范例你可以先拿它做测试。第 2 步运行数据导出命令最简单的用法单进程python fetch_docs.py --cw22_root_path /data/clueweb22 --input_dir crawl_results/seed_10k_crawl_20m_dclm_fasttext运行后屏幕会先打印Number of files: N告诉你一共处理多少个 ID 文件然后出现进度条。第 3 步检查导出结果到输出目录查看你会看到每个输入.txt都对应生成了一个.jsonl文件里面是清洗后的正文文本可以直接交给 DCLM 框架进行 LLM 预训练与评测。提效技巧多进程并行导出的正确姿势 ⚡文档数量动辄百万级单进程导出会很慢。多进程并行导出是最立竿见影的加速手段——只需加上--num_workers参数python fetch_docs.py \ --cw22_root_path /data/clueweb22 \ --input_dir crawl_results/seed_10k_crawl_20m_dclm_fasttext \ --output_dir doc_texts \ --num_workers 16几个实用的提速建议按 CPU 核数设置--num_workers一般设为物理核数或略低每个 worker 独立处理一个.txt文件文件越均衡并行效率越高输出目录别和输入目录放在同一处避免读写竞争。常见问题排查遇到报错别慌 ️现象原因与解决办法Output path xxx already exists!输出目录已存在换个新的--output_dir即可部分文档导出为空个别文档在语料库中缺失属正常现象脚本会跳过空内容fetch_docs.py读取速度很慢确认 ClueWeb22 数据是否放在 SSD 上这是官方明确建议想单独验证某个文档用 access_data.py 直接按 ID 打印单个文档及出链适合排查数据问题数据导出之后衔接 LLM 预训练 拿到.jsonl文档原文后就进入了预训练数据管线的下一环可以借助 DCLM 框架进行数据清洗、去重与分词最终用于训练你的 LLM。Crawl4LLM 的整个设计就是爬取—导出—训练的完整闭环而 fetch_docs 正是打通爬取与训练的关键桥梁。结语 ✨至此你已经掌握了Crawl4LLM 数据导出的完整流程理解了 fetch_docs 的工作原理、学会了 4 个核心参数的配置方法、跑通了多进程批量导出也知道了常见问题的排查思路。从爬虫产出的文档 ID到可供训练的文档原文只需一条命令的距离。快去用 seed.txt 试试你的第一条导出命令吧【免费下载链接】Crawl4LLMOfficial repository for Craw4LLM: Efficient Web Crawling for LLM Pretraining项目地址: https://gitcode.com/gh_mirrors/cr/Crawl4LLM创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
RELATED READING

延伸阅读

更多一线实战笔记与深度复盘,助您持续精进