Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Aprenda Coleta e Pré-Processamento de Dados | Construção e Treinamento de Modelos Generativos
Modelos Generativos Profundos com Python

Coleta e Pré-Processamento de Dados

Deslize para mostrar o menu

O treinamento de modelos generativos exige não apenas boas arquiteturas e funções de perda, mas também dados limpos, bem estruturados e diversificados. Esta seção apresenta conjuntos de dados de alta qualidade nos domínios de visão, texto e áudio, fornece técnicas detalhadas de pré-processamento adequadas para pipelines generativos modernos e discute estratégias robustas de divisão de dados com ferramentas práticas.

Coleta de Dados

ColetaDeDados

A coleta de dados para modelagem generativa depende do domínio, da disponibilidade das fontes, da escala e das licenças. Para dados de texto e visão computacional, fontes comuns incluem conjuntos de dados abertos, conteúdo extraído da web e repositórios estruturados (por exemplo, arquivos acadêmicos, redes sociais ou plataformas de comércio eletrônico).

Técnicas de Web Scraping

Quando conjuntos de dados não estão prontamente disponíveis, os dados podem ser coletados da web utilizando ferramentas de scraping. O web scraping permite extrair informações de páginas HTML de forma programática. É uma abordagem poderosa para coletar dados do mundo real e não estruturados quando APIs não estão disponíveis. No entanto, o scraping envolve responsabilidades técnicas e éticas.

Os métodos de scraping geralmente envolvem:

  • Envio de requisições HTTP para recuperar páginas web. Isso possibilita o acesso ao conteúdo HTML bruto de uma página;
  • Análise do conteúdo HTML para extrair dados estruturados. Ferramentas como BeautifulSoup convertem HTML não estruturado em tags e elementos acessíveis;
  • Navegação em páginas dinâmicas usando automação de navegador. Sites com uso intenso de JavaScript exigem ferramentas como Selenium para renderizar completamente o conteúdo;
  • Armazenamento dos dados extraídos em formatos utilizáveis como CSV ou JSON. Isso garante compatibilidade com etapas posteriores de pré-processamento e treinamento de modelos.

Abaixo estão duas estratégias comuns de scraping:

Extração de Texto com BeautifulSoup

BeautifulSoup é uma biblioteca Python utilizada para analisar páginas HTML estáticas.

1234567891011
import requests from bs4 import BeautifulSoup url = "https://docs.python.org/3/" response = requests.get(url) soup = BeautifulSoup(response.text, "html.parser") # Extract paragraphs paragraphs = [p.text for p in soup.find_all('p')] text = "\n".join(paragraphs) print(text)

Raspagem de imagens com Selenium

Selenium automatiza um navegador para coletar conteúdo de páginas renderizadas com JavaScript.

123456789101112131415161718
# INSTALL SELENIUM # THIS CODE DOWNLOAD IMAGES (I NEED JUST VIZUALIZATION) from selenium import webdriver import time import urllib.request url = "https://example.com/gallery" driver = webdriver.Chrome() driver.get(url) time.sleep(2) images = driver.find_elements("tag name", "img") for idx, img in enumerate(images): src = img.get_attribute('src') if src: urllib.request.urlretrieve(src, f"image_{idx}.jpg") driver.quit()
Note
Nota

Sempre revise os termos de serviço de um site antes de realizar scraping. Utilize taxas de requisição educadas e respeite o arquivo robots.txt. Scraping inadequado pode resultar em banimento de IP ou consequências legais.

Em contextos de GenAI, o web scraping é frequentemente um passo inicial para a construção de conjuntos de dados de pré-treinamento, especialmente para domínios específicos ou idiomas com poucos recursos. Ferramentas como Scrapy, playwright ou APIs browserless também são amplamente utilizadas para tarefas em larga escala.

Técnicas de Pré-processamento

imagem

O pré-processamento de dados deve ser adaptado à modalidade, ao tipo de modelo e às restrições de qualidade. Para modelagem generativa em nível de produção, os pipelines geralmente incluem transformações específicas do domínio, adaptação de resolução e filtragem baseada em conteúdo.

Pré-processamento de imagens

  • Redimensionamento: ajustar a resolução do conjunto de dados à entrada do modelo (por exemplo, 64x64 para GANs iniciais, 512x512 para modelos de difusão);
from PIL import Image

img = Image.open("example.jpg")
resized = img.resize((256, 256))
resized.save("resized.jpg")
  • Normalização: escala os valores dos pixels para um intervalo padrão, tipicamente [−1, 1] ou [0, 1];
from torchvision import transforms

