Datasets documentation
Быстрый старт
Быстрый старт
Этот быстрый старт предназначен для разработчиков, готовых погрузиться в код и посмотреть пример того, как интегрировать 🤗 Datasets в свой рабочий процесс обучения модели. Если вы новичок, мы рекомендуем начать с наших туториалов, где вы получите более подробное введение.
Каждый набор данных уникален, и в зависимости от задачи для подготовки некоторых из них к обучению могут потребоваться дополнительные шаги. Однако вы всегда можете использовать инструменты 🤗 Datasets для загрузки и обработки набора данных. Самый быстрый и простой способ начать работу — загрузить существующий набор данных из Hugging Face Hub. На выбор доступны тысячи наборов данных, охватывающих множество задач. Выберите тип набора данных, с которым вы хотите работать, и приступим!
Пересэмплируйте аудиодатасет и подготовьте его для модели, классифицирующей тип банковского вопроса, по которому звонит говорящий.
Примените аугментацию данных к набору изображений и подготовьте его для модели, диагностирующей заболевания бобовых культур.
Токенизируйте набор данных и подготовьте его для модели, определяющей, имеют ли пара предложений одинаковый смысл.
Ознакомьтесь с главой 5 курса Hugging Face, чтобы узнать больше о других важных темах, таких как загрузка удалённых или локальных наборов данных, инструменты для очистки набора данных и создание собственного набора данных.
Начните с установки 🤗 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. Загрузите набор данных 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. Задайте формат набора данных в соответствии с используемым вами фреймворком машинного обучения.
Используйте функцию 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)Используйте метод 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 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)Используйте метод 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. Задайте формат набора данных в соответствии с используемым вами фреймворком машинного обучения.
Используйте функцию 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)Используйте метод 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