公司动态

Crawl4LLM 效果实测:相比随机与入链爬虫,高质量优先赢在哪?

📅 2026/8/21 15:32:27
Crawl4LLM 效果实测:相比随机与入链爬虫,高质量优先赢在哪?
Crawl4LLM 效果实测相比随机与入链爬虫高质量优先赢在哪【免费下载链接】Crawl4LLMOfficial repository for Craw4LLM: Efficient Web Crawling for LLM Pretraining项目地址: https://gitcode.com/gh_mirrors/cr/Crawl4LLMCrawl4LLM 是一款面向 LLM 预训练的高效网页爬虫工具它的核心思路是高质量优先不再盲目抓取而是用质量评分引导爬取路径。相比传统的随机爬虫和入链爬虫它究竟赢在哪里本文结合官方源码与论文结论为你做一次通俗易懂的效果实测解读。为什么 LLM 预训练需要高质量优先的网页爬虫大模型预训练的数据量动辄数十亿 token但这些数据并非越多越好。研究发现混入大量低质量、重复、无关的网页反而会拖累模型表现。于是问题变成如何在有限的抓取预算内拿到尽可能多的高质量文档传统方案主要有两种随机爬虫Random Crawler从种子页面出发随机选择出链抓到什么算什么完全不看内容质量。入链爬虫Indegree-based Crawler按被多少页面链接排序优先抓被引用最多的页面。它假设人气高质量高但热门页并不等于适合训练的干净文本。Crawl4LLM 则把答案改成了先评分再决定抓谁这就是它所说的高质量优先策略。三种爬虫的真实差异从抓得多到抓得好在 crawler.py 中Crawl4LLM 用一个优先队列heapq维护待抓取文档队列的排序依据就是每条文档的质量分数——分数最高的一批文档会被优先弹出、优先抓取。三种策略的区别只在评分器Rater上策略评分器评分依据需要读正文随机爬虫RandomRater随机数否入链爬虫InlinkCountRater入链数量否Crawl4LLMFasttextRaterDCLM fastText 模型打分是其中FasttextRater的实现位于 document_rater.py它用预训练的 fastText 分类器判断一段文本属于高质量HQ还是低质量CC输出一个 0~1 的高质量概率。分数越高越优先抓取。效果实测高质量优先赢在哪根据论文《Crawl4LLM: Efficient Web Crawling for LLM Pretraining》的实验设置三种爬虫在 ClueWeb22 数据集上以**相同的种子页面、相同的文档预算例如 2000 万篇**分别爬取再用爬到的数据做预训练对比。结论可以概括为三点1. 高质量文档占比碾压式领先 在相同预算下质量优先爬虫爬到的文档中高质量比例远高于随机爬虫与入链爬虫。换句话说花同样的时间抓取它给你的可训练语料更多浪费在垃圾页上的预算更少。2. 入链不是质量的代名词 入链多的页面往往来自导航页、目录页、社交聚合页正文可能只是一句摘要。而 fastText 评分直接作用在正文上能精准避开这类人气高但没内容的页面。3. 预训练效果提升明显 在相同 token 预算下用质量优先爬虫的数据训练的模型在 MMLU 等常见评测基准上表现更好。尤其是当抓取预算紧张时抓得精比抓得多更重要——这正是高质量优先策略的核心价值。如何亲手复现一次效果实测想亲自验证仓库结构很清晰跟着下面四步走即可。第一步准备环境与数据申请 ClueWeb22 数据集注意README 建议把数据放在SSD上爬虫读取会快很多准备 Python 3.10 环境安装numpy、tqdm、fasttext、pyyaml、wandb下载 DCLM fastText 分类器模型到fasttext_scorers/目录克隆代码git clone https://gitcode.com/gh_mirrors/cr/Crawl4LLM。种子文档列表可以直接用仓库自带的 seed.txt里面是 10000 个 ClueWeb22 文档 ID三种爬虫共用同一份种子保证对比公平。第二步编写三种策略的配置文件在configs/下分别创建三个 yaml 文件核心区别只有selection_method和rating_methods随机爬虫selection_method: random_score评分器只配RandomRater入链爬虫selection_method: inlink_count评分器配InlinkCountRater质量优先爬虫selection_method: dclm_fasttext_score评分器配length文档长度和fasttext_score两个最终排序由dclm_fasttext_score决定。配置示例可参考 README.md里面三种配置都给了完整模板。第三步启动模拟爬取python crawl.py crawl --config configs/你的配置.yaml主循环逻辑在 crawl.py每轮从优先队列弹出 1 万篇文档 → 记录 ID → 找出它们的出链 → 给新文档打分 → 推回队列直到累计爬满max_num_docs默认可设 2000 万。爬取过程支持断点续跑save_state_every也会把每轮进度实时记录到 wandb见 wandb_logger.py。第四步取出正文并做预训练评估爬虫输出的是文档 ID 列表运行 fetch_docs.py 即可批量拉取正文python fetch_docs.py --cw22_root_path 数据路径 --input_dir 文档ID目录 --output_dir 正文目录 --num_workers 16拿到正文后用 DCLM 框架做预训练与评测。另外仓库还提供了 access_data.py 用于查看单篇文档及其出链方便你抽查爬取质量utils.py 里的eval_and_plot还能绘制不同评分器之间的相关性矩阵输出correlations.png帮你直观理解各策略的评分差异。小结高质量优先是 LLM 爬虫的必然方向回到标题的问题相比随机与入链爬虫Crawl4LLM 的高质量优先策略到底赢在哪答案很清晰——赢在效率同样的抓取预算高质量文档占比显著更高赢在质量评分直接作用于正文而不是人气这类间接信号赢在效果预训练评测中质量优先的数据带来更好的下游表现。对于任何想自建高质量预训练语料的团队来说Crawl4LLM 的先评分、后抓取思路都极具参考价值。如果你正准备做大规模数据采集不妨克隆仓库亲手跑一轮对比实验用数据验证高质量优先的威力。【免费下载链接】Crawl4LLMOfficial repository for Craw4LLM: Efficient Web Crawling for LLM Pretraining项目地址: https://gitcode.com/gh_mirrors/cr/Crawl4LLM创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考