transform = transforms.Compose([
    transforms.Resize((256, 256)),
    transforms.ToTensor(),
    transforms.Normalize(mean=[0.5]*3, std=[0.5]*3)  # RGB to [-1, 1]
])
  • Manipulação do Espaço de Cor: garante a consistência das cores — converte para RGB ou escala de cinza. Para geração condicional, mantém canais alfa se presentes;
from PIL import Image

img = Image.open("example.png").convert("RGB")
img.save("rgb_image.jpg")
  • Aumento de dados: introduz variação durante o treinamento por meio de transformações.
import albumentations as A
from albumentations.pytorch import ToTensorV2

transform = A.Compose([
    A.RandomResizedCrop(256, 256),
    A.HorizontalFlip(),
    A.ColorJitter(),
    A.Normalize(mean=(0.5, 0.5, 0.5), std=(0.5, 0.5, 0.5)),
    ToTensorV2(),
])

Pré-processamento de Texto

  • Limpeza: remove caracteres especiais, espaços em branco extras e ruídos;
12345
import re text = "Example text — with symbols!" cleaned = re.sub(r"[^\w\s]", "", text) cleaned = re.sub(r"\s+", " ", cleaned).strip() print(cleaned)
  1. r"[^\w\s]":

    • \w: corresponde a qualquer caractere alfanumérico (letras A-Z, a-z, dígitos 0-9) e sublinhado _;
    • \s: corresponde a qualquer caractere de espaço em branco (espaços, tabulações, quebras de linha);
    • [^...]: uma classe de caracteres negada—corresponde a qualquer coisa que não esteja listada dentro;
    • Significado: esse padrão corresponde a todos os caracteres exceto letras, dígitos, sublinhados e espaços em branco. Portanto, remove pontuação e símbolos (como , !, etc.).
  2. r"\s+":

    • \s: corresponde a qualquer caractere de espaço em branco;
    • +: corresponde a um ou mais do token anterior;
    • Significado: isso substitui múltiplos espaços em branco consecutivos por um único espaço.
  3. .strip(): remove espaços em branco no início e no final da string limpa.

Para mais informações sobre a sintaxe de RegEx, consulte a documentação.

  • Conversão para minúsculas: padronização do texto para minúsculas visando consistência. Aplicação seletiva, pois modelos como BERT podem ser sensíveis a maiúsculas/minúsculas;
12
text = "This Is A Sentence." print(text.lower())
  • Tokenização: divisão do texto em tokens ou subpalavras para modelagem;
1234
from transformers import AutoTokenizer tokenizer = AutoTokenizer.from_pretrained("gpt2") encodings = tokenizer(["Example text."], padding="max_length", truncation=True, max_length=128, return_tensors="pt")
  • Stemming/Lematização: raro em pipelines de deep learning, mas utilizado em PLN tradicional ou filtros de pré-treinamento;
1234
from nltk.stem import PorterStemmer stemmer = PorterStemmer() print(stemmer.stem("running"))
  • Preenchimento/Truncamento: veja o exemplo acima com max_length.
1234
from transformers import AutoTokenizer tokenizer = AutoTokenizer.from_pretrained("gpt2") inputs = tokenizer("Short text.", max_length=10, padding="max_length", truncation=True, return_tensors="pt")
Note
Nota

Construção de pipelines modulares de pré-processamento com foco em reprodutibilidade. Utilização de DVC, wandb artifacts ou huggingface/datasets com streaming + cache.

Estratégias de Divisão de Dados

Dividir os dados de forma eficaz é essencial para a generalização, especialmente em modelagem generativa, onde o overfitting a modos ou memorização é comum.

Divisão Treinamento/Validação/Teste

imagem
  • Proporções convencionais: 80/10/10 ou 70/15/15 dependendo do tamanho do conjunto de dados;
  • Divisão sensível ao conteúdo: estratificar divisões por classe (visão), tópico (texto).
  • Caso de uso:
    • Treinamento: direciona a otimização do modelo;
    • Validação: orienta checkpointing, early stopping e ajuste de métricas (por exemplo, FID);
    • Teste: totalmente reservado até a avaliação final do modelo.

Exemplo usando train_test_split:

from sklearn.model_selection import train_test_split

# Example: splitting an image dataset (paths or features)
train_paths, val_paths = train_test_split(image_paths, test_size=0.1, random_state=42)
train_paths, test_paths = train_test_split(train_paths, test_size=0.111, random_state=42)  # 0.111 to get ~10% test

Para Datasets do Hugging Face:

from datasets import load_dataset

