Datasets documentation

リポジトリの構造を整える

Hugging Face's logo
Join the Hugging Face community

and get access to the augmented documentation experience

to get started

リポジトリの構造を整える

データセットをホストして共有するには、Hugging Face Hub上でデータセットのリポジトリを作成し、データファイルをアップロードします。

このガイドでは、アップロード時にデータセットリポジトリをどのように構成するかを示します。 サポートされている構造とファイル形式(.txt、.csv、.parquet、.jsonl、.mp3、.jpg、.zip など)のデータセットは、load_dataset()によって自動的に読み込まれ、Hub上のデータセットページにデータセットビューアが表示されます。

主なユースケース

最もシンプルなデータセット構造は、train.csvとtest.csvという2つのファイルから構成されています(サポートされている任意のファイル形式で動作します)。

リポジトリには、README.mdファイルも含まれます。これは、データセットページに表示されるデータセットカードです。

my_dataset_repository/
├── README.md
├── train.csv
└── test.csv

このシンプルなケースでは、2つのスプリットを持つデータセットが得られます: train(train.csvからの例を含む)とtest(test.csvからの例を含む)。

YAMLでスプリットとサブセットを定義する

分割

複数のファイルがあり、どのファイルをどの分割に含めるかを定義したい場合は、README.md の先頭にある YAML の configs フィールドを使用できます。

例えば、次のようなリポジトリが与えられたとします。

my_dataset_repository/
├── README.md
├── data.csv
└── holdout.csv

README.md の先頭の YAML ブロックにconfigsフィールドを追加することで、スプリットを定義できます。

---
configs:
- config_name: default
  data_files:
  - split: train
    path: "data.csv"
  - split: test
    path: "holdout.csv"
---

パスのリストを使用して、1つのスプリットに対して複数のファイルを選択できます。

my_dataset_repository/
├── README.md
├── data/
│   ├── abc.csv
│   └── def.csv
└── holdout/
    └── ghi.csv
---
configs:
- config_name: default
  data_files:
  - split: train
    path:
    - "data/abc.csv"
    - "data/def.csv"
  - split: test
    path: "holdout/ghi.csv"
---

または、globパターンを使用して、必要なすべてのファイルを自動的に一覧表示できます:

---
configs:
- config_name: default
  data_files:
  - split: train
    path: "data/*.csv"
  - split: test
    path: "holdout/*.csv"
---

単一の構成しかない場合でも、config_nameフィールドは必須であることに注意してください。

設定

データセットには、個別に読み込みたい複数のデータサブセットが含まれている場合があります。その場合は、YAMLのconfigsフィールド内で設定のリストを定義できます。

my_dataset_repository/
├── README.md
├── main_data.csv
└── additional_data.csv
---
configs:
- config_name: main_data
  data_files: "main_data.csv"
- config_name: additional_data
  data_files: "additional_data.csv"
---

各設定は Hugging Face Hub で個別に表示され、その名前を第2引数として渡すことで読み込むことができます:

from datasets import load_dataset

main_data = load_dataset("my_dataset_repository", "main_data")
additional_data = load_dataset("my_dataset_repository", "additional_data")

ビルダーパラメータ

data_files だけでなく、ビルダー固有のパラメータも YAML を介して渡すことができ、カスタムコードを必要とせずに、データの読み込み方法の柔軟性を高めることができます。例えば、csv ファイルを読み込む際にどの設定でどの区切り文字を使用するかを定義できます:

---
configs:
- config_name: tab
  data_files: "main_data.csv"
  sep: "\t"
- config_name: comma
  data_files: "additional_data.csv"
  sep: ","
---

使用可能な設定パラメータを確認するには、特定のビルダーのドキュメントを参照してください。

default: true を使用してデフォルトの構成を設定できます。例えば、main_data = load_dataset("my_dataset_repository") を実行できるようにするには、

- config_name: main_data
  data_files: "main_data.csv"
  default: true

自動スプリット検出

