Datasets 文件

快速入門

Hugging Face's logo
加入 Hugging Face 社群

並獲得增強的文件體驗

開始使用

快速入門

本快速入門旨在幫助希望立即投入程式碼並檢視如何將 🤗 Datasets 整合到其模型訓練工作流中的開發人員。如果您是初學者,我們建議從我們的教程開始,在那裡您將獲得更全面的介紹。

每個資料集都是獨一無二的,根據任務的不同,某些資料集可能需要額外的步驟來準備訓練。但是您始終可以使用 🤗 Datasets 工具來載入和處理資料集。最快、最簡單的入門方法是從 Hugging Face Hub 載入現有資料集。有成千上萬個數據集可供選擇,涵蓋許多工。選擇您想使用的資料集型別,然後開始吧!

查閱 Hugging Face 課程的第 5 章,瞭解更多關於載入遠端或本地資料集、清理資料集的工具以及建立自己的資料集等重要主題。

首先安裝 🤗 Datasets

pip install datasets

🤗 Datasets 也支援音訊和影像資料格式

  • 要使用音訊資料集,請安裝 Audio 功能

    pip install datasets[audio]
  • 要使用影像資料集,請安裝 Image 功能

    pip install datasets[vision]

除了 🤗 Datasets,請確保您已安裝首選的機器學習框架

Pytorch
隱藏 Pytorch 內容

bash pip install torch

TensorFlow
隱藏 TensorFlow 內容

bash pip install tensorflow

音訊

音訊資料集的載入方式與文字資料集相同。但是,音訊資料集的預處理方式略有不同。您不需要分詞器,而是需要一個特徵提取器。音訊輸入可能還需要對其取樣率進行重取樣,以匹配您正在使用的預訓練模型的取樣率。在此快速入門中,您將準備 MInDS-14 資料集,以便模型進行訓練並對客戶遇到的銀行問題進行分類。

1. 透過向 load_dataset() 函式提供資料集名稱、資料集配置(並非所有資料集都有配置)和資料集拆分來載入 MInDS-14 資料集

>>> from datasets import load_dataset, Audio

>>> dataset = load_dataset("PolyAI/minds14", "en-US", split="train")

2. 接下來,從 🤗 Transformers 庫載入預訓練的 Wav2Vec2 模型及其相應的特徵提取器。載入模型後出現一些權重未初始化的警告是完全正常的。這是預期行為,因為您正在載入此模型檢查點以用於其他任務的訓練。

>>> from transformers import AutoModelForAudioClassification, AutoFeatureExtractor

>>> model = AutoModelForAudioClassification.from_pretrained("facebook/wav2vec2-base")
>>> feature_extractor = AutoFeatureExtractor.from_pretrained("facebook/wav2vec2-base")

3. MInDS-14 資料集卡片顯示取樣率為 8kHz,但 Wav2Vec2 模型在 16kHz 取樣率上進行了預訓練。您需要使用 cast_column() 函式和 Audio 特徵來上取樣 audio 列以匹配模型的取樣率。

>>> dataset = dataset.cast_column("audio", Audio(sampling_rate=16000))
>>> dataset[0]["audio"]
<datasets.features._torchcodec.AudioDecoder object at 0x11642b6a0>

4. 建立一個函式以使用特徵提取器預處理音訊 array,並截斷和填充序列以形成整齊的矩形張量。最重要的是要記住在特徵提取器中呼叫音訊 array,因為 array - 實際的語音訊號 - 是模型輸入。

一旦您有了預處理函式,就可以使用 map() 函式透過將函式應用於資料集中的批次示例來加快處理速度。

>>> def preprocess_function(examples):
...     audio_arrays = [x.get_all_samples().data for x in examples["audio"]]
...     inputs = feature_extractor(
...         audio_arrays,
...         sampling_rate=16000,
...         padding=True,
...         max_length=100000,
...         truncation=True,
...     )
...     return inputs

>>> dataset = dataset.map(preprocess_function, batched=True)

5. 使用 rename_column() 函式將 intent_class 列重新命名為 labels,這是 Wav2Vec2ForSequenceClassification 中預期的輸入名稱

>>> dataset = dataset.rename_column("intent_class", "labels")

6. 根據您使用的機器學習框架設定資料集格式。

Pytorch
隱藏 Pytorch 內容

使用 set_format() 函式將資料集格式設定為 torch 並指定要格式化的列。此函式會即時應用格式化。轉換為 PyTorch 張量後,將資料集包裝在 torch.utils.data.DataLoader

>>> from torch.utils.data import DataLoader

