Datasets documentation
Создание набора данных документов
Создание набора данных документов
В этом руководстве показано, как создать набор данных документов с помощью 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",
)