dataset = load_dataset("wikitext", "wikitext-2-raw-v1")
split_dataset = dataset["train"].train_test_split(test_size=0.2, seed=42)
train_val = split_dataset["train"].train_test_split(test_size=0.1, seed=42)

train_set = train_val["train"]
val_set = train_val["test"]
test_set = split_dataset["test"]

Validação Cruzada e Bootstrapping

cross_val
  • Para domínios com poucos recursos ou zero-shot, utilizar K-fold CV (por exemplo, K=5 ou 10);
  • Em modelos de difusão, utilizar FID/LPIPS com bootstrap para avaliar a estabilidade da geração;
  • Inspeção visual ou perceptual deve acompanhar a validação numérica.

Exemplo de configuração K-fold:

from sklearn.model_selection import KFold
import numpy as np

kf = KFold(n_splits=5, shuffle=True, random_state=42)
for fold, (train_idx, val_idx) in enumerate(kf.split(data)):
    print(f"Fold {fold}: Train indices {train_idx[:5]}, Val indices {val_idx[:5]}")

Conjuntos de Dados Comumente Utilizados

A escolha do conjunto de dados adequado depende da modalidade, escala dos dados, licenciamento e do objetivo generativo específico (por exemplo, geração incondicional, síntese condicional ou transferência de estilo).

Conjuntos de Dados para Visão Computacional

  • CIFAR-10: 60.000 imagens RGB de baixa resolução 32×32 em 10 classes. Leve, ideal para prototipagem rápida, testes unitários e benchmarking de loops de treinamento para GANs de imagens;
  • CelebA: mais de 200 mil rostos de celebridades alinhados e anotados com 40 atributos binários. Frequentemente utilizado em geração condicionada por atributos, edição de rosto preservando identidade e modelos encoder-decoder;
  • LSUN: conjunto de dados de cenas em larga escala contendo milhões de imagens em categorias como quartos, igrejas e salas de jantar. Essencial para síntese em alta resolução e treinamento progressivo de GANs;
  • ImageNet: mais de 14 milhões de imagens de alta qualidade rotuladas em 20 mil classes. Utilizado principalmente para transferência de aprendizado, pré-treinamento de modelos de difusão e como base para geração guiada por estilo.

Conjuntos de Dados de Texto

  • WikiText: artigos limpos da Wikipedia (WikiText-2: 2M tokens, WikiText-103: 100M+). Valioso para avaliação de modelagem de linguagem e ajuste fino de modelos apenas de decodificador como GPT;
  • BookCorpus: mais de 11.000 romances gratuitos. Fundamental para geração em estilo narrativo, transformadores de longo contexto e pré-treinamento de modelos fundamentais (por exemplo, BERT, GPT-2);
  • Common Crawl / C4: dados multilíngues da web em escala de petabytes. C4 é uma variante deduplicada e filtrada, criada para treinamento de modelos de linguagem de alta qualidade (por exemplo, T5);
  • The Pile: 825GB de dados diversos (livros, ArXiv, StackExchange, GitHub, etc.). Projetado para treinar modelos no estilo GPT de forma competitiva com os LLMs da OpenAI.

Resumo

  • Seleção de conjuntos de dados baseada em qualidade, licenciamento, escala e alinhamento com os objetivos generativos;
  • Aplicação de pipelines de pré-processamento adaptados a cada modalidade utilizando ferramentas robustas e de nível produtivo;
  • Garantia de estratégias rigorosas de divisão para suportar reprodutibilidade, evitar vazamentos e possibilitar avaliação justa.

1. Por que a qualidade dos dados é mais importante do que a quantidade no treinamento de modelos generativos de IA?

2. Qual é um desafio comum ao coletar dados diversos para treinar modelos generativos?

3. Qual é o principal objetivo da aumentação de dados no contexto do treinamento de IA generativa?

question mark

Por que a qualidade dos dados é mais importante do que a quantidade no treinamento de modelos generativos de IA?

Selecione a resposta correta

question mark

Qual é um desafio comum ao coletar dados diversos para treinar modelos generativos?

Selecione a resposta correta

question mark

Qual é o principal objetivo da aumentação de dados no contexto do treinamento de IA generativa?

Selecione a resposta correta

Tudo estava claro?

Como podemos melhorá-lo?

Obrigado pelo seu feedback!

Seção 3. Capítulo 1

Pergunte à IA

expand

Pergunte à IA

ChatGPT

Pergunte o que quiser ou experimente uma das perguntas sugeridas para iniciar nosso bate-papo

Seção 3. Capítulo 1
some-alt