YAML が提供されていない場合、🤗 Datasets はデータセットリポジトリ内の特定のパターンを検索して、データセットの分割を自動的に推論します。 パターンには順序があり、カスタムファイル名の分割形式から始まり、パターンが見つからない場合はすべてのファイルを単一の分割として扱うことが最終的な処理です。

ディレクトリ名

データファイルは、train、test、validation という名前の異なるディレクトリに配置することもできます。各ディレクトリには、その分割に対応するデータファイルが含まれます。

my_dataset_repository/
├── README.md
└── data/
    ├── train/
    │   └── bees.csv
    ├── test/
    │   └── more_bees.csv
    └── validation/
        └── even_more_bees.csv

ファイル名による分割

非伝統的な分割がない場合、分割名はデータファイル内のどこに置いても自動的に推測されます。唯一のルールは、分割名が非単語文字で区切られていることです。例えば、testfile.csv ではなく test-file.csv のようにします。サポートされている区切り文字には、アンダースコア、ダッシュ、スペース、ドット、数字が含まれます。

例えば、次のようなファイル名はすべて許可されます。

  • train分割: train.csv、my_train_file.csv、train1.csv
  • 検証スプリット: validation.csv、my_validation_file.csv、validation1.csv
  • テスト分割: test.csv、my_test_file.csv、test1.csv

data という名前のディレクトリにすべてのファイルを配置する例を以下に示します:

my_dataset_repository/
├── README.md
└── data/
    ├── train.csv
    ├── test.csv
    └── validation.csv

カスタムファイル名による分割

データセットの分割がtrain、test、validation以外のカスタム名である場合、データファイル名をdata/<split_name>-xxxxx-of-xxxxx.csvのように指定できます。

3つのスプリット、train、test、randomの例を以下に示します。

my_dataset_repository/
├── README.md
└── data/
    ├── train-00000-of-00003.csv
    ├── train-00001-of-00003.csv
    ├── train-00002-of-00003.csv
    ├── test-00000-of-00001.csv
    ├── random-00000-of-00003.csv
    ├── random-00001-of-00003.csv
    └── random-00002-of-00003.csv

単一分割

🤗 Datasets が上記のパターンをいずれも検出できない場合、すべてのファイルを単一の train スプリットとして扱います。データセットのスプリットが想定通りに読み込まれない場合は、パターンが正しくないことが原因である可能性があります。

名前キーワードの分割

スプリットに名前を付ける方法はいくつかあります。バリデーションスプリットは「dev」と呼ばれることもあれば、テストスプリットは「eval」と呼ばれることもあります。 これらの他のスプリット名もサポートされており、以下のキーワードは同等です。

  • train, training
  • 検証、有効、val、dev
  • test, testing, eval, evaluation

以下の構造は有効なリポジトリです:

my_dataset_repository/
├── README.md
└── data/
    ├── training.csv
    ├── eval.csv
    └── valid.csv

スプリットごとの複数ファイル

スプリットの一つが複数のファイルで構成されている場合でも、🤗 Datasets はファイル名からそれが train、validation、test のいずれのスプリットであるかを推測できます。 例えば、train と test のスプリットが複数のファイルにまたがっている場合:

my_dataset_repository/
├── README.md
├── train_0.csv
├── train_1.csv
├── train_2.csv
├── train_3.csv
├── test_0.csv
└── test_1.csv

train セットに含まれるすべてのファイル名にtrain が含まれていることを確認してください(test と validation も同様です)。 ファイル名にtrain の前後に接頭辞や接尾辞を追加した場合(例えばmy_train_file_00001.csv など)でも、 🤗 Datasets は適切なスプリットを推論できます。

便宜のため、データファイルを異なるディレクトリに配置することもできます。 この場合、スプリット名はディレクトリ名から推測されます。

my_dataset_repository/
├── README.md
└── data/
    ├── train/
    │   ├── shard_0.csv
    │   ├── shard_1.csv
    │   ├── shard_2.csv
    │   └── shard_3.csv
    └── test/
        ├── shard_0.csv
        └── shard_1.csv
Update on GitHub