Datasets documentation

Início rápido

Hugging Face's logo
Join the Hugging Face community

and get access to the augmented documentation experience

to get started

Início rápido

Este guia rápido é destinado a desenvolvedores que estão prontos para mergulhar no código e ver um exemplo de como integrar o 🤗 Datasets ao seu fluxo de trabalho de treinamento de modelos. Se você é iniciante, recomendamos começar com nossos tutoriais, onde você terá uma introdução mais completa.

Cada conjunto de dados é único e, dependendo da tarefa, alguns conjuntos de dados podem exigir etapas adicionais para prepará-los para o treinamento. Mas você sempre pode usar as ferramentas do 🤗 Datasets para carregar e processar um conjunto de dados. A maneira mais rápida e fácil de começar é carregando um conjunto de dados existente do Hugging Face Hub. Existem milhares de conjuntos de dados para escolher, abrangendo muitas tarefas. Escolha o tipo de conjunto de dados com o qual deseja trabalhar e vamos começar!

Confira o Capítulo 5 do curso da Hugging Face para aprender mais sobre outros tópicos importantes, como carregar conjuntos de dados remotos ou locais, ferramentas para limpar um conjunto de dados e criar seu próprio conjunto de dados.

Comece instalando o 🤗 Datasets:

pip install datasets

🤗 O Datasets também suporta formatos de dados de áudio e imagem:

  • Para trabalhar com conjuntos de dados de áudio, instale o recurso Audio:

    pip install datasets[audio]
  • Para trabalhar com conjuntos de dados de imagens, instale o recurso Image:

    pip install datasets[vision]

Além do 🤗 Datasets, verifique se o seu framework de machine learning preferido está instalado:

Pytorch
Hide Pytorch content

bash pip install torch

TensorFlow
Hide TensorFlow content

bash pip install tensorflow

Áudio

Conjuntos de dados de áudio são carregados da mesma forma que conjuntos de dados de texto. No entanto, um conjunto de dados de áudio é pré-processado de maneira um pouco diferente. Em vez de um tokenizer, você precisará de um feature extractor. Uma entrada de áudio também pode exigir o reamostragem de sua taxa de amostragem para corresponder à taxa de amostragem do modelo pré-treinado que você está usando. Neste quickstart, você preparará o conjunto de dados MInDS-14 para um modelo de treinamento e classificará o problema bancário que um cliente está enfrentando.

1. Carregue o conjunto de dados MInDS-14 fornecendo à função load_dataset() o nome do conjunto de dados, a configuração do conjunto de dados (nem todos os conjuntos de dados terão uma configuração) e uma divisão do conjunto de dados:

>>> from datasets import load_dataset, Audio

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

2. Em seguida, carregue um modelo Wav2Vec2 pré-treinado e o extrator de recursos correspondente a partir da biblioteca 🤗 Transformers. É totalmente normal ver um aviso após carregar o modelo informando que alguns pesos não foram inicializados. Isso é esperado, pois você está carregando esse checkpoint do modelo para treinamento com outra tarefa.

>>> from transformers import AutoModelForAudioClassification, AutoFeatureExtractor

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

3. O cartão do dataset MInDS-14 indica que a taxa de amostragem é de 8 kHz, mas o modelo Wav2Vec2 foi pré-treinado com uma taxa de amostragem de 16 kHz. Você precisará fazer o upsample da coluna audio com a função cast_column() e o recurso Audio para corresponder à taxa de amostragem do modelo.

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

4. Crie uma função para pré-processar o array de áudio com o extrator de recursos, truncando e preenchendo as sequências em tensores retangulares organizados. O mais importante a lembrar é chamar o array de áudio no extrator de recursos, pois o array — o sinal de fala real — é a entrada do modelo.

Depois de ter uma função de pré-processamento, use a função map() para acelerar o processamento aplicando a função a lotes de exemplos no conjunto de dados.

>>> 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. Use a função rename_column() para renomear a coluna intent_class para labels, que é o nome de entrada esperado em Wav2Vec2ForSequenceClassification:

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

6. Defina o formato do conjunto de dados de acordo com o framework de machine learning que você está usando.

Pytorch
Hide Pytorch content

Use a função set_format() para definir o formato do conjunto de dados como torch e especificar as colunas que você deseja formatar. Esta função aplica a formatação em tempo real. Após converter para tensores do PyTorch, envolva o conjunto de dados em 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

Use o método prepare_tf_dataset do 🤗 Transformers para preparar o dataset para que seja compatível com o TensorFlow e pronto para treinar/ajustar um modelo, pois ele encapsula um Dataset do HuggingFace como um tf.data.Dataset com colação e loteamento, permitindo que ele seja passado diretamente para métodos do Keras como fit() sem modificações adicionais.

>>> import tensorflow as tf

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

7. Comece o treinamento com seu framework de machine learning! Consulte o guia de classificação de áudio do 🤗 Transformers para um exemplo completo de como treinar um modelo em um conjunto de dados de áudio.

Visão

