Datasets 文档
组织你的仓库
并获得增强的文档体验
开始使用
组织你的仓库
要托管和分享你的数据集,请在 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在这种简单的情况下,你将获得一个包含两个拆分的数据集: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 会在数据集仓库中搜索特定模式以自动推断数据集拆分。模式有优先级,首先是自定义文件名拆分格式,如果找不到模式,则将所有文件视为单个拆分。
目录名称
你的数据文件也可以放在不同的目录中,命名为 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 找不到上述任何模式时,它会将所有文件视为单个训练拆分。如果你的数据集拆分未按预期加载,可能是由于模式不正确。
拆分名称关键字
有几种命名拆分的方法。验证拆分有时被称为“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