>>> dataset.set_format(type="torch", columns=["input_values", "labels"])
>>> dataloader = DataLoader(dataset, batch_size=4)
TensorFlow
隱藏 TensorFlow 內容

使用 🤗 Transformers 中的 prepare_tf_dataset 方法準備資料集,使其與 TensorFlow 相容,並準備好訓練/微調模型,因為它將 HuggingFace Dataset 包裝為帶有整理和批處理的 tf.data.Dataset,因此可以直接將其傳遞給 Keras 方法(如 fit())而無需進一步修改。

>>> import tensorflow as tf

>>> tf_dataset = model.prepare_tf_dataset(
...     dataset,
...     batch_size=4,
...     shuffle=True,
... )

7. 使用您的機器學習框架開始訓練!查閱 🤗 Transformers 音訊分類指南,瞭解如何對音訊資料集進行模型訓練的端到端示例。

視覺

影像資料集的載入方式與文字資料集相同。但是,您需要一個特徵提取器來預處理資料集,而不是分詞器。對影像應用資料增強在計算機視覺中很常見,以使模型對過擬合更具魯棒性。您可以自由使用任何您想要的資料增強庫,然後可以使用 🤗 Datasets 應用增強。在此快速入門中,您將載入 Beans 資料集,並將其準備好用於模型訓練,並從葉子影像中識別疾病。

1. 透過向 load_dataset() 函式提供資料集名稱和資料集拆分來載入 Beans 資料集

>>> from datasets import load_dataset, Image

>>> dataset = load_dataset("AI-Lab-Makerere/beans", split="train")

大多數影像模型使用 RGB 影像。如果您的資料集包含不同模式的影像,您可以使用 cast_column() 函式將模式設定為 RGB

>>> dataset = dataset.cast_column("image", Image(mode="RGB"))

Beans 資料集僅包含 RGB 影像,因此此處不需要此步驟。

2. 現在,您可以使用任何您喜歡的庫(AlbumentationsimgaugKornia)新增一些資料增強。在這裡,您將使用 torchvision 隨機改變影像的顏色屬性

>>> from torchvision.transforms import Compose, ColorJitter, ToTensor

>>> jitter = Compose(
...     [ColorJitter(brightness=0.5, hue=0.5), ToTensor()]
... )

3. 建立一個函式,將您的轉換應用於資料集並生成模型輸入:pixel_values

>>> def transforms(examples):
...     examples["pixel_values"] = [jitter(image.convert("RGB")) for image in examples["image"]]
...     return examples

4. 使用 with_transform() 函式即時應用資料增強

>>> dataset = dataset.with_transform(transforms)

5. 根據您使用的機器學習框架設定資料集格式。

Pytorch
隱藏 Pytorch 內容

將資料集包裝在 torch.utils.data.DataLoader 中。您還需要建立一個整理函式來將樣本整理成批次

>>> from torch.utils.data import DataLoader

>>> def collate_fn(examples):
...     images = []
...     labels = []
...     for example in examples:
...         images.append((example["pixel_values"]))
...         labels.append(example["labels"])
...
...     pixel_values = torch.stack(images)
...     labels = torch.tensor(labels)
...     return {"pixel_values": pixel_values, "labels": labels}
>>> dataloader = DataLoader(dataset, collate_fn=collate_fn, batch_size=4)
TensorFlow
隱藏 TensorFlow 內容

使用 🤗 Transformers 中的 prepare_tf_dataset 方法準備資料集,使其與 TensorFlow 相容,並準備好訓練/微調模型,因為它將 HuggingFace Dataset 包裝為帶有整理和批處理的 tf.data.Dataset,因此可以直接將其傳遞給 Keras 方法(如 fit())而無需進一步修改。

在開始之前,請確保您已安裝最新版本的 albumentationscv2

pip install -U albumentations opencv-python
>>> import albumentations
>>> import numpy as np

>>> transform = albumentations.Compose([
...     albumentations.RandomCrop(width=256, height=256),
...     albumentations.HorizontalFlip(p=0.5),
...     albumentations.RandomBrightnessContrast(p=0.2),
... ])

>>> def transforms(examples):
...     examples["pixel_values"] = [
...         transform(image=np.array(image))["image"] for image in examples["image"]
...     ]
...     return examples

>>> dataset.set_transform(transforms)
>>> tf_dataset = model.prepare_tf_dataset(
...     dataset,
...     batch_size=4,
...     shuffle=True,
... )

6. 使用您的機器學習框架開始訓練!查閱 🤗 Transformers 影像分類指南,瞭解如何對影像資料集進行模型訓練的端到端示例。

