Datasets 文档
快速入门
并获得增强的文档体验
开始使用
快速入门
本快速入门旨在帮助开发者们深入代码,并通过一个示例了解如何将 🤗 Datasets 集成到他们的模型训练工作流中。如果你是初学者,我们推荐从我们的教程开始,在那里你会获得更全面的介绍。
每个数据集都是独一无二的,根据任务的不同,某些数据集可能需要额外的准备步骤才能用于训练。但你始终可以使用 🤗 Datasets 工具来加载和处理数据集。最快、最简单的方法是直接从Hugging Face Hub加载现有数据集。有成千上万的数据集可供选择,涵盖了许多任务。选择你想要使用的数据集类型,让我们开始吧!
查看 Hugging Face 课程的第 5 章,了解更多重要主题,例如加载远程或本地数据集、清理数据集的工具以及创建自己的数据集。
首先安装 🤗 Datasets
pip install datasets
🤗 Datasets 还支持音频和图像数据格式
要使用音频数据集,请安装 Audio 特征
pip install datasets[audio]
要使用图像数据集,请安装 Image 特征
pip install datasets[vision]
除了 🤗 Datasets,请确保您已安装首选的机器学习框架
bash pip install torch
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. 根据您正在使用的机器学习框架设置数据集格式。
使用 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)使用 🤗 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. 现在,您可以使用任何您喜欢的库(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 examples4. 使用 with_transform() 函数来实时应用数据增强。
>>> dataset = dataset.with_transform(transforms)5. 根据您正在使用的机器学习框架设置数据集格式。
将数据集包装到 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)使用 🤗 Transformers 中的 prepare_tf_dataset 方法,使数据集与 TensorFlow 兼容,并准备好进行模型训练/微调,因为它将 HuggingFace Dataset 包装成 tf.data.Dataset,包含集合和批处理功能,因此可以直接将其传递给 Keras 方法(如 fit()),无需进一步修改。
在开始之前,请确保您已安装最新版本的 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
文本需要通过分词器分词成单独的 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_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. 根据您正在使用的机器学习框架设置数据集格式。
使用 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)使用 🤗 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 上更新