Datasets documentation

Bắt đầu nhanh

You are viewing main version, which requires installation from source. If you'd like regular pip install, checkout the latest stable version (v4.8.4).
Hugging Face's logo
Join the Hugging Face community

and get access to the augmented documentation experience

to get started

Bắt đầu nhanh

Hướng dẫn nhanh này dành cho các nhà phát triển sẵn sàng đi sâu vào mã và xem một ví dụ về cách tích hợp 🤗 Datasets vào quy trình huấn luyện mô hình của họ. Nếu bạn là người mới bắt đầu, chúng tôi khuyên bạn nên bắt đầu với các hướng dẫn của chúng tôi, nơi bạn sẽ có được một phần giới thiệu chi tiết hơn.

Mỗi dataset đều có nét riêng, và tùy thuộc vào tác vụ, một số dataset có thể cần thêm các bước để chuẩn bị cho việc huấn luyện. Tuy nhiên, bạn luôn có thể sử dụng các công cụ của 🤗 Datasets để tải và xử lý dataset. Cách nhanh và dễ nhất để bắt đầu là tải một dataset có sẵn từ Hugging Face Hub. Có hàng nghìn dataset để bạn lựa chọn, trải rộng trên nhiều tác vụ. Hãy chọn loại dataset bạn muốn làm việc và bắt đầu thôi!

Xem Chương 5 của khóa học Hugging Face để tìm hiểu thêm về các chủ đề quan trọng khác như tải bộ dữ liệu từ xa hoặc cục bộ, các công cụ để làm sạch bộ dữ liệu và tạo bộ dữ liệu của riêng bạn.

Bắt đầu bằng cách cài đặt 🤗 Datasets:

pip install datasets

🤗 Datasets cũng hỗ trợ các định dạng dữ liệu âm thanh và hình ảnh:

  • Để làm việc với các bộ dữ liệu âm thanh, hãy cài đặt tính năng Audio:

    pip install datasets[audio]
  • Để làm việc với các bộ dữ liệu ảnh, hãy cài đặt tính năng Image:

    pip install datasets[vision]

Ngoài 🤗 Datasets, hãy đảm bảo rằng framework machine learning ưa thích của bạn đã được cài đặt:

Pytorch
Hide Pytorch content

bash pip install torch

TensorFlow
Hide TensorFlow content

bash pip install tensorflow

Âm thanh

Bộ dữ liệu âm thanh được nạp giống như bộ dữ liệu văn bản. Tuy nhiên, bộ dữ liệu âm thanh được tiền xử lý hơi khác. Thay vì một tokenizer, bạn sẽ cần một feature extractor. Đầu vào âm thanh cũng có thể yêu cầu lấy lại mẫu (resampling) tần số lấy mẫu để khớp với tần số lấy mẫu của mô hình được huấn luyện trước mà bạn đang sử dụng. Trong phần khởi động nhanh này, bạn sẽ chuẩn bị bộ dữ liệu MInDS-14 cho một mô hình để huấn luyện và phân loại vấn đề ngân hàng mà khách hàng đang gặp phải.

1. Tải bộ dữ liệu MInDS-14 bằng cách cung cấp cho hàm load_dataset() tên bộ dữ liệu, cấu hình bộ dữ liệu (không phải bộ dữ liệu nào cũng có cấu hình) và một phần chia của bộ dữ liệu:

>>> from datasets import load_dataset, Audio

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

2. Tiếp theo, tải một mô hình Wav2Vec2 đã được huấn luyện trước cùng bộ trích xuất đặc trưng tương ứng từ thư viện 🤗 Transformers. Hoàn toàn bình thường nếu bạn thấy cảnh báo về việc một số trọng số chưa được khởi tạo sau khi tải mô hình. Điều này là dự kiến vì bạn đang tải điểm kiểm tra của mô hình này để huấn luyện cho một tác vụ khác.

>>> from transformers import AutoModelForAudioClassification, AutoFeatureExtractor

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

3. Thẻ dữ liệu của bộ dữ liệu MInDS-14 cho thấy tần số lấy mẫu là 8kHz, nhưng mô hình Wav2Vec2 được tiền huấn luyện với tần số lấy mẫu 16kHz. Bạn sẽ cần tăng tần số lấy mẫu của cột audio bằng hàm cast_column() và đặc trưng Audio để khớp với tần số lấy mẫu của mô hình.

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

