Datasets 文件
庫結構
並獲得增強的文件體驗
開始使用
庫結構
要託管和共享您的資料集,請在 Hugging Face Hub 上建立一個數據集庫並上傳您的資料檔案。
本指南將向您展示上傳資料集時如何構建資料集庫。具有受支援結構和檔案格式(`.txt`、`.csv`、`.parquet`、`.jsonl`、`.mp3`、`.jpg`、`.zip` 等)的資料集將透過 `load_dataset()` 自動載入,並且其在 Hub 上的資料集頁面上會有一個數據集檢視器。
主要用例
最簡單的資料集結構包含兩個檔案:`train.csv` 和 `test.csv`(這適用於任何受支援的檔案格式)。
您的庫還將包含一個 `README.md` 檔案,即顯示在資料集頁面上的資料集卡片。
my_dataset_repository/
├── README.md
├── train.csv
└── test.csv
在這種簡單情況下,您將獲得一個包含兩個拆分的資料集:`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"
---
您可以使用路徑列表為每個拆分選擇多個檔案。
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"
---
或者您可以使用萬用字元模式自動列出您需要的所有檔案。
---
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 上單獨顯示,並且可以透過將其名稱作為第二個引數傳遞來載入。
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
檔名拆分
如果您沒有任何非傳統拆分,那麼您可以將拆分名稱放置在資料檔案中的任何位置,它將自動推斷。唯一的規則是拆分名稱必須由非單詞字元分隔,例如 `test-file.csv` 而不是 `testfile.csv`。支援的分隔符包括下劃線、破折號、空格、點和數字。
例如,以下檔名都是可接受的:
- 訓練拆分:`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/
這是一個包含三個拆分(`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 找不到任何上述模式時,它將把所有檔案視為單個訓練拆分。如果您的資料集拆分未按預期載入,則可能是由於模式不正確。
拆分名稱關鍵字
有幾種命名拆分的方式。驗證拆有時稱為“dev”,測試拆可能被稱為“eval”。也支援這些其他拆分名稱,以下關鍵字是等效的:
- train, training (訓練)
- validation, valid, val, dev (驗證)
- test, testing, eval, evaluation (測試)
以下結構是有效的儲存庫:
my_dataset_repository/
├── README.md
└── data/
├── training.csv
├── eval.csv
└── valid.csv
每個拆分多個檔案
如果您的某個拆分包含多個檔案,🤗 Datasets 仍然可以從檔名推斷出它是訓練、驗證和測試拆分。例如,如果您的訓練和測試拆分跨越多個檔案:
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*(測試和驗證檔案也一樣)。即使您在檔名中為 `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