Conjuntos de dados de imagens são carregados da mesma forma que conjuntos de dados de texto. No entanto, em vez de um tokenizer, você precisará de um feature extractor para pré-processar o conjunto de dados. Aplicar aumento de dados a uma imagem é comum em visão computacional para tornar o modelo mais robusto contra overfitting. Você é livre para usar qualquer biblioteca de aumento de dados que desejar e, em seguida, pode aplicar os aumentos com 🤗 Datasets. Neste quickstart, você carregará o conjunto de dados Beans e o preparará para que o modelo possa treinar e identificar doenças a partir das imagens de folhas.

1. Carregue o conjunto de dados Beans fornecendo o nome do conjunto de dados e uma divisão do conjunto de dados para a função load_dataset():

>>> from datasets import load_dataset, Image

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

A maioria dos modelos de imagem trabalha com imagens RBG. Se o seu conjunto de dados contém imagens em um modo diferente, você pode usar a função cast_column() para definir o modo como RGB:

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

O conjunto de dados Beans contém apenas imagens RGB, portanto, esta etapa não é necessária aqui.

2. Agora você pode adicionar algumas aumentações de dados com qualquer biblioteca (Albumentations, imgaug, Kornia) que preferir. Aqui, você usará o torchvision para alterar aleatoriamente as propriedades de cor de uma imagem:

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

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

3. Crie uma função para aplicar sua transformação ao conjunto de dados e gerar a entrada do modelo: pixel_values.

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

4. Use a função with_transform() para aplicar as aumentações de dados em tempo real:

>>> dataset = dataset.with_transform(transforms)

5. Defina o formato do conjunto de dados de acordo com o framework de machine learning que você está usando.

Pytorch
Hide Pytorch content

Envolva o conjunto de dados em torch.utils.data.DataLoader. Você também precisará criar uma função de colagem para agrupar as amostras em lotes:

>>> 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

Use o método prepare_tf_dataset do 🤗 Transformers para preparar o dataset para que seja compatível com o TensorFlow e pronto para treinar/ajustar um modelo, pois ele encapsula um Dataset do HuggingFace como um tf.data.Dataset com colação e loteamento, permitindo que ele seja passado diretamente para métodos do Keras como fit() sem modificações adicionais.

Antes de começar, verifique se você tem as versões mais recentes de albumentations e cv2 instaladas:

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. Comece o treinamento com seu framework de machine learning! Confira o guia de classificação de imagens do 🤗 Transformers para um exemplo completo de como treinar um modelo em um conjunto de dados de imagens.

NLP

O texto precisa ser tokenizado em tokens individuais por um tokenizer. Para o quickstart, você carregará o conjunto de dados de treinamento Microsoft Research Paraphrase Corpus (MRPC) para treinar um modelo que determine se um par de frases tem o mesmo significado.

1. Carregue o conjunto de dados MRPC fornecendo à função load_dataset() o nome do conjunto de dados, a configuração do conjunto de dados (nem todos os conjuntos de dados terão uma configuração) e a divisão do conjunto de dados:

>>> from datasets import load_dataset

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

2. Em seguida, carregue um modelo BERT pré-treinado e seu tokenizer correspondente a partir da biblioteca 🤗 Transformers. É totalmente normal ver um aviso após carregar o modelo sobre alguns pesos não inicializados. Isso é esperado, pois você está carregando esse checkpoint do modelo para treinamento com outra tarefa.

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

3. Crie uma função para tokenizar o conjunto de dados, e você também deve truncar e preencher o texto em tensores retangulares organizados. O tokenizador gera três novas colunas no conjunto de dados: input_ids, token_type_ids e uma attention_mask. Estas são as entradas do modelo.

Use a função map() para acelerar o processamento aplicando sua função de tokenização a lotes de exemplos no conjunto de dados:

>>> 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. Renomeie a coluna label para labels, que é o nome de entrada esperado em BertForSequenceClassification:

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

5. Defina o formato do conjunto de dados de acordo com o framework de machine learning que você está usando.

Pytorch
Hide Pytorch content

Use a função with_format() para definir o formato do dataset como torch e especificar as colunas que você deseja formatar. Esta função aplica a formatação em tempo real. Após converter para tensores do PyTorch, envolva o dataset em 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

Use o método prepare_tf_dataset do 🤗 Transformers para preparar o dataset para que seja compatível com o TensorFlow e pronto para treinar/ajustar um modelo, pois ele encapsula um Dataset do HuggingFace como um tf.data.Dataset com colação e loteamento, permitindo que ele seja passado diretamente para métodos do Keras como fit() sem modificações adicionais.

>>> import tensorflow as tf

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

6. Comece o treinamento com seu framework de machine learning! Confira o guia de classificação de texto do 🤗 Transformers para um exemplo completo de como treinar um modelo em um conjunto de dados de texto.

E agora?

Isso completa o quickstart do 🤗 Datasets! Você pode carregar qualquer conjunto de dados de texto, áudio ou imagem com uma única função e deixá-lo pronto para o treinamento do seu modelo.

Para os próximos passos, confira nossos Guias de como fazer e aprenda a realizar tarefas mais específicas, como carregar diferentes formatos de conjunto de dados, alinhar rótulos e transmitir grandes conjuntos de dados. Se você tiver interesse em aprender mais sobre os conceitos principais do 🤗 Datasets, pegue uma xícara de café e leia nossos Guias conceituais!

Update on GitHub