4. Tạo một hàm để tiền xử lý array âm thanh bằng feature extractor, sau đó cắt ngắn và đệm các chuỗi thành các tensor chữ nhật gọn gàng. Điều quan trọng nhất cần nhớ là phải gọi array âm thanh trong feature extractor vì array - tín hiệu giọng nói thực tế - chính là đầu vào của mô hình.

Khi bạn đã có một hàm tiền xử lý, hãy sử dụng hàm map() để tăng tốc độ xử lý bằng cách áp dụng hàm đó lên các lô ví dụ trong bộ dữ liệu.

>>> 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. Sử dụng hàm rename_column() để đổi tên cột intent_class thành labels, đây là tên đầu vào mong đợi trong Wav2Vec2ForSequenceClassification:

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

6. Đặt định dạng bộ dữ liệu theo khung máy học bạn đang sử dụng.

Pytorch
Hide Pytorch content

Sử dụng hàm set_format() để đặt định dạng bộ dữ liệu thành torch và chỉ định các cột bạn muốn định dạng. Hàm này áp dụng định dạng theo thời gian thực. Sau khi chuyển đổi thành tensor PyTorch, bọc bộ dữ liệu trong 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
Hide TensorFlow content

Sử dụng phương thức prepare_tf_dataset từ 🤗 Transformers để chuẩn bị bộ dữ liệu sao cho tương thích với TensorFlow và sẵn sàng để huấn luyện/điều chỉnh mô hình, vì nó bọc một Dataset của HuggingFace thành một tf.data.Dataset với collation và batching, cho phép truyền trực tiếp vào các phương thức Keras như fit() mà không cần chỉnh sửa thêm.

>>> import tensorflow as tf

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

7. Bắt đầu huấn luyện với framework machine learning của bạn! Xem hướng dẫn phân loại âm thanh của 🤗 Transformers để có ví dụ end-to-end về cách huấn luyện mô hình trên một tập dữ liệu âm thanh.

Thị giác

Bộ dữ liệu ảnh được nạp giống như bộ dữ liệu văn bản. Tuy nhiên, thay vì một tokenizer, bạn sẽ cần một feature extractor để tiền xử lý bộ dữ liệu. Việc áp dụng tăng cường dữ liệu (data augmentation) lên ảnh là phổ biến trong thị giác máy tính nhằm giúp mô hình chống lại overfitting tốt hơn. Bạn có thể tự do sử dụng bất kỳ thư viện tăng cường dữ liệu nào, sau đó áp dụng các phép tăng cường bằng 🤗 Datasets. Trong phần khởi động nhanh này, bạn sẽ nạp bộ dữ liệu Beans và chuẩn bị nó để mô hình huấn luyện và nhận diện bệnh từ các ảnh lá cây.

1. Nạp bộ dữ liệu Beans bằng cách cung cấp tên bộ dữ liệu và một phần chia bộ dữ liệu cho hàm load_dataset():

>>> from datasets import load_dataset, Image

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

Hầu hết các mô hình ảnh hoạt động với ảnh RGB. Nếu tập dữ liệu của bạn chứa ảnh ở chế độ khác, bạn có thể sử dụng hàm cast_column() để đặt chế độ thành RGB:

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

Bộ dữ liệu Beans chỉ chứa các hình ảnh RGB, vì vậy bước này không cần thiết ở đây.

2. Bây giờ bạn có thể thêm một số kỹ thuật tăng cường dữ liệu bằng bất kỳ thư viện nào (Albumentations, imgaug, Kornia) mà bạn thích. Ở đây, bạn sẽ sử dụng torchvision để thay đổi ngẫu nhiên các thuộc tính màu của một hình ảnh:

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

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

3. Tạo một hàm để áp dụng transform của bạn vào tập dữ liệu và tạo đầu vào cho mô hình: pixel_values.

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

4. Sử dụng hàm with_transform() để áp dụng các phép tăng cường dữ liệu theo thời gian thực:

>>> dataset = dataset.with_transform(transforms)

5. Đặt định dạng bộ dữ liệu theo khung máy học bạn đang sử dụng.

Pytorch
Hide Pytorch content

Bọc dataset trong torch.utils.data.DataLoader. Bạn cũng cần tạo một hàm collate để gom các mẫu thành các batch:

>>> 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
Hide TensorFlow content

