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がデータセットリポジトリの構造に基づいてデータセットの分割を作成する方法について詳しく知るには、Split pattern hierarchyをご覧ください。

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")

これは、load_dataset() で pdffolder を手動で渡し、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ファイルには、PDFファイルとそのメタデータを関連付けるfile_nameまたは*_file_nameフィールドが必要です。

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でデータセットを読み込むと、PDFキャプション用のtext列が作成されます:

>>> 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 アカウントにログインしていることを確認してください(詳細は Upload with Python tutorial を参照)。

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