Datasets documentation
Создание и загрузка
Создание и загрузка
Почти каждый рабочий процесс в области глубокого обучения начинается с загрузки набора данных, что делает этот шаг одним из самых важных. С помощью 🤗 Datasets доступно более 900 наборов данных, которые помогут вам начать работу с вашей задачей NLP. Всё, что вам нужно сделать, — это вызвать load_dataset(), чтобы сделать первый шаг. Эта функция является по-настоящему универсальной во всех смыслах, поскольку она создаёт и загружает каждый используемый вами набор данных.
ELI5: load_dataset
Начнем с простого объяснения, как для пятилетнего ребенка.
Набор данных — это каталог, содержащий:
- Некоторые файлы данных в универсальных форматах (JSON, CSV, Parquet, текст и т. д.)
- Карточка набора данных с именем
README.md, содержащая документацию по набору данных, а также YAML-заголовок для определения тегов и конфигураций набора данных
Функция load_dataset() загружает запрошенный датасет локально или из Hugging Face Hub. Hub — это центральное хранилище, где хранятся все датасеты и модели Hugging Face.
Если набор данных содержит только файлы с данными, то load_dataset() автоматически определяет способ загрузки файлов по их расширениям (json, csv, parquet, tsfile, txt и т. д.). Внутри 🤗 Datasets использует подходящий DatasetBuilder в зависимости от формата файлов данных. В 🤗 Datasets существует один билдер на каждый формат файла данных:
- datasets.packaged_modules.text.Text для текста
- datasets.packaged_modules.csv.Csv для CSV и TSV
- datasets.packaged_modules.json.Json для JSON и JSONL
- datasets.packaged_modules.parquet.Parquet для Parquet
- datasets.packaged_modules.arrow.Arrow для Arrow (потоковый формат файлов)
- datasets.packaged_modules.sql.Sql для баз данных SQL
- datasets.packaged_modules.tsfile.TsFile для TsFile (временные ряды)
- datasets.packaged_modules.imagefolder.ImageFolder для папок с изображениями
- datasets.packaged_modules.audiofolder.AudioFolder для папок с аудио
Ознакомьтесь с разделом Share, чтобы узнать, как поделиться набором данных.
🤗 Datasets загружает файлы датасета с исходного URL, генерирует датасет и кэширует его в таблице Arrow на вашем диске. Если вы уже скачивали этот датасет, 🤗 Datasets загрузит его из кэша, чтобы вам не пришлось скачивать его повторно.
Теперь, когда у вас есть общее представление о том, как создаются наборы данных, давайте подробнее разберем технические детали их работы.
Создание набора данных
При первом загрузке набора данных 🤗 Datasets берёт исходный файл данных и формирует из него таблицу со строками и типизированными столбцами. За построение набора данных отвечают два основных класса: BuilderConfig и DatasetBuilder.

BuilderConfig
BuilderConfig — это класс конфигурации для DatasetBuilder. BuilderConfig содержит следующие основные атрибуты набора данных:
| Атрибут | Описание |
|---|---|
name | Короткое имя набора данных. |
version | Идентификатор версии набора данных. |
data_dir | Хранит путь к локальной папке, содержащей файлы данных. |
data_files | Хранит пути к локальным файлам данных. |
description | Описание набора данных. |
Если вы хотите добавить в свой набор данных дополнительные атрибуты, такие как метки классов, вы можете создать подкласс базового класса BuilderConfig. Существует два способа заполнить атрибуты класса BuilderConfig или его подкласса:
Предоставьте список предопределённых экземпляров класса BuilderConfig (или его подкласса) в атрибуте
DatasetBuilder.BUILDER_CONFIGS()датасета.При вызове load_dataset() любые именованные аргументы, не относящиеся к этому методу, используются для установки соответствующих атрибутов класса BuilderConfig. Это переопределяет предопределённые атрибуты, если была выбрана конкретная конфигурация.
Вы также можете установить DatasetBuilder.BUILDER_CONFIG_CLASS в любой собственный подкласс BuilderConfig.
DatasetBuilder
DatasetBuilder обращается ко всем атрибутам внутри BuilderConfig, чтобы построить фактический датасет.

В DatasetBuilder есть три основных метода:
DatasetBuilder._info()отвечает за определение атрибутов набора данных. При вызовеdataset.info🤗 Datasets возвращает информацию, сохранённую здесь. Аналогичным образом, здесь же задаются и Features. Помните, что Features — это своего рода каркас набора данных: они задают имена и типы каждого столбца.DatasetBuilder._split_generatorзагружает или получает запрошенные файлы данных, организует их в сплиты и определяет конкретные аргументы для процесса генерации. Этот метод содержит DownloadManager, который скачивает файлы или извлекает их из вашей локальной файловой системы. Внутри DownloadManager есть метод DownloadManager.download_and_extract(), который принимает словарь URL-адресов исходных файлов данных и скачивает запрошенные файлы. Допустимые входные данные: один URL или путь, либо список/словарь URL-адресов или путей. Все сжатые форматы файлов, такие как архивы TAR, GZIP и ZIP, будут автоматически распакованы.После загрузки файлов SplitGenerator организует их в сплиты. Объект SplitGenerator содержит имя сплита и все именованные аргументы, переданные в метод
DatasetBuilder._generate_examples. Именованные аргументы могут быть специфичны для каждого сплита и, как правило, включают как минимум локальный путь к файлам данных для каждого сплита.DatasetBuilder._generate_examplesчитает и разбирает файлы данных для сплита. Затем он возвращает примеры датасета в соответствии с форматом, указанным вfeaturesизDatasetBuilder._info(). Входом дляDatasetBuilder._generate_examplesфактически являетсяfilepath, переданный в именованных аргументах последнего метода.Набор данных генерируется с помощью генератора на Python, который не загружает все данные в память. В результате генератор способен обрабатывать большие наборы данных. Однако до того, как сгенерированные примеры будут записаны в файл набора данных на диске, они хранятся в буфере
ArrowWriter. Это означает, что сгенерированные примеры записываются пачками. Если примеры вашего набора данных занимают много памяти (изображения или видео), убедитесь, что вы указали низкое значение для атрибутаDEFAULT_WRITER_BATCH_SIZEв DatasetBuilder. Мы рекомендуем не превышать размер 200 МБ.
Поддержание целостности
Чтобы убедиться в полноте набора данных, load_dataset() выполняет ряд проверок загруженных файлов, гарантируя наличие всех необходимых элементов. Так вы избежите неожиданностей, если запрашиваемый набор данных не будет сгенерирован как ожидалось. load_dataset() проверяет:
- Количество разбиений в сгенерированном
DatasetDict. - Количество образцов в каждом разделе сгенерированного
DatasetDict. - Список загруженных файлов.
- Контрольные суммы SHA256 загруженных файлов (отключено по умолчанию).
Если набор данных не проходит проверки, вероятно, автор набора данных внёс какие-то изменения в файлы данных.
В этом случае возникает ошибка, сигнализирующая о том, что набор данных изменился.
Чтобы игнорировать ошибку, необходимо указать verification_mode="no_checks" в load_dataset().
Каждый раз, когда вы видите ошибку верификации, вы можете открыть обсуждение или pull request на вкладке «Community» соответствующего набора данных, чтобы проверки целостности для этого набора данных были обновлены.
Безопасность
Репозитории датасетов на Hub сканируются на наличие вредоносного ПО, дополнительную информацию см. здесь.
Update on GitHub