Datasets documentation

Быстрый старт

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. На выбор доступны тысячи наборов данных, охватывающих множество задач. Выберите тип набора данных, с которым вы хотите работать, и приступим!

Ознакомьтесь с главой 5 курса Hugging Face, чтобы узнать больше о других важных темах, таких как загрузка удалённых или локальных наборов данных, инструменты для очистки набора данных и создание собственного набора данных.

Начните с установки 🤗 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. Загрузите набор данных MInDS-14, передав в функцию load_dataset() имя набора данных, его конфигурацию (не у всех наборов данных есть конфигурация) и разбиение:

>>> from datasets import load_dataset, Audio

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

2. Далее загрузите предобученную модель Wav2Vec2 и соответствующий ей экстрактор признаков из библиотеки 🤗 Transformers. После загрузки модели вполне нормально увидеть предупреждение о том, что некоторые веса не были инициализированы. Это ожидаемо, так как вы загружаете контрольную точку этой модели для обучения на другой задаче.

>>> from transformers import AutoModelForAudioClassification, AutoFeatureExtractor

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

3. Карточка датасета MInDS-14 указывает частоту дискретизации 8 кГц, но модель Wav2Vec2 была предобучена на частоте дискретизации 16 кГц. Вам потребуется увеличить частоту дискретизации столбца audio с помощью функции cast_column() и фичи Audio, чтобы привести её к частоте дискретизации модели.

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

4. Создайте функцию для предобработки аудио array с помощью feature extractor, а также для усечения и дополнения последовательностей до аккуратных прямоугольных тензоров. Главное, что нужно помнить: передавайте аудио array в feature extractor, поскольку именно 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

Используйте метод prepare_tf_dataset из 🤗 Transformers, чтобы подготовить датасет для совместимости с TensorFlow и сделать его готовым к обучению/дообучению модели. Метод оборачивает Dataset HuggingFace в 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. Загрузите набор данных Beans, передав в функцию load_dataset() имя набора данных и его разбиение:

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

Используйте метод prepare_tf_dataset из 🤗 Transformers, чтобы подготовить датасет для совместимости с TensorFlow и сделать его готовым к обучению/дообучению модели. Метод оборачивает Dataset HuggingFace в 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

Текст необходимо токенизировать на отдельные токены с помощью токенизатора. Для быстрого старта вы загрузите обучающий набор данных Microsoft Research Paraphrase Corpus (MRPC), чтобы обучить модель определять, означают ли пара предложений одно и то же.

1. Загрузите набор данных MRPC, передав в функцию load_dataset() имя набора данных, его конфигурацию (не у всех наборов данных есть конфигурация) и разбиение:

>>> from datasets import load_dataset

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

2. Далее загрузите предобученную модель BERT и соответствующий ей токенизатор из библиотеки 🤗 Transformers. После загрузки модели вполне нормально увидеть предупреждение о том, что некоторые веса не были инициализированы. Это ожидаемо, так как вы загружаете контрольную точку этой модели для обучения на другой задаче.

>>> 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. Задайте формат набора данных в соответствии с используемым вами фреймворком машинного обучения.

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

Используйте метод prepare_tf_dataset из 🤗 Transformers, чтобы подготовить датасет для совместимости с TensorFlow и сделать его готовым к обучению/дообучению модели. Метод оборачивает Dataset HuggingFace в 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, возьмите чашку кофе и прочитайте наши концептуальные руководства!

Update on GitHub