Datasets 文档

组织你的仓库

Hugging Face's logo
加入 Hugging Face 社区

并获得增强的文档体验

开始使用

组织你的仓库

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

本指南将向您展示上传数据集时如何组织数据集仓库。具有支持的结构和文件格式(.txt.csv.parquet.jsonl.mp3.jpg.zip 等)的数据集将使用 load_dataset() 自动加载,并且在 Hub 上的数据集页面上将拥有数据集查看器。

主要用例

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

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

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

在这种简单的情况下,你将获得一个包含两个拆分的数据集:train(包含来自 train.csv 的示例)和 test(包含来自 test.csv 的示例)。

在 YAML 中定义你的拆分和子集

数据集拆分

如果你有多个文件,并且想定义哪个文件属于哪个拆分,你可以使用 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"
---

你可以使用文件路径列表来为每个拆分选择多个文件

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")

构建器参数

不仅 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 会在数据集仓库中搜索特定模式以自动推断数据集拆分。模式有优先级,首先是自定义文件名拆分格式,如果找不到模式,则将所有文件视为单个拆分。

目录名称

你的数据文件也可以放在不同的目录中,命名为 traintestvalidation,每个目录包含该拆分的数据文件。

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

文件名拆分

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

例如,以下文件名都是可接受的

  • 训练拆分:train.csvmy_train_file.csvtrain1.csv
  • 验证拆分:validation.csvmy_validation_file.csvvalidation1.csv
  • 测试拆分:test.csvmy_test_file.csvtest1.csv

这是一个所有文件都放在名为 data 的目录中的示例

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

自定义文件名拆分

如果你的数据集拆分名称不是 traintestvalidation,而是自定义名称,那么你可以将数据文件命名为 data/<split_name>-xxxxx-of-xxxxx.csv

这是一个包含三个拆分(traintestrandom)的示例

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 找不到上述任何模式时,它会将所有文件视为单个训练拆分。如果你的数据集拆分未按预期加载,可能是由于模式不正确。

拆分名称关键字

有几种命名拆分的方法。验证拆分有时被称为“dev”,测试拆分可能被称为“eval”。这些其他拆分名称也受支持,以下关键字是等效的

  • train, training
  • validation, valid, 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 仍能推断出正确的拆分。

为了方便起见,你也可以将数据文件放在不同的目录中。在这种情况下,拆分名称会从目录名称中推断出来。

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
在 GitHub 上更新

© . This site is unofficial and not affiliated with Hugging Face, Inc.