Datasets documentation

快速入门

You are viewing main version, which requires installation from source. If you'd like regular pip install, checkout the latest stable version (v4.8.4).
Hugging Face's logo
Join the Hugging Face community

and get access to the augmented documentation experience

to get started

快速入门

本快速入门面向准备深入代码、查看如何将 🤗 Datasets 集成到模型训练工作流中的开发者。如果您是初学者,建议从我们的 教程 开始,那里有更全面的介绍。

每个数据集都是独特的,具体任务可能要求对某些数据集执行额外的准备步骤才能用于训练。不过,你始终可以使用 🤗 Datasets 工具来加载和处理数据集。最快、最简单的入门方式是从 Hugging Face Hub 加载一个现有的数据集。这里有数千个数据集可供选择,涵盖多种任务。请选择你想要处理的数据集类型,让我们开始吧!

查看 Hugging Face 课程的 第 5 章,了解更多其他重要主题,例如加载远程或本地数据集、用于清理数据集的工具,以及创建自己的数据集。

首先安装 🤗 Datasets:

pip install datasets

🤗 Datasets 还支持音频和图像数据格式:

  • 要处理音频数据集,请安装 Audio 功能:

    pip install datasets[audio]
  • 要处理图像数据集,请安装 Image 功能:

    pip install datasets[vision]

除了 🤗 Datasets,请确保已安装您首选的机器学习框架:

Pytorch
Hide Pytorch content

bash pip install torch

TensorFlow
Hide TensorFlow content

bash pip install tensorflow

音频

音频数据集的加载方式与文本数据集相同。不过,音频数据集的预处理方式略有不同。您需要使用特征提取器,而不是分词器。音频输入可能还需要重采样其采样率,以匹配您所使用的预训练模型的采样率。在本快速入门中,您将准备MInDS-14数据集,用于训练一个模型,以分类客户遇到的银行问题。

1. 通过向 load_dataset() 函数提供数据集名称、数据集配置(并非所有数据集都有配置)和数据集拆分来加载 MInDS-14 数据集:

>>> from datasets import load_dataset, Audio

>>> dataset = load_dataset("PolyAI/minds14", "en-US", split="train")

2. 接下来,从 🤗 Transformers 库中加载预训练的 Wav2Vec2 模型及其对应的特征提取器。加载模型后看到关于某些权重未初始化的警告是完全正常的。这是预期行为,因为您正在加载该模型检查点以用于另一项任务的训练。

>>> from transformers import AutoModelForAudioClassification, AutoFeatureExtractor

>>> model = AutoModelForAudioClassification.from_pretrained("facebook/wav2vec2-base")
>>> feature_extractor = AutoFeatureExtractor.from_pretrained("facebook/wav2vec2-base")

3. MInDS-14 数据集卡片显示采样率为 8kHz,但 Wav2Vec2 模型是在 16kHz 采样率下预训练的。你需要使用 cast_column() 函数和 Audio 特征对上采样 audio 列,以匹配模型的采样率。

>>> dataset = dataset.cast_column("audio", Audio(sampling_rate=16000))
>>> dataset[0]["audio"]
<datasets.features._torchcodec.AudioDecoder object at 0x11642b6a0>

4. 创建一个函数,使用特征提取器对音频 array 进行预处理,并将序列截断和填充为整齐的矩形张量。需要记住的最重要的一点是,在特征提取器中调用音频 array,因为 array(即实际的语音信号)才是模型的输入。

一旦你拥有了预处理函数,就可以使用 map() 函数来加速处理,将该函数应用于数据集中的示例批次。

>>> def preprocess_function(examples):
...     audio_arrays = [x.get_all_samples().data for x in examples["audio"]]
...     inputs = feature_extractor(
...         audio_arrays,
...         sampling_rate=16000,
...         padding=True,
...         max_length=100000,
...         truncation=True,
...     )
...     return inputs

>>> dataset = dataset.map(preprocess_function, batched=True)

5. 使用 rename_column() 函数将 intent_class 列重命名为 labels,这是 Wav2Vec2ForSequenceClassification 中预期的输入名称:

>>> dataset = dataset.rename_column("intent_class", "labels")

6. 根据您使用的机器学习框架设置数据集格式。

Pytorch
Hide Pytorch content

使用 set_format() 函数将数据集格式设置为 torch,并指定要格式化的列。该函数会即时应用格式化。转换为 PyTorch 张量后,将数据集包装在 torch.utils.data.DataLoader 中:

