資料集文件

建構與載入

Hugging Face's logo
加入 Hugging Face 社群

並獲得增強的文件體驗

開始使用

建構與載入

幾乎所有的深度學習工作流程都是從載入資料集開始的,這使其成為最重要的步驟之一。透過 🤗 Datasets,有超過 900 個資料集可供使用,幫助您開始自然語言處理(NLP)任務。您只需要呼叫 load_dataset() 即可邁出第一步。這個函式在各方面都是真正的核心工具,因為它負責建構與載入您所使用的每一個資料集。

ELI5(淺顯易懂說明):load_dataset

讓我們從一個淺顯易懂的基礎說明開始。

資料集是一個目錄,其中包含:

  • 一些通用格式的資料檔案(JSON、CSV、Parquet、文字檔等)。
  • 一個名為 README.md 的資料集卡片(Dataset Card),其中包含關於該資料集的說明文件,以及用於定義資料集標籤與配置的 YAML 標頭。

load_dataset() 函式會從本地端或 Hugging Face Hub 取得所要求的資料集。Hub 是一個中心儲存庫,所有的 Hugging Face 資料集與模型都儲存在這裡。

如果資料集僅包含資料檔案,那麼 load_dataset() 會自動根據副檔名(json、csv、parquet、txt 等)推斷如何載入這些檔案。在底層,🤗 Datasets 會根據資料檔案格式使用適當的 DatasetBuilder。在 🤗 Datasets 中,每種資料檔案格式都有一個對應的建構器:

閱讀 分享(Share) 章節以深入了解如何分享資料集。

🤗 Datasets 會從原始網址下載資料集檔案,產生資料集,並將其快取在您硬碟上的 Arrow 表格中。如果您之前已經下載過該資料集,🤗 Datasets 會直接從快取重新載入,省去您重複下載的麻煩。

現在您對資料集如何建構有了整體的理解,讓我們更深入地了解這一切運作的細節。

建構資料集

當您第一次載入資料集時,🤗 Datasets 會取得原始資料檔案並將其建構為包含行(rows)與具型別欄位(typed columns)的表格。有兩個主要的類別負責建構資料集:BuilderConfigDatasetBuilder

BuilderConfig

BuilderConfigDatasetBuilder 的配置類別。BuilderConfig 包含以下關於資料集的基本屬性:

屬性 說明
name 資料集的簡稱。
version 資料集版本識別碼。
data_dir 儲存包含資料檔案的本地資料夾路徑。
data_files 儲存本地資料檔案的路徑。
description 資料集的描述。

如果您想為您的資料集添加額外屬性(例如類別標籤),您可以繼承基礎的 BuilderConfig 類別。有兩種方式可以填入 BuilderConfig 類別或其子類別的屬性:

  • 在資料集的 DatasetBuilder.BUILDER_CONFIGS() 屬性中提供一組預先定義的 BuilderConfig 類別(或子類別)實例。

  • 當您呼叫 load_dataset() 時,任何不屬於該方法特有的關鍵字參數都將用於設定 BuilderConfig 類別的相關屬性。如果選擇了特定的配置,這將會覆寫預先定義的屬性。

您也可以將 DatasetBuilder.BUILDER_CONFIG_CLASS 設定為任何自定義的 BuilderConfig 子類別。

DatasetBuilder

DatasetBuilder 會存取 BuilderConfig 中的所有屬性以建構實際的資料集。

DatasetBuilder 中有三個主要方法:

  1. DatasetBuilder._info() 負責定義資料集屬性。當您呼叫 dataset.info 時,🤗 Datasets 會回傳儲存在此處的資訊。同樣地,Features 也在這裡指定。請記住,Features 就像是資料集的骨架,提供了每個欄位的名稱與型別。

  2. DatasetBuilder._split_generator 會下載或取得所要求的資料檔案,將它們組織成分割區(splits),並定義產生流程的特定參數。此方法具有一個 DownloadManager,用於下載檔案或從本地檔案系統取得它們。在 DownloadManager 中,有一個 DownloadManager.download_and_extract() 方法,它接受原始資料檔案的網址字典並下載所需的檔案。接受的輸入包含:單一網址或路徑,或網址/路徑的列表/字典。任何壓縮檔案格式(如 TAR、GZIP 與 ZIP 封存檔)都將被自動解壓縮。

    一旦檔案下載完成,SplitGenerator 就會將它們組織成分割區。SplitGenerator 包含分割區名稱以及提供給 DatasetBuilder._generate_examples 方法的任何關鍵字參數。這些關鍵字參數可以針對每個分割區進行指定,並且通常至少包含每個分割區的本地資料檔案路徑。

  3. DatasetBuilder._generate_examples 會讀取並解析分割區的資料檔案。然後,它會根據 DatasetBuilder._info()features 指定的格式產出資料集範例。DatasetBuilder._generate_examples 的輸入實際上是上一個方法中關鍵字參數所提供的 filepath

    資料集是使用 Python 生成器(generator)產生的,這不會將所有資料載入記憶體。因此,生成器可以處理大型資料集。不過,在產生的樣本被寫入磁碟上的資料集檔案之前,它們會先儲存在 ArrowWriter 緩衝區中。這表示產生的樣本是分批寫入的。如果您的資料集樣本佔用大量記憶體(如影像或影片),請務必在 DatasetBuilder 中為 DEFAULT_WRITER_BATCH_SIZE 屬性指定較小的值。我們建議大小不要超過 200 MB。

維護完整性

為確保資料集完整,load_dataset() 會對下載的檔案執行一系列測試,確保所有內容皆已到位。這樣一來,當您要求的資料集未如預期產生時,您就不會遇到意外狀況。load_dataset() 會驗證:

  • 產生的 DatasetDict 中的分割區數量。
  • 產生的 DatasetDict 中每個分割區的樣本數。
  • 下載的檔案列表。
  • 下載檔案的 SHA256 校驗和(預設為停用)。

如果資料集未通過驗證,則很可能是因為資料集作者對資料檔案進行了一些變更。

在這種情況下,系統會引發錯誤來提醒資料集已變更。若要忽略此錯誤,需在 load_dataset() 中指定 verification_mode="no_checks"。每當您看到驗證錯誤時,歡迎在對應資料集的「社群(Community)」標籤頁中開啟討論或提交合併請求(Pull Request),以便更新該資料集的完整性檢查。

安全性 (Security)

Hub 上的資料集儲存庫會進行惡意軟體掃描,更多資訊請參閱此處 在 GitHub 上更新

© . This site is unofficial and not affiliated with Hugging Face, Inc.