Datasets 文档

创建数据集

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。这些是低代码方法,用于快速创建包含数千个样本的图像或语音和音频数据集。它们非常适合在扩展到更大数据集之前快速原型化计算机视觉和语音模型。基于文件夹的构建器会获取您的数据并自动生成数据集的特征、拆分和标签。

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

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

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