Datasets 文档

创建数据集

Hugging Face's logo
加入 Hugging Face 社区

并获得增强的文档体验

开始使用

创建数据集

如果你正在使用自己的数据,有时可能需要创建数据集。使用 🤗 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")

要查看支持的格式列表和代码示例,请参考此指南

基于文件夹的构建器

这里有两种基于文件夹的构建器:ImageFolderAudioFolder。这些是用于快速创建包含数千个样本的图像或语音/音频数据集的低代码方法。它们非常适合在扩展到更大数据集之前,快速构建计算机视觉和语音模型的原型。基于文件夹的构建器会接收你的数据并自动生成数据集的特征(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.

要详细了解这些基于文件夹的构建器,请查看 ImageFolderAudioFolder 指南。

通过 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 上更新

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