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

2024-05-17 16:04:46 浏览数 (2)

关于DataTrove

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

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

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

工具安装

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

pip安装

代码语言:javascript复制
pip install datatrove[FLAVOUR]

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

1、all:安装所有组件

代码语言:javascript复制
pip install datatrove[all]

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

代码语言:javascript复制
pip install datatrove[io]

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

代码语言:javascript复制
pip install datatrove[processing]

4、s3:S3支持

代码语言:javascript复制
pip install datatrove[s3]

5、cli:命令行工具

代码语言:javascript复制
pip install datatrove[cli]

源码获取

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

代码语言:javascript复制
git clone https://github.com/huggingface/datatrove.git

工具样例

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

代码语言:javascript复制
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参数选项:

代码语言:javascript复制
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:

代码语言:javascript复制
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文档格式:

代码语言:javascript复制
text:每一个样本的实际文本内容;

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

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

许可证协议

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

项目地址

DataTrove:

https://github.com/huggingface/datatrove

https://filesystem-spec.readthedocs.io/en/latest/ https://trafilatura.readthedocs.io/en/latest/

0 人点赞