Datasets 文档

快速入门

Hugging Face's logo
加入 Hugging Face 社区

并获得增强的文档体验

开始使用

快速入门

本快速入门旨在为准备好深入代码并查看如何将 🤗 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
隐藏 Pytorch 内容
pip install torch
TensorFlow
隐藏 TensorFlow 内容
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"]
{'array': array([ 2.3443763e-05,  2.1729663e-04,  2.2145823e-04, ...,
         3.8356509e-05, -7.3497440e-06, -2.1754686e-05], dtype=float32),
 'path': '/root/.cache/huggingface/datasets/downloads/extracted/f14948e0e84be638dd7943ac36518a4cf3324e8b7aa331c5ab11541518e9368c/en-US~JOINT_ACCOUNT/602ba55abb1e6d0fbce92065.wav',
 'sampling_rate': 16000}

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

一旦您有了预处理函数,请使用 map() 函数通过将该函数应用于数据集中的批量示例来加速处理。

>>> def preprocess_function(examples):
...     audio_arrays = [x["array"] 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
隐藏 Pytorch 内容

使用 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
隐藏 TensorFlow 内容

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

>>> 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")

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

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

Beans 数据集仅包含 RGB 图像,因此此步骤在此处是不必要的。

2. 现在,您可以添加一些数据增强,使用任何库(AlbumentationsimgaugKornia)都可以。在这里,您将使用 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
隐藏 Pytorch 内容

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

>>> 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
隐藏 TensorFlow 内容

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

在开始之前,请确保您已安装最新版本的 albumentationscv2

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

文本需要通过分词器标记化为单独的 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. 创建一个函数来标记化数据集,您还应该将文本截断和填充为整齐的矩形张量。分词器在数据集中生成三个新列:input_idstoken_type_idsattention_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': array([  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]),
'token_type_ids': array([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]),
'attention_mask': array([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])}

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

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

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

Pytorch
隐藏 Pytorch 内容

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

>>> import torch

>>> dataset.set_format(type="torch", columns=["input_ids", "token_type_ids", "attention_mask", "labels"])
>>> dataloader = torch.utils.data.DataLoader(dataset, batch_size=32)
TensorFlow
隐藏 TensorFlow 内容

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

>>> import tensorflow as tf

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

6. 开始使用您的机器学习框架进行训练!查看 🤗 Transformers 文本分类指南,以获取有关如何在文本数据集上训练模型的端到端示例。

下一步是什么?

这完成了 🤗 Datasets 快速入门!您可以使用单个函数加载任何文本、音频或图像数据集,并使其准备好供您的模型进行训练。

对于您的后续步骤,请查看我们的操作指南,并了解如何执行更具体的操作,例如加载不同的数据集格式、对齐标签和流式传输大型数据集。如果您有兴趣了解有关 🤗 Datasets 核心概念的更多信息,请喝杯咖啡并阅读我们的概念指南

< > 在 GitHub 上更新