数据集文档

创建数据集

Hugging Face's logo
加入 Hugging Face 社区

并获得增强的文档体验

开始使用

创建数据集

有时,当您使用自己的数据时,您可能需要创建数据集。使用 🤗 Datasets 创建数据集,可以为您的数据集带来库的所有优势:快速加载和处理、流式传输海量数据集内存映射等等。您可以使用 🤗 Datasets 低代码方法轻松快速地创建数据集,从而缩短开始训练模型所需的时间。在许多情况下,就像拖放数据文件到 Hub 上的数据集仓库一样简单。

在本教程中,您将学习如何使用 🤗 Datasets 低代码方法来创建所有类型的数据集

  • 基于文件夹的构建器,用于快速创建图像或音频数据集
  • from_ 方法,用于从本地文件创建数据集

基于文件的构建器

🤗 Datasets 支持许多常见格式,例如 csvjson/jsonlparquettxt

例如,它可以读取由一个或多个 CSV 文件组成的数据集(在这种情况下,将您的 CSV 文件作为列表传递)

>>> from datasets import load_dataset
>>> dataset = load_dataset("csv", data_files="my_file.csv")

要获取支持的格式列表和代码示例,请参阅此指南 此处

基于文件夹的构建器

有两种基于文件夹的构建器:ImageFolderAudioFolder。这些是低代码方法,用于快速创建包含数千个示例的图像或语音和音频数据集。它们非常适合在扩展到更大的数据集之前,快速原型化计算机视觉和语音模型。基于文件夹的构建器会获取您的数据,并自动生成数据集的特性、拆分和标签。在底层

  • ImageFolder 使用 Image 特性来解码图像文件。支持多种图像扩展格式,例如 jpg 和 png,但也支持其他格式。您可以查看完整的 列表,其中列出了支持的图像扩展名。
  • AudioFolder 使用 Audio 特性来解码音频文件。支持音频扩展名,例如 wav 和 mp3,您可以查看完整的 列表,其中列出了支持的音频扩展名。

数据集拆分是从仓库结构生成的,标签名称是从目录名称自动推断出来的。

例如,如果您的图像数据集(音频数据集也是如此)像这样存储

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_ 方法通过两种方式创建数据集

  • 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 上更新