Sử dụng phương thức prepare_tf_dataset từ 🤗 Transformers để chuẩn bị bộ dữ liệu sao cho tương thích với TensorFlow và sẵn sàng để huấn luyện/điều chỉnh mô hình, vì nó bọc một Dataset của HuggingFace thành một tf.data.Dataset với collation và batching, cho phép truyền trực tiếp vào các phương thức Keras như fit() mà không cần chỉnh sửa thêm.

Trước khi bắt đầu, hãy đảm bảo bạn đã cài đặt các phiên bản mới nhất của albumentations và cv2:

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. Bắt đầu huấn luyện với framework machine learning của bạn! Xem hướng dẫn phân loại ảnh của 🤗 Transformers để có ví dụ end-to-end về cách huấn luyện một mô hình trên bộ dữ liệu ảnh.

NLP

Văn bản cần được tách thành các token riêng lẻ bởi một tokenizer. Trong phần khởi động nhanh, bạn sẽ nạp bộ dữ liệu huấn luyện Microsoft Research Paraphrase Corpus (MRPC) để huấn luyện một mô hình xác định xem một cặp câu có cùng ý nghĩa hay không.

1. Nạp bộ dữ liệu MRPC bằng cách cung cấp cho hàm load_dataset() tên bộ dữ liệu, cấu hình bộ dữ liệu (không phải bộ dữ liệu nào cũng có cấu hình) và phần chia bộ dữ liệu:

>>> from datasets import load_dataset

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

2. Tiếp theo, tải một mô hình BERT đã được huấn luyện trước cùng bộ tokenizer tương ứng từ thư viện 🤗 Transformers. Hoàn toàn bình thường nếu bạn thấy cảnh báo về việc một số trọng số chưa được khởi tạo sau khi tải mô hình. Điều này là dự kiến vì bạn đang tải checkpoint mô hình này để huấn luyện cho một tác vụ khác.

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

3. Tạo một hàm để tokenize bộ dữ liệu, đồng thời bạn cũng nên cắt ngắn và đệm (pad) văn bản thành các tensor chữ nhật gọn gàng. Tokenizer sẽ tạo ra ba cột mới trong bộ dữ liệu: input_ids, token_type_ids và attention_mask. Đây là các đầu vào của mô hình.

Sử dụng hàm map() để tăng tốc xử lý bằng cách áp dụng hàm tokenization của bạn lên các lô (batches) ví dụ trong tập dữ liệu:

>>> 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. Đổi tên cột label thành labels, đây là tên đầu vào mong đợi trong BertForSequenceClassification:

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

5. Đặt định dạng bộ dữ liệu theo khung máy học bạn đang sử dụng.

Pytorch
Hide Pytorch content

Sử dụng hàm with_format() để đặt định dạng tập dữ liệu thành torch và chỉ định các cột bạn muốn định dạng. Hàm này áp dụng định dạng theo thời gian thực. Sau khi chuyển đổi thành tensor PyTorch, bọc tập dữ liệu trong 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
Hide TensorFlow content

Sử dụng phương thức prepare_tf_dataset từ 🤗 Transformers để chuẩn bị bộ dữ liệu sao cho tương thích với TensorFlow và sẵn sàng để huấn luyện/điều chỉnh mô hình, vì nó bọc một Dataset của HuggingFace thành một tf.data.Dataset với collation và batching, cho phép truyền trực tiếp vào các phương thức Keras như fit() mà không cần chỉnh sửa thêm.

>>> import tensorflow as tf

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

6. Bắt đầu huấn luyện với framework machine learning của bạn! Xem hướng dẫn phân loại văn bản của 🤗 Transformers để có ví dụ end-to-end về cách huấn luyện một mô hình trên bộ dữ liệu văn bản.

Tiếp theo là gì?

Như vậy là bạn đã hoàn thành phần khởi động nhanh 🤗 Datasets! Bạn có thể tải bất kỳ bộ dữ liệu văn bản, âm thanh hay hình ảnh nào bằng một hàm duy nhất và chuẩn bị sẵn sàng để mô hình của bạn huấn luyện.

Để tiếp tục, hãy xem Các hướng dẫn thực hành của chúng tôi và học cách thực hiện các thao tác cụ thể hơn như nạp các định dạng tập dữ liệu khác nhau, căn chỉnh nhãn và phát trực tiếp các tập dữ liệu lớn. Nếu bạn muốn tìm hiểu sâu hơn về các khái niệm cốt lõi của 🤗 Datasets, hãy pha một tách cà phê và đọc Các hướng dẫn khái niệm của chúng tôi!

Update on GitHub