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

Создание набора данных документов

В этом руководстве показано, как создать набор данных документов с помощью PdfFolder и некоторых метаданных. Это решение без написания кода для быстрого создания набора данных документов, содержащего несколько тысяч PDF-файлов.

Вы можете управлять доступом к вашему набору данных, требуя, чтобы пользователи сначала предоставили свои контактные данные. Подробнее о том, как включить эту функцию на Hub, читайте в руководстве Gated datasets.

PdfFolder

PdfFolder — это конструктор набора данных, предназначенный для быстрого загрузки набора документов, содержащего несколько тысяч PDF-файлов, без необходимости писать какой-либо код.

💡 Ознакомьтесь с Иерархией паттернов разбиения, чтобы узнать, как PdfFolder создаёт разбиения датасета на основе структуры вашего репозитория с данными.

PdfFolder автоматически определяет метки классов вашего набора данных на основе имени каталога. Разместите ваш набор данных в структуре каталогов, похожей на следующую:

folder/train/resume/0001.pdf
folder/train/resume/0002.pdf
folder/train/resume/0003.pdf

folder/train/invoice/0001.pdf
folder/train/invoice/0002.pdf
folder/train/invoice/0003.pdf

Если набор данных следует структуре PdfFolder, то его можно загрузить напрямую с помощью load_dataset():

>>> from datasets import load_dataset

>>> dataset = load_dataset("path/to/folder")

Это эквивалентно ручной передаче pdffolder в load_dataset() и указанию каталога в data_dir:

>>> dataset = load_dataset("pdffolder", data_dir="/path/to/folder")

Вы также можете использовать pdffolder для загрузки наборов данных, включающих несколько разбиений. Для этого каталог вашего набора данных должен иметь следующую структуру:

folder/train/resume/0001.pdf
folder/train/resume/0002.pdf
folder/test/invoice/0001.pdf
folder/test/invoice/0002.pdf

Если все файлы PDF находятся в одной директории или на разных уровнях иерархии каталогов, столбец label не будет добавлен автоматически. Если он вам нужен, явно установите drop_labels=False.

Если вы хотите добавить дополнительную информацию о вашем наборе данных, например текстовые подписи или ограничивающие прямоугольники, добавьте её в виде файла metadata.csv в вашей папке. Это позволяет быстро создавать наборы данных для различных задач компьютерного зрения, таких как генерация текстовых подписей или обнаружение объектов. Вы также можете использовать файл JSONL metadata.jsonl или файл Parquet metadata.parquet.

folder/train/metadata.csv
folder/train/0001.pdf
folder/train/0002.pdf
folder/train/0003.pdf

Файл metadata.csv должен содержать поле file_name или *_file_name, которое связывает файлы PDF с их метаданными:

file_name,additional_feature
0001.pdf,This is a first value of a text feature you added to your pdfs
0002.pdf,This is a second value of a text feature you added to your pdfs
0003.pdf,This is a third value of a text feature you added to your pdfs

или с использованием metadata.jsonl:

{"file_name": "0001.pdf", "additional_feature": "This is a first value of a text feature you added to your PDFs"}
{"file_name": "0002.pdf", "additional_feature": "This is a second value of a text feature you added to your PDFs"}
{"file_name": "0003.pdf", "additional_feature": "This is a third value of a text feature you added to your PDFs"}

Здесь file_name должно быть именем PDF-файла, расположенного рядом с файлом метаданных. Более общо, это должен быть относительный путь от каталога, содержащего метаданные, до PDF-файла.

В каждой строке набора данных можно указать несколько PDF, например, если и входные, и выходные данные представлены в формате PDF:

{"input_file_name": "0001.pdf", "output_file_name": "0001_output.pdf"}
{"input_file_name": "0002.pdf", "output_file_name": "0002_output.pdf"}
{"input_file_name": "0003.pdf", "output_file_name": "0003_output.pdf"}

Вы также можете определить списки PDF. В этом случае нужно назвать поле file_names или *_file_names. Вот пример:

{"pdfs_file_names": ["0001_part1.pdf", "0001_part2.pdf"], "label": "urgent"}
{"pdfs_file_names": ["0002_part1.pdf", "0002_part2.pdf"], "label": "urgent"}
{"pdfs_file_names": ["0003_part1.pdf", "0002_part2.pdf"], "label": "normal"}

OCR (распознавание символов)

Наборы данных для OCR содержат текст, извлечённый из PDF. Пример metadata.csv может выглядеть так:

file_name,text
0001.pdf,Invoice 1234 from 01/01/1970...
0002.pdf,Software Engineer Resume. Education: ...
0003.pdf,Attention is all you need. Abstract. The ...

Загрузите набор данных с помощью PdfFolder, и он создаст столбец text для подписей PDF:

>>> dataset = load_dataset("pdffolder", data_dir="/path/to/folder", split="train")
>>> dataset[0]["text"]
"Invoice 1234 from 01/01/1970..."

Загрузка набора данных в Hub

После создания набора данных вы можете поделиться им, например, с помощью huggingface_hub. Убедитесь, что библиотека huggingface_hub установлена, и что вы вошли в свой аккаунт Hugging Face (подробнее см. в руководстве по загрузке с помощью Python).

Загрузите ваш набор данных с помощью huggingface_hub.HfApi.upload_folder:

from huggingface_hub import HfApi
api = HfApi()

api.upload_folder(
    folder_path="/path/to/local/dataset",
    repo_id="username/my-cool-dataset",
    repo_type="dataset",
)
Update on GitHub