資料集文件
建構器類別
並獲得增強的文件體驗
開始使用
構建器類別
構建器 (Builders)
🤗 Datasets 在數據集構建過程中依賴兩個主要的類別:DatasetBuilder 與 BuilderConfig。
class datasets.DatasetBuilder
< 原始碼 >( cache_dir: typing.Optional[str] = None dataset_name: typing.Optional[str] = None config_name: typing.Optional[str] = None hash: typing.Optional[str] = None base_path: typing.Optional[str] = None info: typing.Optional[datasets.info.DatasetInfo] = None features: typing.Optional[datasets.features.features.Features] = None token: typing.Union[bool, str, NoneType] = None repo_id: typing.Optional[str] = None data_files: typing.Union[str, list, dict, datasets.data_files.DataFilesDict, NoneType] = None data_dir: typing.Optional[str] = None storage_options: typing.Optional[dict] = None writer_batch_size: typing.Optional[int] = None config_id: typing.Optional[str] = None **config_kwargs )
參數
- cache_dir (
str, 選填) — 快取數據的目錄。預設為"~/.cache/huggingface/datasets"。 - dataset_name (
str, 選填) — 數據集名稱,若與構建器名稱不同時使用。對於 csv、imagefolder、audiofolder 等打包構建器非常有用,用以區分使用相同打包構建器的不同數據集。 - config_name (
str, 選填) — 數據集配置名稱。它會影響磁碟上生成的數據。不同的配置將擁有各自的子目錄與版本。若未提供,則使用預設配置(如果存在)。於 2.3.0 新增
參數
name已更名為config_name。 - hash (
str, 選填) — 針對數據集構建器程式碼的雜湊值 (hash)。用於在數據集構建器程式碼更新時更新快取目錄(以避免重複使用舊數據)。典型的快取目錄(定義在self._relative_data_dir中)為name/version/hash/。 - base_path (
str, 選填) — 用於下載檔案的相對路徑之基礎路徑。這可以是一個遠端 URL。 - features (Features, 選填) — 此數據集使用的特徵類型。例如,它可用於更改數據集的 Features 類型。
- token (
str或bool, 選填) — 用作 Datasets Hub 上遠端檔案之 Bearer token 的字串或布林值。如果為True,將會從"~/.huggingface"取得 token。 - repo_id (
str, 選填) — 數據集儲存庫的 ID。用於區分名稱相同但來自不同命名空間的構建器,例如“rajpurkar/squad”與“lhoestq/squad”儲存庫 ID。在後者中,構建器名稱將為“lhoestq___squad”。 - data_files (
str或Sequence或Mapping, 選填) — 原始數據檔案的路徑。對於像 “csv” 或 “json” 這類需要用戶指定數據檔案的構建器。它們可以是本機檔案或遠端檔案。為方便起見,您可以使用DataFilesDict。 - data_dir (
str, 選填) — 包含原始數據檔案的目錄路徑。僅在未傳入data_files時使用,在這種情況下,這等同於將os.path.join(data_dir, "**")作為data_files傳入。對於需要手動下載的構建器,這必須是包含手動下載數據的本機目錄路徑。 - storage_options (
dict, 選填) — 要傳遞給數據集檔案系統後端的鍵/值對(如果有的話)。 - writer_batch_size (
int, 選填) — ArrowWriter 使用的批次大小。它定義了在寫入前保留在記憶體中的樣本數量,也定義了 arrow 區塊的長度。None 表示 ArrowWriter 將使用其預設值。 - **config_kwargs (額外關鍵字參數) — 要傳遞給對應構建器配置類別的關鍵字參數,該類別設置在類別屬性 DatasetBuilder.BUILDER_CONFIG_CLASS 上。構建器配置類別為 BuilderConfig 或其子類別。
所有數據集的抽象基底類別。
DatasetBuilder 有 3 個關鍵方法
DatasetBuilder.info:記錄數據集,包含特徵名稱、類型、形狀、版本、分割 (splits)、引用等。- DatasetBuilder.download_and_prepare():下載原始數據並將其寫入磁碟。
- DatasetBuilder.as_dataset():生成一個 Dataset。
某些 DatasetBuilder 通過定義 BuilderConfig 子類別並在建構時接受一個配置物件(或名稱),來公開數據的多個變體。可配置數據集在 DatasetBuilder.builder_configs() 中公開了一組預定義的配置。
as_dataset
< 原始碼 >( split: typing.Union[str, datasets.splits.Split, list[str], list[datasets.splits.Split], NoneType] = None run_post_process = True verification_mode: typing.Union[datasets.utils.info_utils.VerificationMode, str, NoneType] = None in_memory = False )
參數
- split (
datasets.Split) — 要回傳數據的哪個子集。 - run_post_process (
bool, 預設為True) — 是否執行後處理數據集轉換及/或添加索引。 - verification_mode (VerificationMode 或
str, 預設為BASIC_CHECKS) — 驗證模式,決定對下載/處理後的數據集資訊執行何種檢查(校驗和/大小/分割/…)。於 2.9.1 新增
- in_memory (
bool, 預設為False) — 是否將數據複製到記憶體中。
回傳指定分割的數據集 (Dataset)。
download_and_prepare
< 原始碼 >( output_dir: typing.Optional[str] = None download_config: typing.Optional[datasets.download.download_config.DownloadConfig] = None download_mode: typing.Union[datasets.download.download_manager.DownloadMode, str, NoneType] = None verification_mode: typing.Union[datasets.utils.info_utils.VerificationMode, str, NoneType] = None dl_manager: typing.Optional[datasets.download.download_manager.DownloadManager] = None base_path: typing.Optional[str] = None file_format: str = 'arrow' max_shard_size: typing.Union[str, int, NoneType] = None num_proc: typing.Optional[int] = None storage_options: typing.Optional[dict] = None **download_and_prepare_kwargs )
參數
- output_dir (
str, 選填) — 數據集的輸出目錄。預設為此構建器的cache_dir,預設在~/.cache/huggingface/datasets內部。於 2.5.0 新增
- download_config (
DownloadConfig, 選填) — 特定的下載配置參數。 - download_mode (DownloadMode 或
str, 選填) — 選擇下載/生成模式,預設為REUSE_DATASET_IF_EXISTS。 - verification_mode (VerificationMode 或
str, 預設為BASIC_CHECKS) — 驗證模式,決定對下載/處理後的數據集資訊執行何種檢查(校驗和/大小/分割/…)。於 2.9.1 新增
- dl_manager (
DownloadManager, 選填) — 要使用的特定DownloadManger。 - base_path (
str, 選填) — 用於下載檔案的相對路徑之基礎路徑。這可以是一個遠端 url。如果未指定,將改為使用base_path屬性 (self.base_path) 的值。 - file_format (
str, 選填) — 將要寫入數據集的數據檔案格式。支援的格式:“arrow”、“parquet”。預設為 “arrow” 格式。如果格式為 “parquet”,則圖像和音訊數據將嵌入到 Parquet 檔案中,而不是指向本機檔案。於 2.5.0 新增
- max_shard_size (
Union[str, int], 選填) — 每個 shard 寫入的最大位元組數,預設為 “500MB”。大小基於未壓縮數據的大小,因此實際上您的 shard 檔案可能會小於max_shard_size,例如由於 Parquet 壓縮的緣故。於 2.5.0 新增
- num_proc (
int, 選填, 預設為None) — 在本地下載和生成數據集時的處理程序數量。預設禁用多重處理。於 2.7.0 新增
- storage_options (
dict, 選填) — 要傳遞給快取檔案系統後端的鍵/值對(如果有的話)。於 2.5.0 新增
- **download_and_prepare_kwargs (額外關鍵字參數) — 關鍵字參數。
下載並準備用於讀取的數據集。
範例
下載並將數據集準備為 Arrow 檔案,這些檔案可以使用 builder.as_dataset() 作為數據集加載
>>> from datasets import load_dataset_builder
>>> builder = load_dataset_builder("cornell-movie-review-data/rotten_tomatoes")
>>> builder.download_and_prepare()在本地下載並準備數據集為分片 (sharded) 的 Parquet 檔案
>>> from datasets import load_dataset_builder
>>> builder = load_dataset_builder("cornell-movie-review-data/rotten_tomatoes")
>>> builder.download_and_prepare("./output_dir", file_format="parquet")在雲端儲存中下載並準備數據集為分片的 Parquet 檔案
>>> from datasets import load_dataset_builder
>>> storage_options = {"key": aws_access_key_id, "secret": aws_secret_access_key}
>>> builder = load_dataset_builder("cornell-movie-review-data/rotten_tomatoes")
>>> builder.download_and_prepare("s3://my-bucket/my_rotten_tomatoes", storage_options=storage_options, file_format="parquet")回傳此類別或子類別的模組路徑。
class datasets.GeneratorBasedBuilder
< 原始碼 >( cache_dir: typing.Optional[str] = None dataset_name: typing.Optional[str] = None config_name: typing.Optional[str] = None hash: typing.Optional[str] = None base_path: typing.Optional[str] = None info: typing.Optional[datasets.info.DatasetInfo] = None features: typing.Optional[datasets.features.features.Features] = None token: typing.Union[bool, str, NoneType] = None repo_id: typing.Optional[str] = None data_files: typing.Union[str, list, dict, datasets.data_files.DataFilesDict, NoneType] = None data_dir: typing.Optional[str] = None storage_options: typing.Optional[dict] = None writer_batch_size: typing.Optional[int] = None config_id: typing.Optional[str] = None **config_kwargs )
基底類別,用於基於字典生成器的數據生成數據集。
GeneratorBasedBuilder 是一個便捷類別,它抽象化了 DatasetBuilder 的許多數據寫入與讀取工作。它要求子類別實作跨數據集分割 (dataset splits) 的特徵字典生成器 (_split_generators)。詳細資訊請參見方法文件字串。
class datasets.ArrowBasedBuilder
< 原始碼 >( cache_dir: typing.Optional[str] = None dataset_name: typing.Optional[str] = None config_name: typing.Optional[str] = None hash: typing.Optional[str] = None base_path: typing.Optional[str] = None info: typing.Optional[datasets.info.DatasetInfo] = None features: typing.Optional[datasets.features.features.Features] = None token: typing.Union[bool, str, NoneType] = None repo_id: typing.Optional[str] = None data_files: typing.Union[str, list, dict, datasets.data_files.DataFilesDict, NoneType] = None data_dir: typing.Optional[str] = None storage_options: typing.Optional[dict] = None writer_batch_size: typing.Optional[int] = None config_id: typing.Optional[str] = None **config_kwargs )
基底類別,用於基於 Arrow 加載函數 (CSV/JSON/Parquet) 生成數據的數據集。
class datasets.BuilderConfig
< 原始碼 >( name: str = 'default' version: typing.Union[datasets.utils.version.Version, str, NoneType] = 0.0.0 data_dir: typing.Optional[str] = None data_files: typing.Union[datasets.data_files.DataFilesDict, datasets.data_files.DataFilesPatternsDict, NoneType] = None description: typing.Optional[str] = None )
DatasetBuilder 數據配置的基底類別。
具有數據配置選項的 DatasetBuilder 子類別應繼承 BuilderConfig 並添加其自己的屬性。
create_config_id
< 原始碼 >( config_kwargs: dict custom_features: typing.Optional[datasets.features.features.Features] = None )
config id 用於建立快取目錄。預設情況下,它等於配置名稱。然而,配置名稱不足以作為正在生成的數據集的唯一識別碼,因為它沒有考慮到
- 可用於覆蓋屬性的 config kwargs
- 用於寫入數據集的自定義特徵
- json/text/csv/pandas 數據集的 data_files
因此,config id 只是配置名稱,並根據上述內容加上一個選填的後綴。
下載
class datasets.DownloadManager
< 原始碼 >( dataset_name: typing.Optional[str] = None data_dir: typing.Optional[str] = None download_config: typing.Optional[datasets.download.download_config.DownloadConfig] = None base_path: typing.Optional[str] = None record_checksums = True )
download (下載)
< 原始碼 >( url_or_urls ) → str 或 list 或 dict
下載給定的 URL。
預設情況下,僅使用一個處理程序進行下載。傳遞自定義的 download_config.num_proc 以更改此行為。
download_and_extract
< 原始碼 >( url_or_urls ) → 解壓縮後的路徑
下載並解壓縮給定的 url_or_urls。
extract
< 原始碼 >( path_or_paths ) → 解壓縮後的路徑
解壓縮指定的路徑。
iter_archive
< 原始碼 >( path_or_buf: typing.Union[str, _io.BufferedReader] ) → tuple[str, io.BufferedReader]
迭代封存檔內的檔案。
iter_files
< 原始碼 >( paths: typing.Union[str, list[str]] ) → str
迭代檔案路徑。
class datasets.StreamingDownloadManager
< 原始碼 >( dataset_name: typing.Optional[str] = None data_dir: typing.Optional[str] = None download_config: typing.Optional[datasets.download.download_config.DownloadConfig] = None base_path: typing.Optional[str] = None )
使用 "::" 分隔符號來導覽(可能是遠端的)壓縮封存檔的下載管理器。與一般的 DownloadManager 不同,download 和 extract 方法並不會實際下載或解壓縮資料,而是傳回可以使用 xopen 函式開啟的路徑或 URL;xopen 函式擴充了內建的 open 函式,以從遠端檔案串流傳輸資料。
download (下載)
< 原始碼 >( url_or_urls ) → url(s)
標準化用於串流資料的檔案 URL。這是用於串流的 DownloadManager.download 之惰性版本。
download_and_extract
< 原始碼 >( url_or_urls ) → url(s)
為串流準備指定的 url_or_urls(添加解壓縮協定)。
這是用於串流的 DownloadManager.download_and_extract 之惰性版本。
extract
< 原始碼 >( url_or_urls ) → url(s)
為指定的 url(s) 添加用於串流的解壓縮協定。
這是用於串流的 DownloadManager.extract 之惰性版本。
iter_archive
< 原始碼 >( urlpath_or_buf: typing.Union[str, _io.BufferedReader] ) → tuple[str, io.BufferedReader]
迭代封存檔內的檔案。
iter_files
< 原始碼 >( urlpaths: typing.Union[str, list[str]] ) → str
迭代檔案。
class datasets.DownloadConfig
< 原始碼 >( cache_dir: typing.Union[str, pathlib.Path, NoneType] = None force_download: bool = False resume_download: bool = False local_files_only: bool = False proxies: typing.Optional[dict] = None user_agent: typing.Optional[str] = None extract_compressed_file: bool = False force_extract: bool = False delete_extracted: bool = False extract_on_the_fly: bool = False use_etag: bool = True num_proc: typing.Optional[int] = None max_retries: int = 1 token: typing.Union[str, bool, NoneType] = None storage_options: dict = <factory> download_desc: typing.Optional[str] = None disable_tqdm: bool = False )
參數
- cache_dir (
str或Path,選填) — 指定用於儲存檔案的快取目錄(將覆寫預設快取目錄)。 - force_download (
bool,預設為False) — 若為True,即使檔案已存在於快取目錄中,仍會重新下載。 - resume_download (
bool,預設為False) — 若為True,則在發現未接收完的檔案時,從上次中斷處繼續下載。 - proxies (
dict,選填) — - user_agent (
str,選填) — 將附加到遠端請求 User-Agent 的選填字串或字典。 - extract_compressed_file (
bool,預設為False) — 若為True且路徑指向 zip 或 tar 檔案,則將壓縮檔解壓縮至該封存檔所在的資料夾中。 - force_extract (
bool,預設為False) — 若extract_compressed_file為True且檔案已解壓縮,若此值為True,則會重新解壓縮並覆寫原先解壓縮的資料夾。 - delete_extracted (
bool,預設為False) — 是否刪除(或保留)已解壓縮的檔案。 - extract_on_the_fly (
bool,預設為False) — 若為True,則在讀取壓縮檔時即時解壓縮。 - use_etag (
bool,預設為True) — 是否使用 ETag HTTP 回應標頭來驗證快取檔案。 - num_proc (
int,選填) — 啟動並行下載檔案的處理程序數量。 - max_retries (
int,預設為1) — HTTP 請求失敗時的重試次數。 - token (
str或bool,選填) — 用作 Datasets Hub 上遠端檔案 Bearer token 的選填字串或布林值。若為True或未指定,將會從~/.huggingface取得 token。 - storage_options (
dict,選填) — 若有,將傳遞給資料集檔案系統後端的鍵值對。 - download_desc (
str,選填) — 下載檔案時與進度條一同顯示的說明。 - disable_tqdm (
bool,預設為False) — 是否停用個別檔案的下載進度條。
快取路徑管理器的設定。
class datasets.DownloadMode
< 原始碼 >( value names = None module = None qualname = None type = None start = 1 )
用於處理預先存在的下載內容與資料的 Enum。
預設模式為 REUSE_DATASET_IF_EXISTS,若原始下載內容與準備好的資料集皆已存在,將會直接重複使用。
生成模式
| 下載 | 資料集 | |
|---|---|---|
REUSE_DATASET_IF_EXISTS (預設) | 重複使用 | 重複使用 |
REUSE_CACHE_IF_EXISTS | 重複使用 | 全新 |
FORCE_REDOWNLOAD | 全新 | 全新 |
驗證
class datasets.VerificationMode
< 原始碼 >( value names = None module = None qualname = None type = None start = 1 )
指定執行哪些驗證檢查的 Enum。
預設模式為 BASIC_CHECKS,僅執行基礎檢查以避免在首次產生/下載資料集時速度過慢。
驗證模式
| 驗證檢查 | |
|---|---|
ALL_CHECKS | 檢查下載檔案的分割與有效性(檔案數量、校驗和) |
BASIC_CHECKS (預設) | 與 ALL_CHECKS 相同,但不檢查下載的檔案 |
NO_CHECKS | None |
分割 (Splits)
class datasets.SplitGenerator
< 原始碼 >( name: str gen_kwargs: dict = <factory> )
定義產生器的分割資訊。
這應該作為 GeneratorBasedBuilder._split_generators 的回傳值。更多資訊與使用範例,請參閱 GeneratorBasedBuilder._split_generators。
用於資料集分割的 Enum。
資料集通常會被分割成不同的子集,以用於訓練和評估的各個階段。
TRAIN:訓練資料。VALIDATION:驗證資料。若存在,通常在模型疊代期間(例如更改超參數、模型架構等)用作評估資料。TEST:測試資料。這是用於報告指標的資料。通常在模型疊代期間不建議使用,因為可能會導致對其過度擬合。ALL:所有定義的資料集分割的聯集。
所有分割(包括組合)皆繼承自 datasets.SplitBase。
更多資訊請參閱關於分割的指南。
範例
>>> datasets.SplitGenerator(
... name=datasets.Split.TRAIN,
... gen_kwargs={"split_key": "train", "files": dl_manager.download_and extract(url)},
... ),
... datasets.SplitGenerator(
... name=datasets.Split.VALIDATION,
... gen_kwargs={"split_key": "validation", "files": dl_manager.download_and extract(url)},
... ),
... datasets.SplitGenerator(
... name=datasets.Split.TEST,
... gen_kwargs={"split_key": "test", "files": dl_manager.download_and extract(url)},
... )對應於具名分割(train, test, …)的描述元。
範例
每個描述元皆可透過加法或切片 (slice) 與其他描述元組合
split = datasets.Split.TRAIN.subsplit(datasets.percent[0:25]) + datasets.Split.TEST產生的分割將對應於訓練分割的 25% 與測試分割的 100% 的合併結果。
分割不能重複添加,因此以下操作會失敗
split = (
datasets.Split.TRAIN.subsplit(datasets.percent[:25]) +
datasets.Split.TRAIN.subsplit(datasets.percent[75:])
) # Error
split = datasets.Split.TEST + datasets.Split.ALL # Error對應於所有已定義資料集分割聯集的分割。
class datasets.ReadInstruction
< 原始碼 >( split_name rounding = None from_ = None to = None unit = None )
資料集的讀取指令。
範例
# The following lines are equivalent:
ds = datasets.load_dataset('ylecun/mnist', split='test[:33%]')
ds = datasets.load_dataset('ylecun/mnist', split=datasets.ReadInstruction.from_spec('test[:33%]'))
ds = datasets.load_dataset('ylecun/mnist', split=datasets.ReadInstruction('test', to=33, unit='%'))
ds = datasets.load_dataset('ylecun/mnist', split=datasets.ReadInstruction(
'test', from_=0, to=33, unit='%'))
# The following lines are equivalent:
ds = datasets.load_dataset('ylecun/mnist', split='test[:33%]+train[1:-1]')
ds = datasets.load_dataset('ylecun/mnist', split=datasets.ReadInstruction.from_spec(
'test[:33%]+train[1:-1]'))
ds = datasets.load_dataset('ylecun/mnist', split=(
datasets.ReadInstruction('test', to=33, unit='%') +
datasets.ReadInstruction('train', from_=1, to=-1, unit='abs')))
# The following lines are equivalent:
ds = datasets.load_dataset('ylecun/mnist', split='test[:33%](pct1_dropremainder)')
ds = datasets.load_dataset('ylecun/mnist', split=datasets.ReadInstruction.from_spec(
'test[:33%](pct1_dropremainder)'))
ds = datasets.load_dataset('ylecun/mnist', split=datasets.ReadInstruction(
'test', from_=0, to=33, unit='%', rounding="pct1_dropremainder"))
# 10-fold validation:
tests = datasets.load_dataset(
'ylecun/mnist',
[datasets.ReadInstruction('train', from_=k, to=k+10, unit='%')
for k in range(0, 100, 10)])
trains = datasets.load_dataset(
'ylecun/mnist',
[datasets.ReadInstruction('train', to=k, unit='%') + datasets.ReadInstruction('train', from_=k+10, unit='%')
for k in range(0, 100, 10)])from_spec
< 原始碼 >( spec )
從字串規範(string spec)建立一個 ReadInstruction 實例。
範例
test: test split.
test + validation: test split + validation split.
test[10:]: test split, minus its first 10 records.
test[:10%]: first 10% records of test split.
test[:20%](pct1_dropremainder): first 10% records, rounded with the pct1_dropremainder rounding.
test[:-5%]+train[40%:60%]: first 95% of test + middle 20% of train.將指令轉換為絕對指令列表。
這些絕對指令隨後將會加總在一起。
Version(版本)
class datasets.Version
< 原始碼 >( version_str: str description: typing.Optional[str] = None major: typing.Union[str, int, NoneType] = None minor: typing.Union[str, int, NoneType] = None patch: typing.Union[str, int, NoneType] = None )
資料集版本 MAJOR.MINOR.PATCH。