Datasets documentation

组织你的仓库

You are viewing main version, which requires installation from source. If you'd like regular pip install, checkout the latest stable version (v4.8.4).
Hugging Face's logo
Join the Hugging Face community

and get access to the augmented documentation experience

to get started

组织你的仓库

要在 Hugging Face Hub 上托管并共享您的数据集,请创建一个数据集仓库并上传您的数据文件。

本指南将展示在上传数据集时如何组织你的数据集仓库。 具有受支持的结构和文件格式(.txt、.csv、.parquet、.jsonl、.mp3、.jpg、.zip 等)的数据集会通过 load_dataset() 自动加载,并且其 Hub 上的数据集页面将包含一个数据集查看器。

主要用例

最简单的数据集结构包含两个文件:train.csv 和 test.csv(适用于任何受支持的文件格式)。

您的仓库还将包含一个 README.md 文件,即显示在您的数据集页面上的 数据集卡片。

my_dataset_repository/
├── README.md
├── train.csv
└── test.csv

在这个简单示例中,你将获得一个包含两个子集的 dataset:train(包含来自 train.csv 的样本)和 test(包含来自 test.csv 的样本)。

在 YAML 中定义你的数据划分和子集

拆分

如果您有多个文件并希望定义每个文件属于哪个 split,可以在 README.md 顶部使用 YAML configs 字段。

例如,给定一个如下所示的仓库:

my_dataset_repository/
├── README.md
├── data.csv
└── holdout.csv

您可以在 README.md 顶部的 YAML 块中添加 configs 字段来定义数据划分:

---
configs:
- config_name: default
  data_files:
  - split: train
    path: "data.csv"
  - split: test
    path: "holdout.csv"
---

您可以使用路径列表为每个 split 选择多个文件:

my_dataset_repository/
├── README.md
├── data/
│   ├── abc.csv
│   └── def.csv
└── holdout/
    └── ghi.csv
---
configs:
- config_name: default
  data_files:
  - split: train
    path:
    - "data/abc.csv"
    - "data/def.csv"
  - split: test
    path: "holdout/ghi.csv"
---

或者,您可以使用 glob 模式自动列出所需的所有文件:

---
configs:
- config_name: default
  data_files:
  - split: train
    path: "data/*.csv"
  - split: test
    path: "holdout/*.csv"
---

请注意,即使只有一个配置,config_name 字段也是必需的。

配置

您的数据集可能包含多个希望单独加载的数据子集。在这种情况下,您可以在 YAML 的 configs 字段中定义一个配置列表:

my_dataset_repository/
├── README.md
├── main_data.csv
└── additional_data.csv
---
configs:
- config_name: main_data
  data_files: "main_data.csv"
- config_name: additional_data
  data_files: "additional_data.csv"
---

每个配置在 Hugging Face Hub 上单独展示,可以通过将其名称作为第二个参数传入来加载:

from datasets import load_dataset

main_data = load_dataset("my_dataset_repository", "main_data")
additional_data = load_dataset("my_dataset_repository", "additional_data")

Builder 参数

不仅data_files,其他特定于构建器的参数也可以通过 YAML 传递,从而在加载数据时提供更大的灵活性,且无需编写任何自定义代码。例如,定义在加载csv文件时,在哪个配置中使用哪个分隔符:

---
configs:
- config_name: tab
  data_files: "main_data.csv"
  sep: "\t"
- config_name: comma
  data_files: "additional_data.csv"
  sep: ","
---

请参阅特定构建器的文档,以了解它们具有哪些配置参数。

您可以使用 default: true 设置默认配置,例如,如果您设置了 main_data = load_dataset("my_dataset_repository")

- config_name: main_data
  data_files: "main_data.csv"
  default: true

自动拆分检测

如果未提供 YAML,🤗 Datasets 会在数据集仓库中搜索特定的模式,以自动推断数据集的拆分(splits)。 这些模式存在一个顺序,从自定义文件名拆分格式开始,如果未找到任何模式,则将所有文件视为单个拆分。

目录名称

您的数据文件也可以放置在名为 train、test 和 validation 的不同目录中,每个目录包含对应数据划分的数据文件:

my_dataset_repository/
├── README.md
└── data/
    ├── train/
    │   └── bees.csv
    ├── test/
    │   └── more_bees.csv
    └── validation/
        └── even_more_bees.csv

文件名拆分

如果您没有任何非传统的拆分,则可以将拆分名称放在数据文件的任意位置,系统会自动推断。唯一的规则是拆分名称必须由非单词字符分隔,例如使用 test-file.csv 而不是 testfile.csv。支持的分隔符包括下划线、连字符、空格、句点和数字。

例如,以下文件名均可接受:

  • 训练集:train.csv、my_train_file.csv、train1.csv
  • 验证集:validation.csv、my_validation_file.csv、validation1.csv
  • 测试集:test.csv、my_test_file.csv、test1.csv

以下是一个示例,其中所有文件都放置在一个名为 data 的目录中:

my_dataset_repository/
├── README.md
└── data/
    ├── train.csv
    ├── test.csv
    └── validation.csv

自定义文件名拆分

如果您的数据集划分使用了自定义名称,而不是 train、test 或 validation,那么您可以将数据文件命名为 data/<split_name>-xxxxx-of-xxxxx.csv。

下面是一个包含三个子集(train、test 和 random)的示例:

my_dataset_repository/
├── README.md
└── data/
    ├── train-00000-of-00003.csv
    ├── train-00001-of-00003.csv
    ├── train-00002-of-00003.csv
    ├── test-00000-of-00001.csv
    ├── random-00000-of-00003.csv
    ├── random-00001-of-00003.csv
    └── random-00002-of-00003.csv

单一拆分

当 🤗 Datasets 无法找到上述任何模式时,它会将所有文件视为单个 train split。如果您的数据集 split 未按预期加载,可能是由于模式不正确所致。

拆分名称关键字

有几种方式为数据划分命名。验证集有时被称为“dev”,测试集则可能被称为“eval”。 这些其他划分名称同样受支持,且以下关键字是等价的:

  • train, 训练
  • 验证,有效,val,dev
  • test, testing, eval, evaluation

以下结构是一个有效的仓库:

my_dataset_repository/
├── README.md
└── data/
    ├── training.csv
    ├── eval.csv
    └── valid.csv

每个数据集中的多个文件

如果您的某个数据划分包含多个文件,🤗 Datasets 仍然可以根据文件名推断出它是训练集、验证集还是测试集。 例如,如果您的训练集和测试集分布在多个文件中:

my_dataset_repository/
├── README.md
├── train_0.csv
├── train_1.csv
├── train_2.csv
├── train_3.csv
├── test_0.csv
└── test_1.csv

请确保 train 集中的所有文件名称中都包含 train(测试集和验证集同理)。 即使你在文件名中的 train 前添加了前缀或后缀(例如 my_train_file_00001.csv), 🤗 Datasets 仍然可以推断出正确的 split。

为了方便起见,您也可以将数据文件放置在不同的目录中。 在这种情况下,分割名称将根据目录名称推断得出。

my_dataset_repository/
├── README.md
└── data/
    ├── train/
    │   ├── shard_0.csv
    │   ├── shard_1.csv
    │   ├── shard_2.csv
    │   └── shard_3.csv
    └── test/
        ├── shard_0.csv
        └── shard_1.csv
Update on GitHub