创建数据集
有时,如果您使用自己的数据,则可能需要创建数据集。使用 🤗 数据集创建数据集可以为您的数据集带来库的所有优势:快速加载和处理、流式处理海量数据集、内存映射等等。您可以轻松快速地使用 🤗 数据集的低代码方法创建数据集,从而减少开始训练模型所需的时间。在许多情况下,只需拖放您的数据文件到 Hub 上的数据集仓库即可。
在本教程中,您将学习如何使用 🤗 数据集的低代码方法创建各种类型的数据集。
- 基于文件夹的构建器,用于快速创建图像或音频数据集。
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
。这些是低代码方法,用于快速创建包含数千个示例的图像或语音和音频数据集。它们非常适合在扩展到更大的数据集之前快速原型化计算机视觉和语音模型。基于文件夹的构建器会获取您的数据,并自动生成数据集的特征、拆分和标签。在幕后
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.
要详细了解这些基于文件夹的构建器,请查看 ImageFolder 或 AudioFolder 指南。
从 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 上更新