DataTrove:一款针对大规模文本数据的处理、过滤和消除重复数据工具

关于DataTrove

DataTrove是一款针对大规模文本数据的处理、过滤和消除重复数据工具,该工具可以通过提供一组平台无关的可定制管道处理块,帮助广大研究人员从各种复杂脚本中解放出来,同时还允许我们轻松添加自定义功能。

DataTrove所实现的数据处理管道与平台无关,可以在本地或slurm集群上运行。该工具因其较低的内存使用率和多步骤设计使其非常适合于大型工作负载,例如处理LLM的训练数据等场景。

除此之外,该工具还可以通过fsspec支持本地、远程和其他文件系统。

工具安装

由于该工具基于Python 3开发,因此我们首先需要在本地设备上安装并配置好Python 3环境。

pip安装

pip install datatrove[FLAVOUR]

可用的[FLAVOUR]如下(可以使用,同时安装多个,例如[processing,s3]):

1、all:安装所有组件

pip install datatrove[all]

2、io:读取warc/arc/wet文本

pip install datatrove[io]

3、processing:文本数据提取、过滤和处理

pip install datatrove[processing]

4、s3:S3支持

pip install datatrove[s3]

5、cli:命令行工具

pip install datatrove[cli]

源码获取

广大研究人员可以直接使用下列命令将该项目源码克隆至本地:

git clone https://github.com/huggingface/datatrove.git

工具样例

process_common_crawl_dump.py:完整的管道,可读取常见的warc文件,并提取文件内容,然后过滤并存储至S3;

tokenize_c4.py:直接将数据读取至tokenize;

minhash_deduplication.py:完整管道读取并消除重复数据;

sentence_deduplication.py:精确消除重复数据;

exact_substrings.py:ExactSubstr的运行样例;

工具使用

读取数据

一般来说,管道会以一个Reader块作为开始,大多数Reader需要接收一个data_folder参数,即包含了待读取数据的目录路径。

这些文件将分布在每个任务中。如果有N个任务,序号为i的任务(从0开始)将处理文件i、i+N、i+2N、i+3N,...

在内部,每个Reader在创建Document对象之前会读取数据并将其转换为字典。

下面给出的是常见的Reader参数选项:

text_key:包含了每个样本字符串内容的字典键,默认为text;

id_key:包含了每个样本id的字典键,默认为id;

default_metadata:包含默认元数据值的字典;

recursive:是否递归读取data_folder子目录中的文件;

glob_pattern:匹配指定的文件,例如glob_pattern="*/warc/*.warc.gz",将匹配warc目录中所有.warc.gz后缀的文件;

adapter:获取Reader读取的原始目录,并返回一个字典;

limit:仅读取有限数量的样本,主要用于测试和调试;

提取文本

你可以使用Extractor从原始HTML中提取文本内容,DateTrove中最常见的Extractor就是Trafilatura,它需要使用到trafilatura库

过滤数据

在任何数据处理管道中,过滤器Filter都是最重要的部分,DataTrove的Filter需要获取一个Document对象,并返回一个布尔值,即True就保留文档,False就移除它。

存储数据

数据处理完成之后,我们还需要将结果存储到某个地方,这里就需要使用到Writer组件了。Writer需要接收一个output_folder和output_filename:

JsonlWriter(

    f"{MAIN_OUTPUT_PATH}/non_english/",

    output_filename="${language}/" + DUMP + "/${rank}.jsonl.gz",  # folder structure: language/dump/file

)

消除重复数据

关于消除重复数据的使用,可以参考项目提供的minhash_deduplication.py、sentence_deduplication.py和exact_substrings.py脚本。

DateTrove Document对象

每一个管道块处理数据的格式为DateTrove文档格式:

text:每一个样本的实际文本内容;

id:样本的唯一ID(字符串);

metadata:存储额外信息的字典;

许可证协议

本项目的开发与发布遵循Apache-2.0开源许可证协议。

项目地址

DataTrove:【GitHub传送门

参考资料

fsspec: Filesystem interfaces for Python — fsspec 2024.2.0+1.g510ca5d.dirty documentation

A Python package & command-line tool to gather text on the Web — trafilatura 1.8.1 documentation

  • 27
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值