自然語言處理

文字需要由分詞器分詞成單獨的詞元。對於快速入門,您將載入 Microsoft Research Paraphrase Corpus (MRPC) 訓練資料集,以訓練模型來確定一對句子是否具有相同的含義。

1. 透過向 load_dataset() 函式提供資料集名稱、資料集配置(並非所有資料集都有配置)和資料集拆分來載入 MRPC 資料集

>>> from datasets import load_dataset

>>> dataset = load_dataset("nyu-mll/glue", "mrpc", split="train")

2. 接下來,從 🤗 Transformers 庫載入預訓練的 BERT 模型及其相應的分詞器。載入模型後出現一些權重未初始化的警告是完全正常的。這是預期行為,因為您正在載入此模型檢查點以用於其他任務的訓練。

>>> from transformers import AutoModelForSequenceClassification, AutoTokenizer >>> model = AutoModelForSequenceClassification.from_pretrained("bert-base-uncased") >>> tokenizer = AutoTokenizer.from_pretrained("bert-base-uncased")

3. 建立一個函式來對資料集進行分詞,您還應該截斷並填充文字以形成整齊的矩形張量。分詞器會在資料集中生成三個新列:input_idstoken_type_idsattention_mask。這些是模型輸入。

使用 map() 函式透過將分詞函式應用於資料集中的批次示例來加快處理速度

>>> def encode(examples):
...     return tokenizer(examples["sentence1"], examples["sentence2"], truncation=True, padding="max_length")

>>> dataset = dataset.map(encode, batched=True)
>>> dataset[0]
{'sentence1': 'Amrozi accused his brother , whom he called " the witness " , of deliberately distorting his evidence .',
'sentence2': 'Referring to him as only " the witness " , Amrozi accused his brother of deliberately distorting his evidence .',
'label': 1,
'idx': 0,
'input_ids': [  101,  7277,  2180,  5303,  4806,  1117,  1711,   117,  2292, 1119,  1270,   107,  1103,  7737,   107,   117,  1104,  9938, 4267, 12223, 21811,  1117,  2554,   119,   102, 11336,  6732, 3384,  1106,  1140,  1112,  1178,   107,  1103,  7737,   107, 117,  7277,  2180,  5303,  4806,  1117,  1711,  1104,  9938, 4267, 12223, 21811,  1117,  2554,   119,   102, 0, 0, ...],
'token_type_ids': [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, ...],
'attention_mask': [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, ...]}

4. 將 label 列重新命名為 labels,這是 BertForSequenceClassification 中預期的輸入名稱

>>> dataset = dataset.map(lambda examples: {"labels": examples["label"]}, batched=True)

5. 根據您使用的機器學習框架設定資料集格式。

Pytorch
隱藏 Pytorch 內容

使用 with_format() 函式將資料集格式設定為 torch 並指定要格式化的列。此函式會即時應用格式化。轉換為 PyTorch 張量後,將資料集包裝在 torch.utils.data.DataLoader

>>> import torch

>>> dataset = dataset.select_columns(["input_ids", "token_type_ids", "attention_mask", "labels"])
>>> dataset = dataset.with_format(type="torch")
>>> dataloader = torch.utils.data.DataLoader(dataset, batch_size=32)
TensorFlow
隱藏 TensorFlow 內容

使用 🤗 Transformers 中的 prepare_tf_dataset 方法準備資料集,使其與 TensorFlow 相容,並準備好訓練/微調模型,因為它將 HuggingFace Dataset 包裝為帶有整理和批處理的 tf.data.Dataset,因此可以直接將其傳遞給 Keras 方法(如 fit())而無需進一步修改。

>>> import tensorflow as tf

>>> tf_dataset = model.prepare_tf_dataset(
...     dataset,
...     batch_size=4,
...     shuffle=True,
... )

6. 使用您的機器學習框架開始訓練!查閱 🤗 Transformers 文字分類指南,瞭解如何對文字資料集進行模型訓練的端到端示例。

接下來是什麼?

🤗 Datasets 快速入門到此結束!您可以使用一個函式載入任何文字、音訊或影像資料集,並將其準備好用於模型訓練。

接下來,請檢視我們的操作指南,瞭解如何執行更多具體操作,例如載入不同的資料集格式、對齊標籤和流式傳輸大型資料集。如果您有興趣瞭解更多關於 🤗 Datasets 核心概念的資訊,請泡杯咖啡閱讀我們的概念指南

< > 在 GitHub 上更新

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