>>> from torch.utils.data import DataLoader

>>> dataset.set_format(type="torch", columns=["input_values", "labels"])
>>> dataloader = DataLoader(dataset, batch_size=4)
TensorFlow
Hide TensorFlow content

使用 🤗 Transformers 中的 prepare_tf_dataset 方法来准备数据集,使其兼容 TensorFlow 并可直接用于训练/微调模型。该方法将 HuggingFace Dataset 封装为带有数据整理和批处理功能的 tf.data.Dataset,因此可以直接将其传递给 fit() 等 Keras 方法,而无需进一步修改。

>>> import tensorflow as tf

>>> tf_dataset = model.prepare_tf_dataset(
...     dataset,
...     batch_size=4,
...     shuffle=True,
... )

7. 使用你的机器学习框架开始训练!查看 🤗 Transformers 的 音频分类指南,了解如何在音频数据集上端到端地训练模型。

视觉

图像数据集的加载方式与文本数据集相同。不过,你需要使用特征提取器来预处理数据集,而不是分词器。在计算机视觉中,对图像应用数据增强是常见做法,旨在提高模型对过拟合的鲁棒性。你可以自由选择任何数据增强库,然后通过 🤗 Datasets 应用这些增强操作。在本快速入门中,你将加载Beans数据集,并将其准备好供模型训练,以从叶片图像中识别病害。

1. 通过向 load_dataset() 函数提供数据集名称和数据集拆分来加载 Beans 数据集:

>>> from datasets import load_dataset, Image

>>> dataset = load_dataset("AI-Lab-Makerere/beans", split="train")

大多数图像模型处理的是 RGB 图像。如果您的数据集中包含其他模式的图像,可以使用 cast_column() 函数将模式设置为 RGB:

>>> dataset = dataset.cast_column("image", Image(mode="RGB"))

Beans 数据集仅包含 RGB 图像,因此此处无需执行此步骤。

2. 现在你可以使用任意库(Albumentations、imgaug、Kornia)添加一些数据增强。这里,你将使用 torchvision 来随机更改图像的颜色属性:

>>> from torchvision.transforms import Compose, ColorJitter, ToTensor

>>> jitter = Compose(
...     [ColorJitter(brightness=0.5, hue=0.5), ToTensor()]
... )

3. 创建一个函数,将你的转换应用于数据集并生成模型输入:pixel_values。

>>> def transforms(examples):
...     examples["pixel_values"] = [jitter(image.convert("RGB")) for image in examples["image"]]
...     return examples

4. 使用 with_transform() 函数实时应用数据增强:

>>> dataset = dataset.with_transform(transforms)

5. 根据您使用的机器学习框架设置数据集格式。

Pytorch
Hide Pytorch content

将数据集包装在 torch.utils.data.DataLoader 中。您还需要创建一个 collate 函数,将样本整理成批次:

>>> from torch.utils.data import DataLoader

>>> def collate_fn(examples):
...     images = []
...     labels = []
...     for example in examples:
...         images.append((example["pixel_values"]))
...         labels.append(example["labels"])
...
...     pixel_values = torch.stack(images)
...     labels = torch.tensor(labels)
...     return {"pixel_values": pixel_values, "labels": labels}
>>> dataloader = DataLoader(dataset, collate_fn=collate_fn, batch_size=4)
TensorFlow
Hide TensorFlow content

使用 🤗 Transformers 中的 prepare_tf_dataset 方法来准备数据集,使其兼容 TensorFlow 并可直接用于训练/微调模型。该方法将 HuggingFace Dataset 封装为带有数据整理和批处理功能的 tf.data.Dataset,因此可以直接将其传递给 fit() 等 Keras 方法,而无需进一步修改。

在开始之前,请确保已安装最新版本的 albumentations 和 cv2:

pip install -U albumentations opencv-python
>>> import albumentations
>>> import numpy as np

>>> transform = albumentations.Compose([
...     albumentations.RandomCrop(width=256, height=256),
...     albumentations.HorizontalFlip(p=0.5),
...     albumentations.RandomBrightnessContrast(p=0.2),
... ])

>>> def transforms(examples):
...     examples["pixel_values"] = [
...         transform(image=np.array(image))["image"] for image in examples["image"]
...     ]
...     return examples

>>> dataset.set_transform(transforms)
>>> tf_dataset = model.prepare_tf_dataset(
...     dataset,
...     batch_size=4,
...     shuffle=True,
... )

