LLM 課程文件

如果我的資料集不在 Hub 上怎麼辦?

Hugging Face's logo
加入 Hugging Face 社群

並獲得增強的文件體驗

開始使用

如果我的資料集不在 Hub 上怎麼辦?

Ask a Question Open In Colab Open In Studio Lab

您知道如何使用 Hugging Face Hub 下載資料集,但您經常會發現自己處理的資料儲存在筆記型電腦或遠端伺服器上。在本節中,我們將向您展示如何使用 🤗 Datasets 載入 Hugging Face Hub 上不可用的資料集。

處理本地和遠端資料集

🤗 Datasets 提供載入指令碼來處理本地和遠端資料集的載入。它支援幾種常見的資料格式,例如:

資料格式 載入指令碼 示例
CSV 和 TSV csv load_dataset("csv", data_files="my_file.csv")
文字檔案 text load_dataset("text", data_files="my_file.txt")
JSON 和 JSON Lines json load_dataset("json", data_files="my_file.jsonl")
Pickled DataFrames pandas load_dataset("pandas", data_files="my_dataframe.pkl")

如表格所示,對於每種資料格式,我們只需在 load_dataset() 函式中指定載入指令碼的型別,以及一個 data_files 引數,該引數指定一個或多個檔案的路徑。讓我們首先從本地檔案載入資料集;稍後我們將看到如何使用遠端檔案執行相同的操作。

載入本地資料集

對於此示例,我們將使用 SQuAD-it 資料集,這是一個用於義大利語問答的大規模資料集。

訓練和測試拆分託管在 GitHub 上,因此我們可以使用簡單的 wget 命令下載它們:

!wget https://github.com/crux82/squad-it/raw/master/SQuAD_it-train.json.gz
!wget https://github.com/crux82/squad-it/raw/master/SQuAD_it-test.json.gz

這將下載兩個壓縮檔案,名為 SQuAD_it-train.json.gzSQuAD_it-test.json.gz,我們可以使用 Linux gzip 命令解壓它們:

!gzip -dkv SQuAD_it-*.json.gz
SQuAD_it-test.json.gz:	   87.4% -- replaced with SQuAD_it-test.json
SQuAD_it-train.json.gz:	   82.2% -- replaced with SQuAD_it-train.json

我們可以看到壓縮檔案已被 SQuAD_it-train.jsonSQuAD_it-test.json 替換,並且資料以 JSON 格式儲存。

✎ 如果您想知道上述 shell 命令中為什麼有 ! 字元,那是因為我們在 Jupyter notebook 中執行它們。如果您想在終端中下載和解壓縮資料集,只需刪除字首。

要使用 load_dataset() 函式載入 JSON 檔案,我們只需知道我們是在處理普通 JSON(類似於巢狀字典)還是 JSON Lines(行分隔的 JSON)。與許多問答資料集一樣,SQuAD-it 使用巢狀格式,所有文字都儲存在 data 欄位中。這意味著我們可以透過指定 field 引數來載入資料集,如下所示:

from datasets import load_dataset

squad_it_dataset = load_dataset("json", data_files="SQuAD_it-train.json", field="data")

預設情況下,載入本地檔案會建立一個帶有 train 拆分的 DatasetDict 物件。我們可以透過檢查 squad_it_dataset 物件來檢視這一點:

squad_it_dataset
DatasetDict({
    train: Dataset({
        features: ['title', 'paragraphs'],
        num_rows: 442
    })
})

這向我們顯示了訓練集相關的行數和列名。我們可以透過索引 train 拆分來檢視其中一個示例,如下所示:

squad_it_dataset["train"][0]
{
    "title": "Terremoto del Sichuan del 2008",
    "paragraphs": [
        {
            "context": "Il terremoto del Sichuan del 2008 o il terremoto...",
            "qas": [
                {
                    "answers": [{"answer_start": 29, "text": "2008"}],
                    "id": "56cdca7862d2951400fa6826",
                    "question": "In quale anno si è verificato il terremoto nel Sichuan?",
                },
                ...
            ],
        },
        ...
    ],
}

太棒了,我們載入了第一個本地資料集!但這對於訓練集是有效的,我們真正想要的是將 traintest 拆分都包含在一個 DatasetDict 物件中,這樣我們就可以一次性將 Dataset.map() 函式應用於這兩個拆分。為此,我們可以向 data_files 引數提供一個字典,該字典將每個拆分名稱對映到與該拆分關聯的檔案:

data_files = {"train": "SQuAD_it-train.json", "test": "SQuAD_it-test.json"}
squad_it_dataset = load_dataset("json", data_files=data_files, field="data")
squad_it_dataset
DatasetDict({
    train: Dataset({
        features: ['title', 'paragraphs'],
        num_rows: 442
    })
    test: Dataset({
        features: ['title', 'paragraphs'],
        num_rows: 48
    })
})

這正是我們想要的。現在,我們可以應用各種預處理技術來清理資料、標記評論等。

load_dataset() 函式的 data_files 引數非常靈活,可以是單個檔案路徑、檔案路徑列表,或將拆分名稱對映到檔案路徑的字典。您還可以根據 Unix shell 使用的規則(例如,透過設定 data_files="*.json" 將目錄中的所有 JSON 檔案作為單個拆分進行 glob)來全域性匹配檔案。有關更多詳細資訊,請參閱 🤗 Datasets 文件

🤗 Datasets 中的載入指令碼實際上支援輸入檔案的自動解壓縮,因此我們可以透過將 data_files 引數直接指向壓縮檔案來跳過使用 gzip

data_files = {"train": "SQuAD_it-train.json.gz", "test": "SQuAD_it-test.json.gz"}
squad_it_dataset = load_dataset("json", data_files=data_files, field="data")

如果您不想手動解壓縮許多 GZIP 檔案,這會很有用。自動解壓縮也適用於其他常見格式,如 ZIP 和 TAR,因此您只需將 data_files 指向壓縮檔案即可!

現在您已經知道如何載入筆記型電腦或桌上型電腦上的本地檔案,讓我們看看如何載入遠端檔案。

載入遠端資料集

如果您在公司擔任資料科學家或編碼員,您想要分析的資料集很有可能儲存在某個遠端伺服器上。幸運的是,載入遠端檔案與載入本地檔案一樣簡單!我們不需要提供本地檔案的路徑,而是將 load_dataset() 函式的 data_files 引數指向儲存遠端檔案的一個或多個 URL。例如,對於託管在 GitHub 上的 SQuAD-it 資料集,我們可以直接將 data_files 指向 SQuAD_it-*.json.gz URL,如下所示:

url = "https://github.com/crux82/squad-it/raw/master/"
data_files = {
    "train": url + "SQuAD_it-train.json.gz",
    "test": url + "SQuAD_it-test.json.gz",
}
squad_it_dataset = load_dataset("json", data_files=data_files, field="data")

這會返回與上面獲得的相同的 DatasetDict 物件,但省去了我們手動下載和解壓縮 SQuAD_it-*.json.gz 檔案的步驟。這總結了我們探索載入不在 Hugging Face Hub 上託管的資料集的各種方法。現在我們有了可供使用的資料集,讓我們動手嘗試各種資料整理技術吧!

✏️ 試試看!選擇託管在 GitHub 或 UCI 機器學習儲存庫上的另一個數據集,並嘗試使用上面介紹的技術在本地和遠端載入它。作為獎勵,嘗試載入以 CSV 或文字格式儲存的資料集(有關這些格式的更多資訊,請參閱文件)。

< > 在 GitHub 上更新

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