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

bookColeta e Pré-Processamento de Dados

O treinamento de modelos generativos requer não apenas uma boa arquitetura 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

A coleta de dados para modelagem generativa depende do domínio, disponibilidade da fonte, escala e licenciamento. Para dados de texto e visão, fontes comuns incluem conjuntos de dados abertos, conteúdo extraído 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. Trata-se de 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 normalmente 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 utilizando 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.

A seguir, 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)
copy

Coleta 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()
copy
Note
Nota

Sempre revisar os termos de serviço de um site antes de realizar scraping. Utilizar taxas de requisição adequadas e respeitar o robots.txt. Scraping inadequado pode resultar em bloqueio de IP ou consequências legais.

Em contextos de GenAI, a raspagem de dados da web é frequentemente uma etapa preliminar 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 grande escala.

Técnicas de Pré-processamento

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, 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 para a entrada do modelo (por exemplo, 64x64 para GANs iniciais, 512x512 para modelos de difusão);
  • Normalização: escala os valores dos pixels para um intervalo padrão, tipicamente [−1, 1] ou [0, 1];
  • Manipulação de Espaço de Cor: garantir consistência de cor — converter para RGB ou escala de cinza. Para geração condicional, manter canais alfa se presentes;
  • Aumento de dados: introduz variação durante o treinamento por meio de transformações.

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)
copy
  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: este 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: isto substitui múltiplos caracteres de espaço 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())
copy
  • Tokenização: divide o 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")
copy
  • 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"))
copy
  • Preenchimento/Truncamento: ver 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")
copy
Note
Nota

Construa pipelines modulares de pré-processamento com foco em reprodutibilidade. Utilize DVC, wandb artifacts ou huggingface/datasets com streaming + caching.

Estratégias de Divisão de Dados

Divisão eficaz dos dados é essencial para generalização, especialmente em modelagem generativa, onde o overfitting a modos ou memorização é comum.

Divisão Treino/Validação/Teste

  • 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: mantido completamente separado até a avaliação final do modelo.

Exemplo usando train_test_split:

Para Datasets do Hugging Face:

Validação Cruzada e Bootstrapping

  • 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 bootstrapping 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:

Conjuntos de Dados Comumente Utilizados

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

Conjuntos de Dados de 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 imagem;
  • 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 de 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 aprendizado por transferência, 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 Wikipédia (WikiText-2: 2 milhões de tokens, WikiText-103: mais de 100 milhões). Valioso para avaliação de modelagem de linguagem e ajuste fino de modelos apenas decodificadores como o 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 web multilíngues em escala de petabytes. C4 é uma variante deduplicada e filtrada, curada 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 competitivos com LLMs da OpenAI.

Resumo

  • Seleção de conjuntos de dados com base 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 de produção;
  • 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 o treinamento de modelos generativos?

3. Qual é o objetivo principal 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?

Select the correct answer

question mark

Qual é um desafio comum ao coletar dados diversos para o treinamento de modelos generativos?

Select the correct answer

question mark

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

Select the correct answer

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

Awesome!

Completion rate improved to 4.76

bookColeta e Pré-Processamento de Dados

Deslize para mostrar o menu

O treinamento de modelos generativos requer não apenas uma boa arquitetura 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

A coleta de dados para modelagem generativa depende do domínio, disponibilidade da fonte, escala e licenciamento. Para dados de texto e visão, fontes comuns incluem conjuntos de dados abertos, conteúdo extraído 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. Trata-se de 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 normalmente 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 utilizando 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.

A seguir, 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)
copy

Coleta 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()
copy
Note
Nota

Sempre revisar os termos de serviço de um site antes de realizar scraping. Utilizar taxas de requisição adequadas e respeitar o robots.txt. Scraping inadequado pode resultar em bloqueio de IP ou consequências legais.

Em contextos de GenAI, a raspagem de dados da web é frequentemente uma etapa preliminar 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 grande escala.

Técnicas de Pré-processamento

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, 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 para a entrada do modelo (por exemplo, 64x64 para GANs iniciais, 512x512 para modelos de difusão);
  • Normalização: escala os valores dos pixels para um intervalo padrão, tipicamente [−1, 1] ou [0, 1];
  • Manipulação de Espaço de Cor: garantir consistência de cor — converter para RGB ou escala de cinza. Para geração condicional, manter canais alfa se presentes;
  • Aumento de dados: introduz variação durante o treinamento por meio de transformações.

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)
copy
  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: este 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: isto substitui múltiplos caracteres de espaço 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())
copy
  • Tokenização: divide o 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")
copy
  • 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"))
copy
  • Preenchimento/Truncamento: ver 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")
copy
Note
Nota

Construa pipelines modulares de pré-processamento com foco em reprodutibilidade. Utilize DVC, wandb artifacts ou huggingface/datasets com streaming + caching.

Estratégias de Divisão de Dados

Divisão eficaz dos dados é essencial para generalização, especialmente em modelagem generativa, onde o overfitting a modos ou memorização é comum.

Divisão Treino/Validação/Teste

  • 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: mantido completamente separado até a avaliação final do modelo.

Exemplo usando train_test_split:

Para Datasets do Hugging Face:

Validação Cruzada e Bootstrapping

  • 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 bootstrapping 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:

Conjuntos de Dados Comumente Utilizados

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

Conjuntos de Dados de 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 imagem;
  • 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 de 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 aprendizado por transferência, 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 Wikipédia (WikiText-2: 2 milhões de tokens, WikiText-103: mais de 100 milhões). Valioso para avaliação de modelagem de linguagem e ajuste fino de modelos apenas decodificadores como o 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 web multilíngues em escala de petabytes. C4 é uma variante deduplicada e filtrada, curada 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 competitivos com LLMs da OpenAI.

Resumo

  • Seleção de conjuntos de dados com base 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 de produção;
  • 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 o treinamento de modelos generativos?

3. Qual é o objetivo principal 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?

Select the correct answer

question mark

Qual é um desafio comum ao coletar dados diversos para o treinamento de modelos generativos?

Select the correct answer

question mark

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

Select the correct answer

Tudo estava claro?

Como podemos melhorá-lo?

Obrigado pelo seu feedback!

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