Datasets documentation

Создание и загрузка

You are viewing main version, which requires installation from source. If you'd like regular pip install, checkout the latest stable version (v4.8.4).
Hugging Face's logo
Join the Hugging Face community

and get access to the augmented documentation experience

to get started

Создание и загрузка

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

Ознакомьтесь с разделом 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 есть три основных метода:

  1. DatasetBuilder._info() отвечает за определение атрибутов набора данных. При вызове dataset.info 🤗 Datasets возвращает информацию, сохранённую здесь. Аналогичным образом, здесь же задаются и Features. Помните, что Features — это своего рода каркас набора данных: они задают имена и типы каждого столбца.

  2. DatasetBuilder._split_generator загружает или получает запрошенные файлы данных, организует их в сплиты и определяет конкретные аргументы для процесса генерации. Этот метод содержит DownloadManager, который скачивает файлы или извлекает их из вашей локальной файловой системы. Внутри DownloadManager есть метод DownloadManager.download_and_extract(), который принимает словарь URL-адресов исходных файлов данных и скачивает запрошенные файлы. Допустимые входные данные: один URL или путь, либо список/словарь URL-адресов или путей. Все сжатые форматы файлов, такие как архивы TAR, GZIP и ZIP, будут автоматически распакованы.

    После загрузки файлов SplitGenerator организует их в сплиты. Объект SplitGenerator содержит имя сплита и все именованные аргументы, переданные в метод DatasetBuilder._generate_examples. Именованные аргументы могут быть специфичны для каждого сплита и, как правило, включают как минимум локальный путь к файлам данных для каждого сплита.

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