# ビルドとロード

ほぼすべての深層学習ワークフローはデータセットの読み込みから始まるため、これは最も重要なステップの一つです。🤗 Datasets を使用すると、NLP タスクの開始に役立つ 900 以上のデータセットが利用できます。最初の一歩を踏み出すには、[load_dataset()](/docs/datasets/main/ja/package_reference/loading_methods#datasets.load_dataset) を呼び出すだけです。この関数は、使用するすべてのデータセットを構築して読み込むため、あらゆる意味で真の主力機能です。

## ELI5: `load_dataset`

まずは、5歳児にもわかるような基本的な説明から始めましょう。

データセットは、以下を含むディレクトリです:

- 汎用形式（JSON、CSV、Parquet、テキストなど）のデータファイル
- データセットに関するドキュメントと、データセットのタグや設定を定義するためのYAMLヘッダーを含む、`README.md` という名前のデータセットカード

[load_dataset()](/docs/datasets/main/ja/package_reference/loading_methods#datasets.load_dataset) 関数は、要求されたデータセットをローカルまたは Hugging Face Hub から取得します。Hub は、すべての Hugging Face データセットとモデルが保存される中央リポジトリです。

データセットにデータファイルのみが含まれている場合、[load_dataset()](/docs/datasets/main/ja/package_reference/loading_methods#datasets.load_dataset)は拡張子（json、csv、parquet、tsfile、txt など）からデータファイルの読み込み方法を自動的に推測します。内部では、🤗 Datasetsはデータファイルの形式に基づいて適切な[DatasetBuilder](/docs/datasets/main/ja/package_reference/builder_classes#datasets.DatasetBuilder)を使用します。🤗 Datasetsには、データファイルの形式ごとに1つのビルダーが存在します：

* テキストには [datasets.packaged_modules.text.Text](/docs/datasets/main/ja/package_reference/loading_methods#datasets.packaged_modules.text.Text)
* CSVおよびTSVには[datasets.packaged_modules.csv.Csv](/docs/datasets/main/ja/package_reference/loading_methods#datasets.packaged_modules.csv.Csv)
* JSONおよびJSONLには[datasets.packaged_modules.json.Json](/docs/datasets/main/ja/package_reference/loading_methods#datasets.Json)
* Parquet には [datasets.packaged_modules.parquet.Parquet](/docs/datasets/main/ja/package_reference/loading_methods#datasets.packaged_modules.parquet.Parquet)
* Arrow（ストリーミングファイル形式）には [datasets.packaged_modules.arrow.Arrow](/docs/datasets/main/ja/package_reference/loading_methods#datasets.packaged_modules.arrow.Arrow)
* SQLデータベース用の[datasets.packaged_modules.sql.Sql](/docs/datasets/main/ja/package_reference/loading_methods#datasets.packaged_modules.sql.Sql)
* TsFile（時系列データ）用の[datasets.packaged_modules.tsfile.TsFile](/docs/datasets/main/ja/package_reference/loading_methods#datasets.packaged_modules.tsfile.TsFile)
* 画像フォルダには[datasets.packaged_modules.imagefolder.ImageFolder](/docs/datasets/main/ja/package_reference/loading_methods#datasets.packaged_modules.imagefolder.ImageFolder)を使用します
* 音声フォルダには[datasets.packaged_modules.audiofolder.AudioFolder](/docs/datasets/main/ja/package_reference/loading_methods#datasets.packaged_modules.audiofolder.AudioFolder)

> [!TIP]
> [Share](./upload_dataset)セクションを読んで、データセットの共有方法について詳しく学びましょう。

🤗 Datasets は元の URL からデータセットファイルをダウンロードし、データセットを生成して、ドライブ上の Arrow テーブルとしてキャッシュします。以前にデータセットをダウンロードしたことがある場合、🤗 Datasets はキャッシュから読み込むため、再度ダウンロードする手間を省くことができます。

データセットの構築方法について高レベルな理解を得たところで、次は、その仕組みの詳細な部分に目を向けてみましょう。

## データセットの構築

データセットを初めて読み込むと、🤗 Datasets は生データファイルを受け取り、行と型付きの列からなるテーブルに構築します。データセットの構築を担当する主なクラスは2つあり、[BuilderConfig](/docs/datasets/main/ja/package_reference/builder_classes#datasets.BuilderConfig)と[DatasetBuilder](/docs/datasets/main/ja/package_reference/builder_classes#datasets.DatasetBuilder)です。

   

### BuilderConfig[[datasets-builderconfig]]

[BuilderConfig](/docs/datasets/main/ja/package_reference/builder_classes#datasets.BuilderConfig)は[DatasetBuilder](/docs/datasets/main/ja/package_reference/builder_classes#datasets.DatasetBuilder)の設定クラスです。[BuilderConfig](/docs/datasets/main/ja/package_reference/builder_classes#datasets.BuilderConfig)には、データセットに関する以下の基本的な属性が含まれます。

| 属性     | 説明                                                  |
|---------------|--------------------------------------------------------------|
| `name`        | データセットの短い名前。                                   |
| `version`     | Datasetのバージョン識別子。                                  |
| `data_dir`    | データファイルを含むローカルフォルダへのパスを保存します。 |
| `data_files`  | ローカルデータファイルへのパスを保存します。                            |
| `description` | データセットの説明                                  |

クラスラベルなどの追加属性をデータセットに追加したい場合は、ベースの[BuilderConfig](/docs/datasets/main/ja/package_reference/builder_classes#datasets.BuilderConfig)クラスをサブクラス化できます。[BuilderConfig](/docs/datasets/main/ja/package_reference/builder_classes#datasets.BuilderConfig)クラスまたはそのサブクラスの属性を設定するには、2つの方法があります。

- datasetsの`DatasetBuilder.BUILDER_CONFIGS()`属性に、[BuilderConfig](/docs/datasets/main/ja/package_reference/builder_classes#datasets.BuilderConfig)クラス（またはそのサブクラス）のインスタンスのリストを定義済みとして提供します。

- [load_dataset()](/docs/datasets/main/ja/package_reference/loading_methods#datasets.load_dataset)を呼び出すと、メソッド固有でないキーワード引数は、[BuilderConfig](/docs/datasets/main/ja/package_reference/builder_classes#datasets.BuilderConfig)クラスの関連する属性を設定するために使用されます。これにより、特定の構成が選択されている場合、事前に定義された属性が上書きされます。

[DatasetBuilder.BUILDER_CONFIG_CLASS](/docs/datasets/main/ja/package_reference/builder_classes#datasets.BuilderConfig)を、[BuilderConfig](/docs/datasets/main/ja/package_reference/builder_classes#datasets.BuilderConfig)の任意のカスタムサブクラスに設定することもできます。

### DatasetBuilder[[datasets-datasetbuilder]]

[DatasetBuilder](/docs/datasets/main/ja/package_reference/builder_classes#datasets.DatasetBuilder) は、[BuilderConfig](/docs/datasets/main/ja/package_reference/builder_classes#datasets.BuilderConfig) 内のすべての属性にアクセスして、実際のデータセットを構築します。

   

[DatasetBuilder](/docs/datasets/main/ja/package_reference/builder_classes#datasets.DatasetBuilder)には、主に3つのメソッドがあります:

1. `DatasetBuilder._info()` は、データセットの属性を定義する役割を担っています。`dataset.info` を呼び出すと、🤗 Datasets はここに保存されている情報が返されます。同様に、[Features](/docs/datasets/main/ja/package_reference/main_classes#datasets.Features) もここで指定されます。[Features](/docs/datasets/main/ja/package_reference/main_classes#datasets.Features) はデータセットの骨格のようなもので、各カラムの名前と型を提供します。

2. `DatasetBuilder._split_generator` は、要求されたデータファイルをダウンロードまたは取得し、スプリットに整理して、生成プロセスのための特定の引数を定義します。このメソッドには、ファイルをダウンロードするか、ローカルファイルシステムから取得する [DownloadManager](/docs/datasets/main/ja/package_reference/builder_classes#datasets.DownloadManager) が含まれています。[DownloadManager](/docs/datasets/main/ja/package_reference/builder_classes#datasets.DownloadManager) 内には、元のデータファイルへの URL の辞書を受け取り、要求されたファイルをダウンロードする [DownloadManager.download_and_extract()](/docs/datasets/main/ja/package_reference/builder_classes#datasets.DownloadManager.download_and_extract) メソッドがあります。受け入れられる入力には、単一の URL またはパス、または URL またはパスのリスト/辞書が含まれます。TAR、GZIP、ZIP アーカイブなどの圧縮ファイル形式は、自動的に展開されます。

   ファイルのダウンロードが完了すると、[SplitGenerator](/docs/datasets/main/ja/package_reference/builder_classes#datasets.SplitGenerator) がそれらをスプリットに整理します。[SplitGenerator](/docs/datasets/main/ja/package_reference/builder_classes#datasets.SplitGenerator) にはスプリットの名前と、`DatasetBuilder._generate_examples` メソッドに渡されるすべてのキーワード引数が含まれます。キーワード引数はスプリットごとに固有のものであり、通常は各スプリットに対するデータファイルのローカルパスを少なくとも含みます。

3. `DatasetBuilder._generate_examples` は、スプリット用のデータファイルを読み込み、解析します。その後、`DatasetBuilder._info()` の `features` で指定された形式に従って、データセットの例を生成します。`DatasetBuilder._generate_examples` の入力値は、実際には最後のメソッドのキーワード引数で提供された `filepath` です。

   データセットは、すべてのデータをメモリに読み込まないPythonのジェネレーターによって生成されます。そのため、ジェネレーターは大きなデータセットを処理できます。ただし、生成されたサンプルがディスク上のデータセットファイルに書き出される（フラッシュされる）前に、`ArrowWriter`バッファに格納されます。つまり、生成されたサンプルはバッチ単位で書き出されます。データセットのサンプルが大量のメモリを消費する（画像や動画など）場合は、[DatasetBuilder](/docs/datasets/main/ja/package_reference/builder_classes#datasets.DatasetBuilder)の`DEFAULT_WRITER_BATCH_SIZE`属性に低い値を指定してください。200 MBを超えるサイズは避けることをお勧めします。

## 整合性の維持

データセットが完全であることを保証するために、[load_dataset()](/docs/datasets/main/ja/package_reference/loading_methods#datasets.load_dataset)はダウンロードされたファイルに対して一連のテストを実行し、すべてが揃っていることを確認します。これにより、要求したデータセットが想定どおりに生成されない場合に、予期せぬ問題に遭遇することがなくなります。[load_dataset()](/docs/datasets/main/ja/package_reference/loading_methods#datasets.load_dataset)は以下を検証します:

- 生成された`DatasetDict`のスプリット数。
- 生成された`DatasetDict`の各分割におけるサンプル数。
- ダウンロードされたファイルのリスト。
- ダウンロードされたファイルのSHA256チェックサム（デフォルトでは無効）。

データセットが検証に合格しない場合、データセットの作成者がデータファイルに変更を加えた可能性が高いです。

この場合、データセットが変更されたことを示すエラーが発生します。このエラーを無視するには、[load_dataset()](/docs/datasets/main/ja/package_reference/loading_methods#datasets.load_dataset) で `verification_mode="no_checks"` を指定する必要があります。検証エラーが発生した場合は、対応するデータセットの「Community」タブでディスカッションやプルリクエストを作成して、そのデータセットの整合性チェックが更新されるようご協力ください。

## セキュリティ

Hub上のデータセットリポジトリはマルウェアのスキャン対象です。詳細は[こちら](https://huggingface.co/docs/hub/security#malware-scanning)をご覧ください。

