Datasets 文档
创建数据集
并获得增强的文档体验
开始使用
创建数据集
如果你正在使用自己的数据,有时可能需要创建数据集。使用 🤗 Datasets 创建数据集可以让你的数据集获得该库的所有优势:快速加载和处理、流式传输海量数据集、内存映射(memory-mapping)等等。你可以利用 🤗 Datasets 的低代码方法快速便捷地创建数据集,从而缩短开始训练模型所需的时间。在许多情况下,只需将数据文件拖放到 Hub 上的数据集仓库中即可。
在本教程中,你将学习如何使用 🤗 Datasets 的低代码方法来创建各种类型的数据集:
- 用于快速创建图像或音频数据集的基于文件夹的构建器(Folder-based builders)
- 用于从本地文件创建数据集的
from_方法
基于文件的构建器
🤗 Datasets 支持许多常见格式,如 csv, json/jsonl, parquet, txt。
例如,它可以读取由一个或多个 CSV 文件组成的数据集(在这种情况下,请将 CSV 文件以列表形式传递)
>>> from datasets import load_dataset
>>> dataset = load_dataset("csv", data_files="my_file.csv")要查看支持的格式列表和代码示例,请参考此指南。
基于文件夹的构建器
这里有两种基于文件夹的构建器:ImageFolder 和 AudioFolder。这些是用于快速创建包含数千个样本的图像或语音/音频数据集的低代码方法。它们非常适合在扩展到更大数据集之前,快速构建计算机视觉和语音模型的原型。基于文件夹的构建器会接收你的数据并自动生成数据集的特征(features)、划分(splits)和标签(labels)。在底层:
ImageFolder使用 Image 特征来解码图像文件。它支持许多图像扩展格式,如 jpg 和 png,同时也支持其他格式。你可以查看支持的图像扩展名完整列表。AudioFolder使用 Audio 特征来解码音频文件。支持 wav, mp3 甚至 mp4 等扩展名,你可以查看支持的音频扩展名完整列表。解码通过 ffmpeg 完成。
数据集的划分是根据仓库结构生成的,而标签名称则自动从目录名称中推断。
例如,如果你的图像数据集(音频数据集同理)存储方式如下:
pokemon/train/grass/bulbasaur.png
pokemon/train/fire/charmander.png
pokemon/train/water/squirtle.png
pokemon/test/grass/ivysaur.png
pokemon/test/fire/charmeleon.png
pokemon/test/water/wartortle.png那么基于文件夹的构建器将这样生成一个示例:

通过在 load_dataset() 中指定 imagefolder 来创建图像数据集
>>> from datasets import load_dataset
>>> dataset = load_dataset("imagefolder", data_dir="/path/to/pokemon")创建音频数据集的方式相同,只需在 load_dataset() 中指定 audiofolder 即可
>>> from datasets import load_dataset
>>> dataset = load_dataset("audiofolder", data_dir="/path/to/folder")关于数据集的任何额外信息(如文本标题或转录文本),可以通过在数据集所在文件夹中包含一个 metadata.csv 文件来添加。元数据文件需要有一个 file_name 列,用于将图像或音频文件与其相应的元数据相关联
file_name, text
bulbasaur.png, There is a plant seed on its back right from the day this Pokémon is born.
charmander.png, It has a preference for hot things.
squirtle.png, When it retracts its long neck into its shell, it squirts out water with vigorous force.要详细了解这些基于文件夹的构建器,请查看 ImageFolder 或 AudioFolder 指南。
通过 Python 字典创建
你还可以通过 Python 字典中的数据来创建数据集。有两种使用 from_ 方法创建数据集的方式:
由于生成器(generator)的迭代行为,from_generator() 方法是从 生成器 创建数据集最节省内存的方式。当你处理可能无法全部装入内存的超大型数据集时,这尤其有用,因为数据集是在磁盘上渐进式生成的,然后进行内存映射。
>>> from datasets import Dataset >>> def gen(): ... yield {"pokemon": "bulbasaur", "type": "grass"} ... yield {"pokemon": "squirtle", "type": "water"} >>> ds = Dataset.from_generator(gen) >>> ds[0] {"pokemon": "bulbasaur", "type": "grass"}基于生成器的 IterableDataset 需要使用
for循环进行迭代,例如:>>> from datasets import IterableDataset >>> ds = IterableDataset.from_generator(gen) >>> for example in ds: ... print(example) {"pokemon": "bulbasaur", "type": "grass"} {"pokemon": "squirtle", "type": "water"}from_dict() 方法是从字典创建数据集的一种简单直接的方式
>>> from datasets import Dataset >>> ds = Dataset.from_dict({"pokemon": ["bulbasaur", "squirtle"], "type": ["grass", "water"]}) >>> ds[0] {"pokemon": "bulbasaur", "type": "grass"}要创建图像或音频数据集,可以将 cast_column() 方法与 from_dict() 链式调用,并指定列名和特征类型。例如,创建音频数据集的方式如下:
>>> audio_dataset = Dataset.from_dict({"audio": ["path/to/audio_1", ..., "path/to/audio_n"]}).cast_column("audio", Audio())
现在你已经知道了如何创建数据集,考虑将其分享到 Hub 上,以便社区也能从你的工作中受益!请继续阅读下一节,学习如何分享你的数据集。
在 GitHub 上更新