重要提示

您正在查看 NeMo 2.0 文档。此版本对 API 和新库 NeMo Run 进行了重大更改。我们目前正在将 NeMo 1.0 的所有功能移植到 2.0。有关先前版本或 2.0 中尚不可用的功能的文档,请参阅 NeMo 24.07 文档

下载和提取文本#

背景#

公开托管的文本数据集以各种位置和格式存储。下载海量的公共数据集通常是数据策展的第一步,由于数据集的庞大尺寸和托管方法,这可能会很麻烦。此外,海量的预训练文本数据集很少采用可以直接操作以进行进一步策展和训练的格式。例如,Common Crawl 以压缩 Web 存档格式 (.warc.gz) 存储其原始抓取数据,但 .jsonl 等格式由于易于使用,因此在数据策展中更为常见。但是,提取可能是数据策展管道中计算量最大的步骤,因此在提取步骤之前进行一些过滤以限制接受这种繁重计算的文档数量可能是有益的。

NeMo Curator 提供了用于下载和提取 Common Crawl、ArXiv 和 Wikipedia 数据的示例实用程序。此外,它还提供了一个灵活的接口,可以将该实用程序扩展到其他数据集。我们的 Common Crawl 示例演示了如何通过从 S3 下载数据、使用 pyCLD2 进行初步语言过滤以及使用 jusText 或 Resiliparse 提取相关文本以输出 .jsonl 文件来处理抓取。

NeMo Curator 目前不提供开箱即用的 Web 爬取或 Web 抓取支持。它提供了用于从上面给出的现有在线来源下载和提取数据的实用程序。用户可以轻松地自行实现这些功能,并根据需要使用下面描述的框架自动扩展它们。

用法#

nemo_curator.download 包含一组用于处理在线数据集的下载和提取的函数。 “下载”通常是指将数据从 Web 托管数据源传输到本地文件存储。 “提取”通常是指将数据格式从其原始形式(例如,.warc.gz)转换为标准化格式(例如,.jsonl)并丢弃不相关数据的过程。

  • download_common_crawl 将下载和提取 Common Crawl 快照的压缩 Web 存档文件到目标目录。Common Crawl 具有 S3 存储桶和直接 HTTPS 端点。如果要使用 S3 存储桶,请确保已使用 s5cmd 正确设置凭据。否则,HTTPS 端点将与 wget 一起使用。以下是如何使用它的小示例

    from nemo_curator.download import download_common_crawl
    
    common_crawl = download_common_crawl("/extracted/output/folder", "2020-50", "2021-04", output_type="jsonl")
    
    • "/extracted/output/folder" 是本地文件系统中最终提取文件的放置路径。

    • "2020-50" 是将包含在下载中的第一个 Common Crawl 快照。注意:并非每一年和每一周都有快照。确保您的范围至少包含一个有效的 Common Crawl 快照。有效的 Common Crawl 快照列表可以在此处找到。

    • "2021-04" 是将包含在下载中的最后一个 Common Crawl 快照。

    • output_type="jsonl" 是将用于在磁盘上存储数据的文件格式。目前支持 "jsonl""parquet"

您可以选择修改 download_common_crawl 中使用的 HTML 文本提取算法。请参见下面的示例。

from nemo_curator.download import (
  ResiliparseExtractor,
  download_common_crawl,
)

# Change the extraction algorithm
extraction_algorithm = ResiliparseExtractor()
common_crawl = download_common_crawl(
  "/extracted/output/folder",
  "2020-50",
  "2021-04",
  output_type="jsonl",
  algorithm=extraction_algorithm,
)

上面,我们将提取算法从默认的 JusTextExtractor 更改了。

返回值 common_crawl 将采用 NeMo Curator 的标准 DocumentDataset 格式。查看该函数的文档字符串以获取更多可以使用的参数。

NeMo Curator 的 Common Crawl 提取过程在幕后如下所示

  1. 将记录中的 HTML 从二进制解码为文本。

  2. 如果可以正确解码 HTML,则使用 pyCLD2 对输入 HTML 执行语言检测。

  3. 最后,使用 jusTextResiliparse 从 HTML 中提取相关文本,并将其作为 .jsonl 文件中 json 条目的“text”字段中的单个字符串写入。

  • download_wikipedia 将下载和提取最新的 Wikipedia 转储。文件使用 wget 下载。Wikipedia 的下载速度可能比其他数据集慢。这是因为它们限制了每个 IP 地址可以发生的下载次数。

    from nemo_curator.download import download_wikipedia
    
    wikipedia = download_wikipedia("/extracted/output/folder", dump_date="20240201")
    
    • "/extracted/output/folder" 是本地文件系统中最终提取文件的放置路径。

    • dump_date="20240201" 将 Wikipedia 转储固定到特定日期。如果未指定日期,则使用最新的转储。

  • download_arxiv 将下载和提取 ArXiv 论文的 Latex 版本。它们托管在 S3 上,因此请确保已使用 s5cmd 正确设置凭据。

    from nemo_curator.download import download_arxiv
    
    arxiv = download_arxiv("/extracted/output/folder")
    
    • "/extracted/output/folder" 是本地文件系统中最终提取文件的放置路径。

所有这些函数都返回底层数据集的 DocumentDataset 以及在提取期间获得的元数据。如果数据集已在传递给它的路径中下载和提取,它将从那里的文件读取,而不是再次下载和提取它们。由于这些数据集中的每一个都非常庞大(Common Crawl 快照的大小约为数百 TB),因此所有这些数据集都跨不同的文件进行分片。它们都具有 url_limit 参数,允许您仅下载少量分片。