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

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

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

## 主なユースケース

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

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

```
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`フィールドを追加することで、スプリットを定義できます。

```yaml
---
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
```

```yaml
---
configs:
- config_name: default
  data_files:
  - split: train
    path:
    - "data/abc.csv"
    - "data/def.csv"
  - split: test
    path: "holdout/ghi.csv"
---
```

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

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

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

## 設定

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

```
my_dataset_repository/
├── README.md
├── main_data.csv
└── additional_data.csv
```

```yaml
---
configs:
- config_name: main_data
  data_files: "main_data.csv"
- config_name: additional_data
  data_files: "additional_data.csv"
---
```

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

```python
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` ファイルを読み込む際にどの設定でどの区切り文字を使用するかを定義できます:

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

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

> [!TIP]
> `default: true` を使用してデフォルトの構成を設定できます。例えば、`main_data = load_dataset("my_dataset_repository")` を実行できるようにするには、
>
> ```yaml
> - 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
```

