来自HuggingFace团队的质量非常高的一篇博客,主要介绍了FineWeb数据集是如何清洗出来的(代码开源),15T的FineWeb目前是开源预训练表现最优的数据集。如下图,知名网络数据集对比
除此之外,还制作了一个FineWeb-Edu数据集,FineWeb-Edu 基于最新的一种用于过滤 LLM 训练数据集的新方法:使用大模型合成数据训练用于识别educational quality的分类器。这项技术在 Llama 3 的训练中提到了。根据educational quality范围为1~5,根据阈值,开源了1.3T 和 5.4T 的数据集
博客地址以及开源仓库地址 :
https://huggingface.co/spaces/HuggingFaceFW/blogpost-fineweb-v1
https://github.com/huggingface/datatrove/blob/main/examples/fineweb.py
CommonCrawl 数据有两种主要格式:WARC 和 WET。 WARC(Web ARChive 格式)文件包含爬网的原始数据,包括完整页面 HTML 和请求元数据。 WET 文件提供这些网站的纯文本版本。
最新的 CommonCrawl,包含 27 亿个网页,总计 386 TiB 的未压缩 HTML 文本内容。自2023年到现在一共发布了96个文中称为dumps或者crawls。
大量的开源数据集都是使用 WET 文件。根据经验,Common Crawl 用于创建这些 WET 文件的默认文本提取对于 LLM 预训练 的目标来说并不是最佳选择,特别是它可能保留了太多的样式内容和导航菜单 。并且有各种开源库可以提供更好的文本提取。使用 trafilatura 库从 WARC 文件中提取文本内容 ,从结果的抽样来看,与其他文库相比,它提供了良好的提取质量。如下图所示
使用了RefinedWeb 的部分设置
- 使用阻止列表 URL 过滤来删除成人内容
- 使用fastText语言分类器,仅保留分数 ≥ 0.65 的英文文本
- 使用用 MassiveText 的质量和重复过滤器
为什么要进行重复数据删除?
网络有许多聚合网站、镜像、模板页面,导致很多相同的内容分布在不同域名下。有时,当不同的链接指向同一页面时,这些重复的页面甚至可以由爬虫本身引入。在论文《Deduplicating Training Data Makes Language Models Better》中提到,删除这些重复数据可以改进模型性能。并且,通过重复数据删除获得的性能提升可以等同于训练效率的提高:通过删除重复的内容,模型可以通过更少的训练迭代达到相同的性能水平 ,或者等效地,对于给定数量的训练数据,模型将看到数据更加多样化 。
重复数据删除参数
使用MinHash,这个算法可以有效地扩展到多 CPU 节点,并允许调整相似性阈值(通过控制存储桶的数量和大小)以及所考虑的子序列的长度(通过控制n-gram 大小)。
选择收集每个文档的 5gram, 最小单位是“单词”,总共使用 112 个哈希函数计算最小哈希值,分为 14 个桶,每个桶有 8 个 - 目标文档相似度至少为 75%。任何存储桶中具有相同 8 个 minhash 的文档都被视为彼此重复。
这意味着对于相似度为 0.7、0.75、0.8 和 0.85 的文档,它们被识别为重复项的概率分别为 56%、77%、92% 和 98.8% (1-(1 -s^8)^{14})。
相比于, RefinedWeb 的设置(具有 9000 个哈希函数,分为 450 个桶,每个桶有 20 个), RefinedWeb 的设置在接近阈值的时候,表现得会更陡峭,也就更有可能被识别出来,如下图。但是计算和存储消耗二者需要有一个权衡。
重复数据是删除的越多越好吗?
在96个数据集上,除了内部删除,整体上还使用minhash删除重复项,但是实验发现,效果没有改进
作为实验,使用了CommonCrawl最早的一个数据集2013-48
- 删除所有的重复数据,剩余31B tokens, 称为 (originally kept data)
- 数据集内删除,不考虑其他的数据集,保留了460B tokens,称为(originally removed data)
这个实验说明,在这个数据集上删除的更多,并不能获得更好的效果。人工目测发现,删除更多的数据,保留的数据包含比只进行数据集内删除的数据,有更多的广告、格式错误的文本。
数据集内重复数据删除
只进行每个数据集内的重复数据删除,进行随机样本进行训练时,它现在可以达到与RefinedWeb的性能
假设重复数据删除带来的主要改进是删除每个数据集中存在的非常大的重复集群 (在RefinedWeb 论文中有示例),但是进一步重复数据删除重复项数量较少的集群实际上会损害性能,在任何其他数据集中找不到重复匹配的数据实际上可能是质量更差/更不符合分布的 ,如上面2013-48的实验
其他的失败的全局重复删除策略
- URL deduplication:url重复删除(71.5% of tokens removed, 5.6T left)
- Line deduplication:删除重复行(77.8% of tokens dropped, 4.4T left)
- 与上面一致,但是仅删除至少 10 个单词的重复行,并删除重复数据删除后少于 3 个句子的文档(85% of tokens dropped, 2.9T left)
- 与上面一致,但是要满足连续 3 个重复行,在查找重复项时将每个数字视为 0(80.9% of tokens removed, 3.7T left)
如下图,均取得了负面的效果
上面的操作,已经达到了RefinedWeb,接下来目标是达到C4的性能。
C4过滤器
- drop lines not ending on punctuation marks 不以标点结束
- mentioning javascript and cookie notices 包含js cookie通知
- drop documents outside length thresholds 超长
- containing “lorem ipsum” or a curly bracket, {) 包含“lorem ipsum”
一堆的分析,然后得出了3个启发式过滤策略
- 删除以标点符号结尾的行占比少于0.12的文档,C4的阈值是30%
- 删除重复行中字符比例 ≥ 0.1 的文档
- 删除行少于30个字符占当前文档比例≥0.67的文档
当将三者一起使用时,约 22% 的tokens被删除
最终的FineWeb包含15T tokens数据,其中每个过滤步骤带来的效果对比。
“
NLP前沿交流群成立,详见置顶推文。进群加微:nipi64310
-END-
右下角,帮忙点点
+