6. 使用你的机器学习框架开始训练!查看 🤗 Transformers 的 图像分类指南,了解如何在图像数据集上端到端地训练模型。

NLP

文本需要通过 tokenizer 分词为单个 token。在快速入门中,你将加载 Microsoft Research Paraphrase Corpus (MRPC) 训练数据集,以训练一个模型来判断一对句子是否具有相同的含义。

1. 通过向 load_dataset() 函数提供数据集名称、数据集配置(并非所有数据集都有配置)和数据集拆分来加载 MRPC 数据集:

>>> from datasets import load_dataset

>>> dataset = load_dataset("nyu-mll/glue", "mrpc", split="train")

2. 接下来,从 🤗 Transformers 库中加载预训练的 BERT 模型及其对应的分词器。加载模型后看到关于某些权重未初始化的警告是完全正常的。这是预期行为,因为您正在加载该模型检查点以用于另一项任务的训练。

>>> from transformers import AutoModelForSequenceClassification, AutoTokenizer >>> model = AutoModelForSequenceClassification.from_pretrained("bert-base-uncased") >>> tokenizer = AutoTokenizer.from_pretrained("bert-base-uncased")

3. 创建一个用于对数据集进行分词(tokenize)的函数,同时应将文本截断并填充为整齐的矩形张量。分词器会在数据集中生成三个新列:input_ids、token_type_ids 和 attention_mask。这些就是模型的输入。

使用 map() 函数,将分词函数应用于数据集中的示例批次,以加快处理速度:

>>> def encode(examples):
...     return tokenizer(examples["sentence1"], examples["sentence2"], truncation=True, padding="max_length")

>>> dataset = dataset.map(encode, batched=True)
>>> dataset[0]
{'sentence1': 'Amrozi accused his brother , whom he called " the witness " , of deliberately distorting his evidence .',
'sentence2': 'Referring to him as only " the witness " , Amrozi accused his brother of deliberately distorting his evidence .',
'label': 1,
'idx': 0,
'input_ids': [  101,  7277,  2180,  5303,  4806,  1117,  1711,   117,  2292, 1119,  1270,   107,  1103,  7737,   107,   117,  1104,  9938, 4267, 12223, 21811,  1117,  2554,   119,   102, 11336,  6732, 3384,  1106,  1140,  1112,  1178,   107,  1103,  7737,   107, 117,  7277,  2180,  5303,  4806,  1117,  1711,  1104,  9938, 4267, 12223, 21811,  1117,  2554,   119,   102, 0, 0, ...],
'token_type_ids': [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, ...],
'attention_mask': [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, ...]}

4. 将 label 列重命名为 labels,这是 BertForSequenceClassification 中预期的输入名称:

>>> dataset = dataset.map(lambda examples: {"labels": examples["label"]}, batched=True)

5. 根据您使用的机器学习框架设置数据集格式。

Pytorch
Hide Pytorch content

使用 with_format() 函数将数据集格式设置为 torch,并指定要格式化的列。该函数会即时应用格式化。转换为 PyTorch 张量后,将数据集包装在 torch.utils.data.DataLoader 中:

>>> import torch

>>> dataset = dataset.select_columns(["input_ids", "token_type_ids", "attention_mask", "labels"])
>>> dataset = dataset.with_format(type="torch")
>>> dataloader = torch.utils.data.DataLoader(dataset, batch_size=32)
TensorFlow
Hide TensorFlow content

使用 🤗 Transformers 中的 prepare_tf_dataset 方法来准备数据集,使其兼容 TensorFlow 并可直接用于训练/微调模型。该方法将 HuggingFace Dataset 封装为带有数据整理和批处理功能的 tf.data.Dataset,因此可以直接将其传递给 fit() 等 Keras 方法,而无需进一步修改。

>>> import tensorflow as tf

>>> tf_dataset = model.prepare_tf_dataset(
...     dataset,
...     batch_size=4,
...     shuffle=True,
... )

6. 使用你的机器学习框架开始训练!查看 🤗 Transformers 的 文本分类指南,了解如何在文本数据集上训练模型的端到端示例。

接下来是什么?

至此,🤗 Datasets 快速入门就完成了!你可以通过一个函数加载任何文本、音频或图像数据集,并使其准备好供模型训练使用。

作为下一步,请查看我们的操作指南,学习如何执行更具体的任务,例如加载不同的数据集格式、对齐标签以及流式处理大型数据集。如果你想进一步了解 🤗 Datasets 的核心概念,不妨泡杯咖啡,阅读我们的概念指南!

Update on GitHub