Datasets 文件

構建和載入

Hugging Face's logo
加入 Hugging Face 社群

並獲得增強的文件體驗

開始使用

構建和載入

幾乎所有的深度學習工作流程都始於載入資料集,這使得它成為最重要的步驟之一。藉助 🤗 Datasets,有超過 900 個數據集可供你開始進行 NLP 任務。你所要做的就是呼叫:load_dataset() 來邁出你的第一步。這個函式在各個方面都是一個真正的“主力”,因為它構建並載入你使用的每個資料集。

ELI5: load_dataset

讓我們從一個基本的“五歲小孩都能懂”的解釋開始。

資料集是一個包含以下內容的目錄:

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

load_dataset() 函式從本地或 Hugging Face Hub 獲取請求的資料集。Hub 是一箇中央儲存庫,所有 Hugging Face 資料集和模型都儲存在那裡。

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

閱讀分享部分,瞭解如何分享資料集的更多資訊。

🤗 Datasets 從原始 URL 下載資料集檔案,生成資料集並將其快取為硬碟上的 Arrow 表。如果你之前下載過資料集,那麼 🤗 Datasets 將從快取中重新載入它,以省去你再次下載的麻煩。

現在你已經對資料集的構建方式有了高層次的理解,讓我們更深入地瞭解這一切是如何運作的。

構建資料集

當你第一次載入資料集時,🤗 Datasets 會獲取原始資料檔案並將其構建成一個由行和型別化列組成的表。有兩個主要類負責構建資料集:BuilderConfigDatasetBuilder

BuilderConfig

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

屬性 描述
名稱 資料集的簡短名稱。
版本 資料集版本識別符號。
資料目錄 儲存包含資料檔案的本地資料夾路徑。
資料檔案 儲存本地資料檔案的路徑。
描述 資料集的描述。

如果你想為資料集新增額外的屬性,例如類標籤,你可以繼承基類 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 下載或檢索請求的資料檔案,將它們組織成切分,併為生成過程定義特定引數。此方法有一個 DownloadManager,用於下載檔案或從本地檔案系統獲取檔案。在 DownloadManager 中,有一個 DownloadManager.download_and_extract() 方法,它接受一個包含原始資料檔案 URL 的字典,並下載請求的檔案。接受的輸入包括:單個 URL 或路徑,或 URL 或路徑的列表/字典。任何壓縮檔案型別(如 TAR、GZIP 和 ZIP 存檔)都將自動提取。

    檔案下載完成後,SplitGenerator 會將它們組織成資料切分。SplitGenerator 包含資料切分的名稱,以及提供給 DatasetBuilder._generate_examples 方法的任何關鍵字引數。關鍵字引數可以特定於每個資料切分,並且通常至少包含每個資料切分的資料檔案的本地路徑。

  3. DatasetBuilder._generate_examples 讀取並解析資料切分的資料檔案。然後,它根據 DatasetBuilder._info()features 指定的格式生成資料集示例。DatasetBuilder._generate_examples 的輸入實際上是最後一個方法的關鍵字引數中提供的 filepath

    資料集由 Python 生成器生成,它不會將所有資料載入到記憶體中。因此,生成器可以處理大型資料集。但是,在生成的樣本重新整理到磁碟上的資料集檔案之前,它們會儲存在 ArrowWriter 緩衝區中。這意味著生成的樣本是批次寫入的。如果你的資料集樣本消耗大量記憶體(影像或影片),請確保在 DatasetBuilder 中為 DEFAULT_WRITER_BATCH_SIZE 屬性指定一個低值。我們建議不要超過 200 MB 的大小。

維護完整性

為確保資料集完整,load_dataset() 將對下載的檔案執行一系列測試,以確保所有內容都已到位。這樣,當請求的資料集未按預期生成時,你就不會遇到任何意外。load_dataset() 驗證:

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

如果資料集未能透過驗證,很可能是資料集作者對資料檔案進行了一些更改。

在這種情況下,會丟擲錯誤以提醒資料集已更改。要忽略該錯誤,需要在 load_dataset() 中指定 verification_mode="no_checks"。無論何時你看到驗證錯誤,請隨時在相應資料集的“社群”選項卡中開啟討論或拉取請求,以便更新該資料集的完整性檢查。

安全

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

< > 在 GitHub 上更新

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